PayU's Ola Money SDK is an iOS framework for integrating Ola Money Postpaid + Wallet in your app in an easy, efficient and stable way.
PayU provides SDK that perform different functions related to Ola Money Payments
PayUOlaMoneySDK: The PayUOlaMoneySDK framework give access to the APIs, Error Codes, Request builder etc. needed to integrate with PayU for OlaMoney Postpaid+Wallet.
The recommended way to included the PayUOlaMoneySDK in your iOS app is through Cocoapods. To include the framework in your Xcode project, add following line to your Podfile
For Swift 5.1
pod 'PayUIndia-OlaMoney', '1.0.0'
For Swift 5.1.3
pod 'PayUIndia-OlaMoney', '1.0.1'
If you do not want to use Cocoapods, you can download the framework manually and integrate it in your mobile app. To integrate manually, please follow the steps below:
Download the framework files from here - https://github.com/payu-intrepos/payu-olamoney-ios/​
Link the framework from your Xcode project
The PayUOlaMoneySDK framework requires the following dependencies. When integrating through Cocoapods, these dependencies are added automatically and you do not need to take any additional action.
If you are integrating with the PayUOlaMoneySDK manually, you will need to include the dependencies mentioned below. To include the frameworks manually please follow the link - https://github.com/payu-intrepos/payu-upi-ios-sdk/tree/master/Dependencies​
PayU Networking: This is used by PayUOlaMoneySDK to handle network requests.
PayU Logger: This is used by PayUOlaMoneySDK to log errors and verbose data.
Set environment to test or production
PayUOMCore.shared.environment = .production// PayUOMCore.shared.environment = .test
Set Logger level to verbose, error or disabled
PayUOMCore.shared.logLevel = .verbose// PayUOMCore.shared.logLevel = .none
Set mandatory payment parameters required for the payment
do {paymentParams = try PayUOMPaymentParams(merchantKey: <Your merchant Key>, //Your merchant key for the environment set in step 1transactionId: String.randomString(length: 10), //A unique ID for this trasactionamount: "1", //Amount of transactionproductInfo: "iPhone", // Description of the productfirstName: "John", lastName: "Doe", // First name of the useremail: "[email protected]",// Email of the useerphoneNumber: phoneNumberTextField.text ?? "9876543210", // Phone of user//User defined parameters.//You can save additional details for each transaction if you need them for your business logic.//You will get these details back in payment response and transaction verify API//Like, you can add SKUs for which payment is made.udf1: "SKU1|SKU2|SKU3",//You can keep all udf fields blank if you do not have any requirement to save txn specific dataudf2: "asdf",udf3: "asdf",udf4: "asdf",udf5: "asdf")​// Example userCredentials - "merchantKey:user'sUniqueIdentifier"paymentParams?.userCredentials = "smsplus:[email protected]"// Success URL. Not used but required due to mandatory check.paymentParams?.surl = "https://payu.herokuapp.com/ios_success"// Failure URL. Not used but required due to mandatory check.paymentParams?.furl = "https://payu.herokuapp.com/ios_failure"paymentParams?.offerKey = "[email protected],[email protected],for particular [email protected],[email protected],[email protected]"} catch let error {//Helper.showAlert("Could not create post params due to: \(error.localizedDescription)", onController: self)}
Fetch hashes and save them in paymentParams
object
You need to set hashes
property in paymentParams
. Hashes ensure that requests are untampered. This helps in ensure security of the transaction. Property hashes
is of type PayUOMHashes
PayUHashes
has 2 properties. Each of these 3 is used for a distinct API call. These 3 properties are defined below:
paymentHash
: This is required to create transaction at PayU's end.
eligibilityHash
: This is required by checkEligibility API to check eligibility if use is eligible/registered for the Ola Money
You need to provide hashes before asking SDK to initiate the payment and check the user's eligibility. Hashes must be generated only on your server. Your secret key (also known as salt) must never be included in your app.
Please view this documentation to generate hashes on your server.
See page 10 & 11 for formula of generating paymentHash
.
See page 36 for formula of generating paymentRelatedDetailsForMobileSDKHash
& validateVPAHash
Command and var1 values for generating paymentRelatedDetailsForMobileSDKHash
& validateVPAHash
are given below
Hash for param | Command | var1 |
| get_eligible_payment_options | {\"amount\":\"1\",\"txnid\":\""+txid+"\",\"mobile_number\":\"12345678\",\"first_name\":\"John\",\"bankCode\":\"OLAM\",\"email\":\"[email protected]\",\"last_name\":\"Smith\"} |
After setting value of hashes in paymentParams
, call following method of class PayUOMCore
to check whether the user is eligible to pay through Ola Money (Postpaid + Wallet) :
public func checkEligibility(params: PayUOMPaymentParams, completion:@escaping(_ status: Bool, _ response: PayUOMEligibilityModel?, _ error: Error?) -> Void)
You will get a response of type Result
with the value of type PayUOMEligibilityModel
in response's success param. Sample code shown below
PayUOMCore.shared.checkEligibility(params: self.paymentParams!, completion: { [unowned self] status, response, error inDispatchQueue.main.async {self.makePaymentButton.isEnabled = statusif (error != nil) {self.elegebilityLabel.text = error?.localizedDescription} else {self.elegebilityLabel.text = response?.msg}}})
With the PayUOMEligibilityModel
object received above, you can populate relevant options on your checkout screen.
After checking the eligibilty, we can fetch the post params with the method. And can use the Custom Browser or WKWebView to load the URL and PostData
public func getPostData(params: PayUOMPaymentParams) -> String
(Optional) Use the Custom Browser to load data using following code.
let customBrowser = try? PUCBWebVC(postParam: postData, url: PayUOMSecureEndPoint.securePayment().baseURL, merchantKey: "smsplus")customBrowser?.cbWebVCDelegate = selflet navVC = UINavigationController(rootViewController: customBrowser!)self.present(navVC, animated: true, completion: nil)