Objective-C 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"

Objective-C Example

#import <CkoRest.h>
#import <NSString.h>
#import <CkoJsonObject.h>

CkoRest *rest = [[CkoRest alloc] init];
BOOL success;

//  URL: https://api.stripe.com/v1/charges
BOOL bTls = YES;
int port = 443;
BOOL bAutoReconnect = YES;
success = [rest Connect: @"api.stripe.com" port: [NSNumber numberWithInt: port] tls: bTls autoReconnect: bAutoReconnect];
if (success != YES) {
    NSLog(@"%@%d",@"ConnectFailReason: ",[rest.ConnectFailReason intValue]);
    NSLog(@"%@",rest.LastErrorText);
    return;
}

[rest SetAuthBasic: @"STRIPE_SECRET_KEY" password: @""];

[rest AddQueryParam: @"amount" value: @"2000"];
[rest AddQueryParam: @"currency" value: @"usd"];
[rest AddQueryParam: @"source" value: @"tok_visa"];
[rest AddQueryParam: @"description" value: @"Charge for aiden.jones@example.com"];

NSString *strResponseBody = [rest FullRequestFormUrlEncoded: @"POST" uriPath: @"/v1/charges"];
if (rest.LastMethodSuccess != YES) {
    NSLog(@"%@",rest.LastErrorText);
    return;
}

CkoJsonObject *jsonResponse = [[CkoJsonObject alloc] init];
[jsonResponse Load: strResponseBody];

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

id = [jsonResponse StringOf: @"id"];
object = [jsonResponse StringOf: @"object"];
amount = [[jsonResponse IntOf: @"amount"] intValue];
amount_refunded = [[jsonResponse IntOf: @"amount_refunded"] intValue];
application = [jsonResponse IsNullOf: @"application"];
application_fee = [jsonResponse IsNullOf: @"application_fee"];
balance_transaction = [jsonResponse StringOf: @"balance_transaction"];
captured = [jsonResponse BoolOf: @"captured"];
created = [[jsonResponse IntOf: @"created"] intValue];
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"] intValue];
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"] intValue];
sourceExp_year = [[jsonResponse IntOf: @"source.exp_year"] intValue];
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"] intValue];
while (i < count_i) {
    jsonResponse.I = [NSNumber numberWithInt: i];
    i = i + 1;
}

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
}