SQL Server Stripe: Create a Charge

Back to Index

To charge a credit card, you create a Charge object. If your API key is in test mode, the supplied payment source (e.g., card) won't actually be charged, though everything else will occur as if in live mode. (Stripe assumes that the charge would have completed successfully).

Documentation: https://stripe.com/docs/api/curl#create_charge

CURL Command

curl -X POST  https://api.stripe.com/v1/charges \
   -u STRIPE_SECRET_KEY: \
   -d amount=2000 \
   -d currency=usd \
   -d source=tok_visa \
   -d description="Charge for aiden.jones@example.com"

SQL Server Example

CREATE PROCEDURE ChilkatSample
AS
BEGIN
    DECLARE @hr int
    DECLARE @iTmp0 int
    DECLARE @sTmp0 nvarchar(4000)
    DECLARE @rest int
    EXEC @hr = sp_OACreate 'Chilkat_9_5_0.Rest', @rest OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    DECLARE @success int

    --  URL: https://api.stripe.com/v1/charges
    DECLARE @bTls int
    SELECT @bTls = 1
    DECLARE @port int
    SELECT @port = 443
    DECLARE @bAutoReconnect int
    SELECT @bAutoReconnect = 1
    EXEC sp_OAMethod @rest, 'Connect', @success OUT, 'api.stripe.com', STR(@port), STR(@bTls), STR(@bAutoReconnect)
    IF STR(@success) <> 1
      BEGIN

        EXEC sp_OAGetProperty @rest, 'ConnectFailReason', @iTmp0 OUT
        PRINT 'ConnectFailReason: ' + @iTmp0
        EXEC sp_OAGetProperty @rest, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @rest
        RETURN
      END

    EXEC sp_OAMethod @rest, 'SetAuthBasic', @success OUT, 'STRIPE_SECRET_KEY', ''

    EXEC sp_OAMethod @rest, 'AddQueryParam', @success OUT, 'amount', '2000'
    EXEC sp_OAMethod @rest, 'AddQueryParam', @success OUT, 'currency', 'usd'
    EXEC sp_OAMethod @rest, 'AddQueryParam', @success OUT, 'source', 'tok_visa'
    EXEC sp_OAMethod @rest, 'AddQueryParam', @success OUT, 'description', 'Charge for aiden.jones@example.com'

    DECLARE @strResponseBody nvarchar(4000)
    EXEC sp_OAMethod @rest, 'FullRequestFormUrlEncoded', @strResponseBody OUT, 'POST', '/v1/charges'
    EXEC sp_OAGetProperty @rest, 'LastMethodSuccess', @iTmp0 OUT
    IF @iTmp0 <> 1
      BEGIN
        EXEC sp_OAGetProperty @rest, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @rest
        RETURN
      END

    DECLARE @jsonResponse int
    EXEC @hr = sp_OACreate 'Chilkat_9_5_0.JsonObject', @jsonResponse OUT

    EXEC sp_OAMethod @jsonResponse, 'Load', @success OUT, @strResponseBody

    DECLARE @id nvarchar(4000)

    DECLARE @object nvarchar(4000)

    DECLARE @amount int

    DECLARE @amount_refunded int

    DECLARE @application int

    DECLARE @application_fee int

    DECLARE @balance_transaction nvarchar(4000)

    DECLARE @captured int

    DECLARE @created int

    DECLARE @currency nvarchar(4000)

    DECLARE @customer int

    DECLARE @description nvarchar(4000)

    DECLARE @destination int

    DECLARE @dispute int

    DECLARE @failure_code int

    DECLARE @failure_message int

    DECLARE @invoice int

    DECLARE @livemode int

    DECLARE @on_behalf_of int

    DECLARE @order int

    DECLARE @outcome int

    DECLARE @paid int

    DECLARE @receipt_email int

    DECLARE @receipt_number int

    DECLARE @refunded int

    DECLARE @refundsObject nvarchar(4000)

    DECLARE @refundsHas_more int

    DECLARE @refundsTotal_count int

    DECLARE @refundsUrl nvarchar(4000)

    DECLARE @review int

    DECLARE @shipping int

    DECLARE @sourceId nvarchar(4000)

    DECLARE @sourceObject nvarchar(4000)

    DECLARE @sourceAddress_city int

    DECLARE @sourceAddress_country int

    DECLARE @sourceAddress_line1 int

    DECLARE @sourceAddress_line1_check int

    DECLARE @sourceAddress_line2 int

    DECLARE @sourceAddress_state int

    DECLARE @sourceAddress_zip int

    DECLARE @sourceAddress_zip_check int

    DECLARE @sourceBrand nvarchar(4000)

    DECLARE @sourceCountry nvarchar(4000)

    DECLARE @sourceCustomer int

    DECLARE @sourceCvc_check int

    DECLARE @sourceDynamic_last4 int

    DECLARE @sourceExp_month int

    DECLARE @sourceExp_year int

    DECLARE @sourceFingerprint nvarchar(4000)

    DECLARE @sourceFunding nvarchar(4000)

    DECLARE @sourceLast4 nvarchar(4000)

    DECLARE @sourceName int

    DECLARE @sourceTokenization_method int

    DECLARE @source_transfer int

    DECLARE @statement_descriptor int

    DECLARE @status nvarchar(4000)

    DECLARE @transfer_group int

    DECLARE @i int

    DECLARE @count_i int

    EXEC sp_OAMethod @jsonResponse, 'StringOf', @id OUT, 'id'
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @object OUT, 'object'
    EXEC sp_OAMethod @jsonResponse, 'IntOf', @amount OUT, 'amount'
    EXEC sp_OAMethod @jsonResponse, 'IntOf', @amount_refunded OUT, 'amount_refunded'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @application OUT, 'application'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @application_fee OUT, 'application_fee'
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @balance_transaction OUT, 'balance_transaction'
    EXEC sp_OAMethod @jsonResponse, 'BoolOf', @captured OUT, 'captured'
    EXEC sp_OAMethod @jsonResponse, 'IntOf', @created OUT, 'created'
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @currency OUT, 'currency'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @customer OUT, 'customer'
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @description OUT, 'description'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @destination OUT, 'destination'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @dispute OUT, 'dispute'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @failure_code OUT, 'failure_code'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @failure_message OUT, 'failure_message'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @invoice OUT, 'invoice'
    EXEC sp_OAMethod @jsonResponse, 'BoolOf', @livemode OUT, 'livemode'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @on_behalf_of OUT, 'on_behalf_of'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @order OUT, 'order'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @outcome OUT, 'outcome'
    EXEC sp_OAMethod @jsonResponse, 'BoolOf', @paid OUT, 'paid'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @receipt_email OUT, 'receipt_email'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @receipt_number OUT, 'receipt_number'
    EXEC sp_OAMethod @jsonResponse, 'BoolOf', @refunded OUT, 'refunded'
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @refundsObject OUT, 'refunds.object'
    EXEC sp_OAMethod @jsonResponse, 'BoolOf', @refundsHas_more OUT, 'refunds.has_more'
    EXEC sp_OAMethod @jsonResponse, 'IntOf', @refundsTotal_count OUT, 'refunds.total_count'
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @refundsUrl OUT, 'refunds.url'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @review OUT, 'review'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @shipping OUT, 'shipping'
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @sourceId OUT, 'source.id'
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @sourceObject OUT, 'source.object'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @sourceAddress_city OUT, 'source.address_city'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @sourceAddress_country OUT, 'source.address_country'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @sourceAddress_line1 OUT, 'source.address_line1'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @sourceAddress_line1_check OUT, 'source.address_line1_check'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @sourceAddress_line2 OUT, 'source.address_line2'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @sourceAddress_state OUT, 'source.address_state'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @sourceAddress_zip OUT, 'source.address_zip'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @sourceAddress_zip_check OUT, 'source.address_zip_check'
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @sourceBrand OUT, 'source.brand'
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @sourceCountry OUT, 'source.country'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @sourceCustomer OUT, 'source.customer'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @sourceCvc_check OUT, 'source.cvc_check'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @sourceDynamic_last4 OUT, 'source.dynamic_last4'
    EXEC sp_OAMethod @jsonResponse, 'IntOf', @sourceExp_month OUT, 'source.exp_month'
    EXEC sp_OAMethod @jsonResponse, 'IntOf', @sourceExp_year OUT, 'source.exp_year'
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @sourceFingerprint OUT, 'source.fingerprint'
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @sourceFunding OUT, 'source.funding'
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @sourceLast4 OUT, 'source.last4'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @sourceName OUT, 'source.name'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @sourceTokenization_method OUT, 'source.tokenization_method'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @source_transfer OUT, 'source_transfer'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @statement_descriptor OUT, 'statement_descriptor'
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @status OUT, 'status'
    EXEC sp_OAMethod @jsonResponse, 'IsNullOf', @transfer_group OUT, 'transfer_group'
    SELECT @i = 0
    EXEC sp_OAMethod @jsonResponse, 'SizeOfArray', @count_i OUT, 'refunds.data'
    WHILE STR(@i) < STR(@count_i)
      BEGIN
        EXEC sp_OASetProperty @jsonResponse, 'I', STR(@i)
        SELECT @i = STR(@i) + 1
      END

    EXEC @hr = sp_OADestroy @rest
    EXEC @hr = sp_OADestroy @jsonResponse


END
GO

Sample JSON Response Body

{
  "id": "ch_1BnETJGswQrCoh0XTs0EERBj",
  "object": "charge",
  "amount": 100,
  "amount_refunded": 0,
  "application": null,
  "application_fee": null,
  "balance_transaction": "txn_1BnETJGswQrCoh0XxO2tGYr7",
  "captured": false,
  "created": 1516662781,
  "currency": "usd",
  "customer": null,
  "description": "My First Test Charge (created for API docs)",
  "destination": null,
  "dispute": null,
  "failure_code": null,
  "failure_message": null,
  "fraud_details": {},
  "invoice": null,
  "livemode": false,
  "metadata": {},
  "on_behalf_of": null,
  "order": null,
  "outcome": null,
  "paid": true,
  "receipt_email": null,
  "receipt_number": null,
  "refunded": false,
  "refunds": {
    "object": "list",
    "data": [
    ],
    "has_more": false,
    "total_count": 0,
    "url": "/v1/charges/ch_1BnETJGswQrCoh0XTs0EERBj/refunds"
  },
  "review": null,
  "shipping": null,
  "source": {
    "id": "card_18ropuGswQrCoh0XjCJ5Zvma",
    "object": "card",
    "address_city": null,
    "address_country": null,
    "address_line1": null,
    "address_line1_check": null,
    "address_line2": null,
    "address_state": null,
    "address_zip": null,
    "address_zip_check": null,
    "brand": "Visa",
    "country": "US",
    "customer": null,
    "cvc_check": null,
    "dynamic_last4": null,
    "exp_month": 8,
    "exp_year": 2017,
    "fingerprint": "F9mANtIt1TaukpRJ",
    "funding": "credit",
    "last4": "4242",
    "metadata": {},
    "name": null,
    "tokenization_method": null
  },
  "source_transfer": null,
  "statement_descriptor": null,
  "status": "succeeded",
  "transfer_group": null
}