OlaMoney

PayU Mobile SDK - Ola Money (iOS)

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.

Ola Money SDK Frameworks

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.

Setup

Cocapods integration:

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'

Manual integration

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:

  1. Download the framework files from here - https://github.com/payu-intrepos/payu-olamoney-ios/

  2. Link the framework from your Xcode project

Dependencies

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

  1. PayU Networking: This is used by PayUOlaMoneySDK to handle network requests.

  2. PayU Logger: This is used by PayUOlaMoneySDK to log errors and verbose data.

Integration

Initiating Payments

  1. Set environment to test or production

    PayUOMCore.shared.environment = .production
    // PayUOMCore.shared.environment = .test
  2. Set Logger level to verbose, error or disabled

    PayUOMCore.shared.logLevel = .verbose
    // PayUOMCore.shared.logLevel = .none
  3. 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 1
    transactionId: String.randomString(length: 10), //A unique ID for this trasaction
    amount: "1", //Amount of transaction
    productInfo: "iPhone", // Description of the product
    firstName: "John", lastName: "Doe", // First name of the user
    email: "[email protected]",// Email of the useer
    phoneNumber: 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 data
    udf2: "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"
    } catch let error {
    //Helper.showAlert("Could not create post params due to: \(error.localizedDescription)", onController: self)
    }
  4. 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:

      1. paymentHash: This is required to create transaction at PayU's end.

      2. 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

      eligibilityHash

      get_eligible_payment_options

      {\"amount\":\"1\",\"txnid\":\""+txid+"\",\"mobile_number\":\"12345678\",\"first_name\":\"John\",\"bankCode\":\"OLAM\",\"email\":\"[email protected]\",\"last_name\":\"Smith\"}

  5. 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 in
    DispatchQueue.main.async {
    self.makePaymentButton.isEnabled = status
    if (error != nil) {
    self.elegebilityLabel.text = error?.localizedDescription
    } else {
    self.elegebilityLabel.text = response?.msg
    }
    }
    })
  6. With the PayUOMEligibilityModel object received above, you can populate relevant options on your checkout screen.

  7. 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
  8. (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 = self
    let navVC = UINavigationController(rootViewController: customBrowser!)
    self.present(navVC, animated: true, completion: nil)