简体   繁体   中英

NSURL issue in createRequest() function of PayUCreateRequest in Payu Swift integration

I am integrating Payu in iOS app with Swift language. Since Payu has not provided iOS SDK and documentation, so the links that I have used are Integrating PayU Money Gateway iOS Swift and How to integrate PayU Money in swift . But I am facing same issue in both integrations.

Issue : [NSURL init] called; this results in an NSURL instance with an empty URL string. Please use one of the documented NSURL initialization methods instead (initWithString:, initFileURLWithPath:, etc.). This message shown only once.

The code I am using (from link 1) :

 import UIKit

class ViewController: UIViewController {

    @IBAction func onTapBtnPay(_ sender: UIButton) {
        continueWithCardPayment()
        createRequest.createRequest(withPaymentParam: paymentParamForPassing,forPaymentType: PAYMENT_PG_PAYU_MONEY , withCompletionBlock: {(request, postParam , error) in
            if error == nil {
                print("Success")
            }
            else
            {
                print("Error data : \(error.debugDescription)")
                print("Failure")
            }
        })
    }

    var paymentParamForPassing = PayUModelPaymentParams()
    var webServiceResponse: PayUWebServiceResponse = PayUWebServiceResponse()
    var createRequest: PayUCreateRequest = PayUCreateRequest()

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func continueWithCardPayment()  {

        paymentParamForPassing.key = "0MQaQP"
        paymentParamForPassing.transactionID = "Ywism0Q9XC88qvy";
        paymentParamForPassing.amount = "10.0"
        paymentParamForPassing.productInfo = "Nokia";
        paymentParamForPassing.firstName = "Ram";
        paymentParamForPassing.email = "email@testsdk1.com";
        paymentParamForPassing.userCredentials = "ra:ra";
        paymentParamForPassing.phoneNumber = "1111111111";
        paymentParamForPassing.surl = "https://www.google.com/";
        paymentParamForPassing.furl = "https://www.facebook.com/";
        paymentParamForPassing.udf1 = "u1";
        paymentParamForPassing.udf2 = "u2";
        paymentParamForPassing.udf3 = "u3";
        paymentParamForPassing.udf4 = "u4";
        paymentParamForPassing.udf5 = "u5";
        paymentParamForPassing.environment = ENVIRONMENT_MOBILETEST
        paymentParamForPassing.offerKey =  "offertest 1411";

        paymentParamForPassing.hashes.paymentHash =  "ade84bf6dd9da35d0aab50a5bf61d6272ab0fc488b361b65c66745054aacf1900e3c60b5022d2114bae7360174ebcb3cd7185a5d472e5c99701e5e7e1eccec34";
        paymentParamForPassing.hashes.paymentRelatedDetailsHash =  "915299224c80eff0eb2407b945a5087556292f58baca25fd05a0bceb6826aa9eb531810001dd4b4677dd928dd60d39eecf843b2189f213f9bb82c5a9483e3aac";
        paymentParamForPassing.hashes.vasForMobileSDKHash =  "5c0314c2781876f7e0a53676b0d08e1457dafe904d2d15d948626b57409538d51093eef4f15c792b1b9651be7b5659efdd45926e43a1145d68cea094687011ca";
        paymentParamForPassing.hashes.deleteUserCardHash =  "03e10e892005755f91061121036fb1b10f46202b4138d182f153c5de5c7fd44930ed94b32fac230e59bac1e4ca123aca3297e4b9d25024bf13237db9721fec1a";
        paymentParamForPassing.hashes.offerHash =  "1e99fdb59bd91c1a85624104c0fcfae34d7fcb850dd17a0b75e7efe49857d15fdefc47dd0d86ca34cbc3a8b580839aea6341a573e4e60dc1ddcf7ecc32bf9cae";
  }
}

The another code (from link 2) I am using is :

    import UIKit

class ViewController: UIViewController {

    @IBAction func onTapBtnPay(_ sender: UIButton) {
        continueWithCardPayment()
    }


    let paymentParam: PayUModelPaymentParams  = PayUModelPaymentParams()
    var hashes :PayUModelHashes  = PayUModelHashes()
//    let PUSAhelper:PUSAHelperClass = PUSAHelperClass()

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func continueWithCardPayment()  {

        paymentParam.key = "smsplus"
        paymentParam.transactionID = "umangtxn123"
        paymentParam.amount = "100.0"
        paymentParam.productInfo = "Nokia"
        paymentParam.surl = "https://www.payumoney.com/mobileapp/payumoney/success.php"
        paymentParam.furl = "https://www.payumoney.com/mobileapp/payumoney/failure.php"
        paymentParam.firstName = "Umang"
        paymentParam.email = "umangarya336@gmail.com"
        paymentParam.environment = ENVIRONMENT_MOBILETEST
        paymentParam.udf1 = "udf1"
        paymentParam.udf2 = "udf2"
        paymentParam.udf3 = "udf3"
        paymentParam.udf4 = "udf4"
        paymentParam.udf5 = "udf5"
        paymentParam.offerKey = ""
        // Set this property if you want to give offer:
        paymentParam.userCredentials = ""

        PUSAHelperClass.generateHash(fromServer: self.paymentParam) { (hashes, errorString) in
            self.hashes = hashes ?? PayUModelHashes()
            self.paymentParam.hashes = hashes
            self.callPaymentGateway()
        }
    }

    func callPaymentGateway()  {

        let webServiceResponse :PayUWebServiceResponse = PayUWebServiceResponse()

        webServiceResponse.getPayUPaymentRelatedDetail(forMobileSDK: paymentParam) { (paymentDetail, errString, extraParam) in

            if errString == nil {

                let storyboard = UIStoryboard(name: "Main", bundle: nil)
                let payOptionVC = storyboard.instantiateViewController(withIdentifier: "PUUIPaymentOptionVC") as! PUUIPaymentOptionVC

                payOptionVC.paymentParam = self.paymentParam
                payOptionVC.paymentRelatedDetail = paymentDetail

                DispatchQueue.main.async {
                    NotificationCenter.default.addObserver(self, selector: #selector(self.paymentResponseReceived(notify:)), name: NSNotification.Name(rawValue: kPUUINotiPaymentResponse), object: nil)
                    self.navigationController?.pushViewController(payOptionVC, animated: true)
                }
                              }
            }
            else{
                print("Failed to proceed for payment : \(errString)")
            }
        }
    }

    @objc func paymentResponseReceived(notify:NSNotification) {
        print(notify)
    }

}

I have resolved the issue.

You can use the blog on PayU Integration in iOS using swift link.

Please check the blog and try the steps mentioned.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM