Xojo Plugin 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"

Xojo Plugin Example

Dim rest As New Chilkat.Rest
Dim success As Boolean

//  URL: https://api.stripe.com/v1/charges
Dim bTls As Boolean
bTls = True
Dim port As Int32
port = 443
Dim bAutoReconnect As Boolean
bAutoReconnect = True
success = rest.Connect("api.stripe.com",port,bTls,bAutoReconnect)
If (success <> True) Then
    System.DebugLog("ConnectFailReason: " + Str(rest.ConnectFailReason))
    System.DebugLog(rest.LastErrorText)
    Return
End If

rest.SetAuthBasic("STRIPE_SECRET_KEY","")

rest.AddQueryParam("amount","2000")
rest.AddQueryParam("currency","usd")
rest.AddQueryParam("source","tok_visa")
rest.AddQueryParam("description","Charge for aiden.jones@example.com")

Dim strResponseBody As String
strResponseBody = rest.FullRequestFormUrlEncoded("POST","/v1/charges")
If (rest.LastMethodSuccess <> True) Then
    System.DebugLog(rest.LastErrorText)
    Return
End If

Dim jsonResponse As New Chilkat.JsonObject
jsonResponse.Load(strResponseBody)

Dim id As String
Dim object As String
Dim amount As Int32
Dim amount_refunded As Int32
Dim application As Boolean
Dim application_fee As Boolean
Dim balance_transaction As String
Dim captured As Boolean
Dim created As Int32
Dim currency As String
Dim customer As Boolean
Dim description As String
Dim destination As Boolean
Dim dispute As Boolean
Dim failure_code As Boolean
Dim failure_message As Boolean
Dim invoice As Boolean
Dim livemode As Boolean
Dim on_behalf_of As Boolean
Dim order As Boolean
Dim outcome As Boolean
Dim paid As Boolean
Dim receipt_email As Boolean
Dim receipt_number As Boolean
Dim refunded As Boolean
Dim refundsObject As String
Dim refundsHas_more As Boolean
Dim refundsTotal_count As Int32
Dim refundsUrl As String
Dim review As Boolean
Dim shipping As Boolean
Dim sourceId As String
Dim sourceObject As String
Dim sourceAddress_city As Boolean
Dim sourceAddress_country As Boolean
Dim sourceAddress_line1 As Boolean
Dim sourceAddress_line1_check As Boolean
Dim sourceAddress_line2 As Boolean
Dim sourceAddress_state As Boolean
Dim sourceAddress_zip As Boolean
Dim sourceAddress_zip_check As Boolean
Dim sourceBrand As String
Dim sourceCountry As String
Dim sourceCustomer As Boolean
Dim sourceCvc_check As Boolean
Dim sourceDynamic_last4 As Boolean
Dim sourceExp_month As Int32
Dim sourceExp_year As Int32
Dim sourceFingerprint As String
Dim sourceFunding As String
Dim sourceLast4 As String
Dim sourceName As Boolean
Dim sourceTokenization_method As Boolean
Dim source_transfer As Boolean
Dim statement_descriptor As Boolean
Dim status As String
Dim transfer_group As Boolean
Dim i As Int32
Dim count_i As Int32

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

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
}