This SDK allows mobile developers to provide credit card payment functionality within their iOS applications, without having to pass sensitive card data back to their application backend servers. For more information on including payments in your mobile application see our InApp Payments Guide
pod 'AuthorizeNetAccept'
Include the AcceptSDK.framework
in the application. In Xcode, select the main project file for the target. In the "General" section of the project's properties, scroll down to "Embedded Binaries", press the plus sign (+), and select the framework.
Once included, make sure in “Build Settings” tab, in section “Search Paths”, the path to these frameworks are added correctly.
let handler = AcceptSDKHandler(environment: AcceptSDKEnvironment.ENV_TEST)
let request = AcceptSDKRequest()
request.merchantAuthentication.name = kClientName
request.merchantAuthentication.clientKey = kClientKey
request.securePaymentContainerRequest.webCheckOutDataType.token.cardNumber = self.cardNumberBuffer
request.securePaymentContainerRequest.webCheckOutDataType.token.expirationMonth = self.cardExpirationMonth
request.securePaymentContainerRequest.webCheckOutDataType.token.expirationYear = self.cardExpirationYear
request.securePaymentContainerRequest.webCheckOutDataType.token.cardCode = self.cardVerificationCode
handler!.getTokenWithRequest(request, successHandler: { (inResponse:AcceptSDKTokenResponse) -> () in
dispatch_async(dispatch_get_main_queue(),{
self.updateTokenButton(true)
self.activityIndicatorAcceptSDKDemo.stopAnimating()
print("Token--->%@", inResponse.getOpaqueData().getDataValue())
var output = String(format: "Response: %@\nData Value: %@ \nDescription: %@", inResponse.getMessages().getResultCode(), inResponse.getOpaqueData().getDataValue(), inResponse.getOpaqueData().getDataDescriptor())
output = output + String(format: "\nMessage Code: %@\nMessage Text: %@", inResponse.getMessages().getMessages()[0].getCode(), inResponse.getMessages().getMessages()[0].getText())
self.textViewShowResults.text = output
self.textViewShowResults.textColor = UIColor.greenColor()
})
}) { (inError:AcceptSDKErrorResponse) -> () in
self.activityIndicatorAcceptSDKDemo.stopAnimating()
self.updateTokenButton(true)
let output = String(format: "Response: %@\nError code: %@\nError text: %@", inError.getMessages().getResultCode(), inError.getMessages().getMessages()[0].getCode(), inError.getMessages().getMessages()[0].getText())
self.textViewShowResults.text = output
self.textViewShowResults.textColor = UIColor.redColor()
print(output)
}
Your server constructs a transaction request using the Authorize.Net API, placing the encrypted payment information that it received in previous step in the opaqueData element.
{
"createTransactionRequest": {
"merchantAuthentication": {
"name": "YOUR_API_LOGIN_ID",
"transactionKey": "YOUR_TRANSACTION_KEY"
},
"refId": "123456",
"transactionRequest": {
"transactionType": "authCaptureTransaction",
"amount": "5",
"payment": {
"opaqueData": {
"dataDescriptor": "COMMON.ACCEPT.INAPP.PAYMENT",
"dataValue": "PAYMENT_NONCE_GOES_HERE"
}
}
}
}
}
Calling the SDK from Objective-C should be simple and intuitive:
AcceptSDKHandler *handler = [[AcceptSDKHandler alloc] initWithEnvironment:AcceptSDKEnvironmentENV_TEST];
AcceptSDKRequest *request = [[AcceptSDKRequest alloc] init];
request.merchantAuthentication.name = @""; //name
request.merchantAuthentication.clientKey = @""; //clientkey
request.securePaymentContainerRequest.webCheckOutDataType.token.cardNumber = @""; //cardnumber
request.securePaymentContainerRequest.webCheckOutDataType.token.expirationMonth = @"";
request.securePaymentContainerRequest.webCheckOutDataType.token.expirationYear = @"";
request.securePaymentContainerRequest.webCheckOutDataType.token.cardCode = @"";
[handler getTokenWithRequest:request successHandler:^(AcceptSDKTokenResponse * _Nonnull token) {
NSLog(@"success %@", token.getOpaqueData.getDataValue);
} failureHandler:^(AcceptSDKErrorResponse * _Nonnull error) {
NSLog(@"failed... );
}];
We have a sample application which demonstrates the SDK usage:
https://github.com/AuthorizeNet/accept-sample-ios
Please remember that you are required to use Apple’s In-App Purchase API to sell virtual goods such as premium content for your app, and subscriptions for digital content. Specifically, Apple’s developer terms require that the In-App Purchase API must be used for digital “content, functionality, or services” such as premium features or credits. See https://developer.apple.com/app-store/review/guidelines/ for more details.