The ChargeDemo source code demonstrates how to implement 2-way integration for accepting credit card payments using Credit Card Terminal for iPhone.
ChargeDemo supplies a single charge button. When it's tapped, a URL
request is made to Credit Card Terminal in order to accept a credit
card payment. When the user is done with Credit Card Terminal,
ChargeDemo will be launched via its URL handler for
com-innerfence-ChargeDemo://.
Protocol details are provided below in the case that you cannot or do not wish to use our Objective-C classes.
Please visit our Developer API page to see how the user experience flow will be like.
-
Add the IFChargeRequest.h, IFChargeRequest.m, IFChargeResponse.h, and IFChargeResponse.m files to your Xcode project.
-
For backwards-compatibility, these classes do not use ARC, so you may need to add the -fno-objc-arc flag for compilation step on those files.
-
Make sure your application is registered to handle a URL scheme in your Info.plist. For example:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.innerfence.ChargeDemo</string>
<key>CFBundleURLSchemes</key>
<array>
<string>com-innerfence-ChargeDemo</string>
</array>
</dict>
</array>- For iOS9, you should also register in your Info.plist to query whether Credit Card Terminal is installed. Add this to your Info.plist:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>com-innerfence-ccterminal</string>
</array> - Request payment by creating an IFChargeRequest object, setting its properties, and calling its submit method. Be sure to set the returnURL property. Consider using setReturnURL:withExtraParams: to automatically include extra parameters in the query string. For example:
IFChargeRequest* chargeRequest = [IFChargeRequest new];
// Include my record_id so it comes back with the response
[chargeRequest
setReturnURL:@"com-innerfence-ChargeDemo://chargeResponse"
withExtraParams:@{ @"record_id": @"123" }
];
chargeRequest.amount = @"50.00";
chargeRequest.description = @"Test transaction";
chargeRequest.invoiceNumber = @"321";
// Include a tax rate if you want Credit Card terminal to calculate
// sales tax. If you pass in @"default", we'll use the default sales
// tax preset by the user. If you leave it as nil, we’ll hide the
// sales tax option from the user.
chargeRequest.taxRate = @"8.5";
[chargeRequest submit];- Handle charge responses in your app delegate’s application:handleOpenURL: by creating an IFChargeResponse object using initWithURL:. Use the responseCode property to determine if the transaction was successful. For example:
- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url
{
IFChargeResponse* chargeResponse = [[IFChargeResponse alloc] initWithURL:url];
// My record_id from the request is available in the extraParams
// dictionary.
NSString* recordId = [chargeResponse.extraParams objectForKey:@"record_id"];
// Since this value is from the URL, I need to validate it.
if ( !IsValidRecordId( recordId ) )
{
// handle error
}
if ( chargeResponse.responseCode == kIFChargeResponseCodeApproved )
{
// Transaction succeeded, check out these properties:
// * chargeResponse.transactionId
// * chargeResponse.amount (includes tax and tip)
// * chargeResponse.taxAmount
// * chargeResponse.taxRate
// * chargeResponse.tipAmount
// * chargeResponse.cardType
// * chargeResponse.redactedCardNumber
}
else
{
// Transaction failed.
}
}The Charge request is simply a set of query string parameters which are appended to a Base URL. Be sure to properly encode the query string parameters.
Base URL: com-innerfence-ccterminal://charge/1.0.0/
returnAppName- your app's name, displayed to give the user contextreturnURL- your app's URL handler, see PROTOCOL RESPONSEreturnImmediately- if set to 1, thereturnURLwill be called with the result immediately instead of waiting for the end user to tap through the “Approved” screenfm- if set to 1, the FileMaker-compatible response format will be usedamount- amount of the transaction (e.g.10.99,1.00,0.90)amountFixed- if set to 1, the amount (subtotal) will be unchangable. If tips or sales tax is enabled, the final amount can still differtaxRate- sales tax rate to apply to amount (e.g.8,8.5,8.25,8.125)currency- currecy code of amount (e.g.USD)email- customer's email address for receiptfirstName- billing first namelastName- billing lastNamecompany- billing company nameaddress- billing street addresscity- billing citystate- billing state or province (e.g.TX,ON)zip- billing zip or postal codephone- billing phone numbercountry- billing country code (e.g.US)invoiceNumber- merchant-assigned invoice numberdescription- description of goods or services
Here is a simple example. Please note the correct encoding of parameters:
com-innerfence-ccterminal://charge/1.0.0/?amount=10.99&email=john%40example.com&returnURL=com-your-app%3A%2F%2Faction%2F
When the request includes a returnURL, the results of the charge
will be returned via the URL by including additional query string
parameters. These parameters all begin with ifcc_ to avoid conflict
with any query parameters your app may already recognize.
ifcc_responseType-approved,cancelled,declined, orerrorifcc_transactionId- transaction id (e.g.100001)ifcc_amount- amount charged (e.g.10.99)ifcc_currency- currency of amount (e.g.USD)ifcc_taxAmount- tax portion from amount (e.g.0.93)ifcc_taxRate- tax rate applied to original amount (e.g.8.5)ifcc_tipAmount- tip portion from amount (e.g.1.50)ifcc_redactedCardNumber- redacted card number (e.g.XXXXXXXXXXXX1111)ifcc_cardType- card type:Visa,MasterCard,Amex,Discover,Maestro,Solo, orUnknown
Here is a simple example:
com-your-app://action/?ifcc_responseType=approved&ifcc_transactionId=100001&ifcc_amount=10.99&ifcc_currency=USD&ifcc_redactedCardNumber=XXXXXXXXXXXX1111&ifcc_cardType=Visa&ifcc_taxAmount=0.93&ifcc_taxRate=8.5&ifcc_tipAmount=1.50
When the fm=1 parameter is included in the original request, the
response is modified by including a dollar-sign ($) before each query
value so that they can be accessed by FileMaker Go scripts. For instance,
instead of ifcc_responseType=success, $ifcc_responseType=success.
- README.markdown
This file.
- COPYING
A copy of the MIT License, under which you may reuse any of the source code in this sample.
- Classes/IFChargeRequest.h
- Classes/IFChargeRequest.m
- Classes/IFChargeResponse.h
- Classes/IFChargeResponse.m
The IFChargeRequest and IFChargeResponse classes. Copy these files into your own XCode project. There are no external dependencies other than libc, Foundation, and UIKit.
- ChargeDemoViewController.xib
- Classes/ChargeDemoViewController.h
- Classes/ChargeDemoViewController.m
A very simple view controller that provides a single Charge button. When the button is tapped, an IFChargeRequest object is created and submitted.
- Info.plist
Registers the com-innerfence-ChargeDemo:// URL scheme.
- Classes/ChargeDemoAppDelegate+HandleURL.m
Handles the URL request, using IFChargeResponse to process the result of the charge request.
- ChargeDemo_Prefix.pch
- Classes/ChargeDemoAppDelegate.h
- Classes/ChargeDemoAppDelegate.m
- main.m
- MainWindow.xib
These files are all stock as generated by XCode.
- ChargeDemo.xcodeproj/
An XCode project for building this sample.