Integration

You can integrate with the CheckoutPro mobile SDK in 5 steps:

1.Include the SDK in your app project

The CheckoutPro SDK is offered via CocoaPods. To add the SDK to your app project, include the SDK framework in your podfile.

pod 'PayUIndia-CheckoutPro'

Install dependency using pod installcommand in terminal

Next, add the following imports in the class where you need to initiate a payment

Swift
Objective-C
Swift
import PayUCheckoutPro
import PayUCheckoutProBase
Objective-C
#import <PayUCheckoutPro/PayUCheckoutPro.h>
#import <PayUCheckoutProBase/PayUCheckoutProBase.h>

Test Merchant key/salt for production environment : 3TnMpV/g0nGFe03

Test Merchant key/salt for test environment : gtKFFx/eCwWELxi

2. Set up the payment hashes

Detailed document is present here.

3. Build the payment parameters

To initiate a payment, your app will need to send transactional information to the Checkout Pro SDK. To pass this information, build a payment parameter object as

Swift
Objective-C
Swift
let paymentParam = PayUPaymentParams(key: <#T##String#>,
transactionId: <#T##String#>,
amount: <#T##String#>,
productInfo: <#T##String#>,
firstName: <#T##String#>,
email: <#T##String#>,
phone: <#T##String#>,
surl: <#T##String#>,
furl: <#T##String#>,
environment:<#T##Environment#> /*.production or .test*/)
paymentParam.userCredential = <#T##String#> // For saving and fetching user’s saved card
Objective-C
PayUPaymentParams *paymentParam = [[PayUPaymentParams alloc] initWithKey:<#(NSString * _Nonnull)#>
transactionId:<#(NSString * _Nonnull)#>
amount:<#(NSString * _Nonnull)#>
productInfo:<#(NSString * _Nonnull)#>
firstName:<#(NSString * _Nonnull)#>
email:<#(NSString * _Nonnull)#>
phone:<#(NSString * _Nonnull)#>
surl:<#(NSString * _Nonnull)#>
furl:<#(NSString * _Nonnull)#>
environment:<#(enum Environment)#> /*EnvironmentProduction or EnvironmentTest*/];
paymentParam.userCredential = <#(NSString)#>; // For saving and fetching use saved card

Payment parameter definition

Mandatory Params:

Parameter

Type

Description

Data Type & Validation

Mandatory

Key

String

Can not be null or empty

Yes

Transaction ID

String

Can not be null or empty and should be unique for each transaction. It can not contain special characters like :-_/

Yes

Amount

String

Can not be null or empty and should be valid double stringified eg, “100.0”

Yes

Product info

String

Can not be null or empty

Yes

First Name

String

Can not be null or empty

Yes

Email

String

Can not be null or empty

Yes

Phone

String

Should be a valid phone number

Yes

SURL

String

Should be a valid URL

Yes

FURL

String

Should be a valid URL

Yes

Environment

Environment

Should be either Swift: Environment.production or Environment.test

ObjectiveC: EnvironmentProduction or EnvironmentTest

Yes

Additional Params:

Additional params are optional params that can be passed to SDK like udf params, static hashes. More details on static hash generation and passing is mentioned in hash generation section. Below is list of params that can be passed in additional params -

Parameter

Type

Description

Mandatory

PaymentParamConstant.udf1

String

User defined field, Merchant can store their customer id, etc.

No

PaymentParamConstant.udf2

String

User defined field, Merchant can store their customer id, etc.

No

PaymentParamConstant.udf3

String

User defined field, Merchant can store their customer id, etc.

No

PaymentParamConstant.udf4

String

User defined field, Merchant can store their customer id, etc.

No

PaymentParamConstant.udf5

String

User defined field, Merchant can store their customer id, etc.

No

HashConstant.paymentRelatedDetailForMobileSDK

String

Hash value for paymentRelatedDetailForMobileSDK

No

HashConstant.vasForMobileSDK

String

Hash value for vasForMobileSDK

No

HashConstant.payment

String

Hash value for payment

No

Swift
Objective-C
Swift
paymentParam.additionalParam[PaymentParamConstant.udf1] = <#T##String#>
paymentParam.additionalParam[PaymentParamConstant.udf2] = <#T##String#>
paymentParam.additionalParam[PaymentParamConstant.udf3] = <#T##String#>
paymentParam.additionalParam[PaymentParamConstant.udf4] = <#T##String#>
paymentParam.additionalParam[PaymentParamConstant.udf5] = <#T##String#>
paymentParam.additionalParam[HashConstant.paymentRelatedDetailForMobileSDK] = <#T##String#>
paymentParam.additionalParam[HashConstant.vasForMobileSDK] = <#T##String#>
paymentParam.additionalParam[HashConstant.payment] = <#T##String#>
Objective-C
paymentParam.additionalParam = [[NSDictionary alloc] initWithObjectsAndKeys:
<#(NSString)#>, PaymentParamConstant.udf1,
<#(NSString)#>, PaymentParamConstant.udf2,
<#(NSString)#>, PaymentParamConstant.udf3,
<#(NSString)#>, PaymentParamConstant.udf4,
<#(NSString)#>, PaymentParamConstant.udf5,
<#(NSString)#>, HashConstant.paymentRelatedDetailForMobileSDK,
<#(NSString)#>, HashConstant.vasForMobileSDK,
<#(NSString)#>, HashConstant.payment,
nil];

4. Initiate the payment

Initialise and launch the Checkout Pro SDK by calling the following method from your UIViewController’s subclass

Swift
Objective-C
Swift
PayUCheckoutPro.open(on: self, paymentParam: paymentParam, config: <#T##PayUCheckoutProConfig?#>, delegate: self)
Objective-C
[PayUCheckoutPro openOn:self paymentParam:paymentParam config:<#(PayUCheckoutProConfig * _Nullable)#> delegate:self];

5.Handle the payment completion

Confirm to PayUCheckoutProDelegate and use these functions to get appropriate callbacks from the SDK:

Swift
Objective-C
Swift
/// This function is called when we successfully process the payment
/// - Parameter response: success response
func onPaymentSuccess(response: Any?) {
}
/// This function is called when we get failure while processing the payment
/// - Parameter response: failure response
func onPaymentFailure(response: Any?) {
}
/// This function is called when the user cancel’s the transaction
/// - Parameter isTxnInitiated: tells whether payment cancelled after reaching bankPage
func onPaymentCancel(isTxnInitiated: Bool) {
}
/// This function is called when we encounter some error while fetching payment options or there is some validation error
/// - Parameter error: This contains error information
func onError(_ error: Error?) {
}
/// Use this function to provide hashes
/// - Parameters:
/// - param: Dictionary that contains key as HashConstant.hashName & HashConstant.hashString
/// - onCompletion: Once you fetch the hash from server, pass that hash with key as param[HashConstant.hashName]
func generateHash(for param: DictOfString, onCompletion: @escaping PayUHashGenerationCompletion) {
// Send this string to your backend and append the salt at the end and send the sha512 back to us, do not calculate the hash at your client side, for security is reasons, hash has to be calculated at the server side
let hashStringWithoutSalt = param[HashConstant.hashString] ?? ""
// Or you can send below string hashName to your backend and send the sha512 back to us, do not calculate the hash at your client side, for security is reasons, hash has to be calculated at the server side
let hashName = param[HashConstant.hashName] ?? ""
// Set the hash in below string which is fetched from your server
let hashFetchedFromServer = <#T##String#>
onCompletion([hashName : hashFetchedFromServer])
}
Objective-C
/// This function is called when we successfully process the payment
/// @param response success response
- (void)onPaymentSuccessWithResponse:(id _Nullable)response {
}
/// This function is called when we get failure while processing the payment
/// @param response failure response
- (void)onPaymentFailureWithResponse:(id _Nullable)response {
}
/// This function is called when the user cancel’s the transaction
/// @param isTxnInitiated tells whether payment cancelled after reaching bankPage
- (void)onPaymentCancelWithIsTxnInitiated:(BOOL)isTxnInitiated {
}
/// This function is called when we encounter some error while fetching payment options or there is some validation error
/// @param error This contains error information
- (void)onError:(NSError * _Nullable)error {
}
/// Use this function to provide hashes
/// @param param NSDictionary that contains key as HashConstant.hashName & HashConstant.hashString
/// @param onCompletion Once you fetch the hash from server, pass that hash with key as param[HashConstant.hashName]
- (void)generateHashFor:(NSDictionary<NSString *, NSString *> * _Nonnull)param onCompletion:(void (^ _Nonnull)(NSDictionary<NSString *, NSString *> * _Nonnull))onCompletion {
// Send below string hashStringWithoutSalt to your backend and append the salt at the end and send the sha512 back to us, do not calculate the hash at your client side, for security is reasons, hash has to be calculated at the server side
NSString *hashStringWithoutSalt = [param objectForKey:HashConstant.hashString];
// Or you can send below string hashName to your backend and send the sha512 back to us, do not calculate the hash at your client side, for security is reasons, hash has to be calculated at the server side
NSString * hashName = [param objectForKey:HashConstant.hashName];
// Set the hash in below string which is fetched from your server
NSString *hashFetchedFromServer = <#(NSString)#>;
NSDictionary *hashResponseDict = [NSDictionary dictionaryWithObjectsAndKeys:hashFetchedFromServer, hashName, nil];
onCompletion(hashResponseDict);
}

For UPI Intent

Currently we support only PhonePe and GooglePay via Intent. Add the query schemes in info.plist

<key>LSApplicationQueriesSchemes</key>
<array>
<string>phonepe</string>
<string>tez</string>
</array>

Distributing your app (App Store / Ad-hoc)

What you get by default is a fat framework that allows you to test your app seamlessly on device as well as simulator. But before archiving your app, you need to remove simulator slices from the framework. Please see the doc which assists in archiving your app with PayUChekoutPro integrated.