Ios 如何将PayU货币整合到swift中

Ios 如何将PayU货币整合到swift中,ios,objective-c,iphone,swift,Ios,Objective C,Iphone,Swift,我是swift新手,有人能帮我将PayU Money整合到swift中吗。。。。 我正在使用这个sdk:这个答案来自PayU文档本身,我在这里回答这个问题只是因为我花了几个小时来实现他们的文档 嗨,我可以指导你进行非无缝集成。 在非无缝集成中,PayU已经提供UI,并将处理卡类型和所有支付流程,最后将通知您的交易状态以及失败原因和所有详细信息 从此处下载SDK: 从示例代码中,从“BusinessLayer”文件夹复制文件 因此,我希望您现在拥有所有必需的文件,我们可以进一步进行集成 您正在将

我是swift新手,有人能帮我将PayU Money整合到swift中吗。。。。
我正在使用这个sdk:

这个答案来自PayU文档本身,我在这里回答这个问题只是因为我花了几个小时来实现他们的文档

嗨,我可以指导你进行非无缝集成。

在非无缝集成中,PayU已经提供UI,并将处理卡类型和所有支付流程,最后将通知您的交易状态以及失败原因和所有详细信息

从此处下载SDK:

从示例代码中,从“BusinessLayer”文件夹复制文件

因此,我希望您现在拥有所有必需的文件,我们可以进一步进行集成

您正在将PayU与swift集成,因为PayU团队没有swift SDK,我们必须继续与Objective-C进行绑定。 您可以在此处找到有关此的信息:

在build设置中创建并配置头文件后,导入SDK的以下头文件

#import "PayU_iOS_CoreSDK.h"
#import <CommonCrypto/CommonHMAC.h>
#import "PUUIPaymentOptionVC.h"
#import "PUSAWSManager.h"
#import "PUSAWSManager.h"
#import "PUSAHelperClass.h"
这是我为进一步处理而创建的函数

func continueWithCardPayment()  {

        paymentParam.key = "gtKFFx"
        paymentParam.transactionID = "umangtxn123"
        paymentParam.amount = "100.0"
        paymentParam.productInfo = "Nokia"
        paymentParam.SURL = "https://google.com/"
        paymentParam.FURL = "https://facebook.com/"
        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 = ""

        PUSAhelper.generateHashFromServer(self.paymentParam) { (hashes, errorString) in
            self.hashes = hashes
            self.paymentParam.hashes = hashes
            self.callPaymentGateway()
        }
    }

    func callPaymentGateway()  {

        let webServiceResponse :PayUWebServiceResponse = PayUWebServiceResponse()

        webServiceResponse.getPayUPaymentRelatedDetailForMobileSDK(paymentParam) { (paymentDetail, errString, extraParam) in

            if errString == nil {

                let payOptionVC: PUUIPaymentOptionVC = loadVC("PUUIMainStoryBoard", strVCId: VC_IDENTIFIER_PAYMENT_OPTION) as! PUUIPaymentOptionVC

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

                runOnMainThread({
                    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.paymentResponseReceived(_:)), name: kPUUINotiPaymentResponse, object: nil)
                    self.navigationController?.pushViewController(payOptionVC, animated: true)
                })
            }
            else{
                print("Failed to proceed for payment : \(errString)")
            }
        }
    }
有一些我的自定义功能,将通过错误在您的身边复制粘贴,我在这里提到他们。一定要照顾他们

1) loadVC(“PUUIMainStoryBoard”,strVCId:VC\u标识符\u支付选项) //Loadvc函数是我为加载视图控制器而创建的,您必须在调用视图控制器时对其进行更改

2) RunnonMainThread({ //此函数用于在主线程上运行代码

我使用了PayU团队提供的所有测试凭证 您可以在他们的文档中找到更多信息:

//通过这一行,我们添加了支付网关发送的通知,通知我们支付过程的状态,让我们兑现通知

func paymentResponseReceived(notify:NSNotification) {
print(notify)
}
您将在notify.object中获得响应。 您可以在他们的文档中找到更复杂的语言和方式:


希望这个答案能对您有所帮助。

这个答案取自PayU文档本身,我在这里回答这个问题只是因为我花了几个小时来实现他们的文档

嗨,我可以指导你进行非无缝集成。

在非无缝集成中,PayU已经提供UI,并将处理卡类型和所有支付流程,最后将通知您的交易状态以及失败原因和所有详细信息

从此处下载SDK:

从示例代码中,从“BusinessLayer”文件夹复制文件

因此,我希望您现在拥有所有必需的文件,我们可以进一步进行集成

您正在将PayU与swift集成,因为PayU团队没有swift SDK,我们必须继续与Objective-C进行绑定。 您可以在此处找到有关此的信息:

在build设置中创建并配置头文件后,导入SDK的以下头文件

#import "PayU_iOS_CoreSDK.h"
#import <CommonCrypto/CommonHMAC.h>
#import "PUUIPaymentOptionVC.h"
#import "PUSAWSManager.h"
#import "PUSAWSManager.h"
#import "PUSAHelperClass.h"
这是我为进一步处理而创建的函数

func continueWithCardPayment()  {

        paymentParam.key = "gtKFFx"
        paymentParam.transactionID = "umangtxn123"
        paymentParam.amount = "100.0"
        paymentParam.productInfo = "Nokia"
        paymentParam.SURL = "https://google.com/"
        paymentParam.FURL = "https://facebook.com/"
        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 = ""

        PUSAhelper.generateHashFromServer(self.paymentParam) { (hashes, errorString) in
            self.hashes = hashes
            self.paymentParam.hashes = hashes
            self.callPaymentGateway()
        }
    }

    func callPaymentGateway()  {

        let webServiceResponse :PayUWebServiceResponse = PayUWebServiceResponse()

        webServiceResponse.getPayUPaymentRelatedDetailForMobileSDK(paymentParam) { (paymentDetail, errString, extraParam) in

            if errString == nil {

                let payOptionVC: PUUIPaymentOptionVC = loadVC("PUUIMainStoryBoard", strVCId: VC_IDENTIFIER_PAYMENT_OPTION) as! PUUIPaymentOptionVC

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

                runOnMainThread({
                    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.paymentResponseReceived(_:)), name: kPUUINotiPaymentResponse, object: nil)
                    self.navigationController?.pushViewController(payOptionVC, animated: true)
                })
            }
            else{
                print("Failed to proceed for payment : \(errString)")
            }
        }
    }
有一些我的自定义功能,将通过错误在您身边复制粘贴,我在这里提到他们。一定要照顾他们

1) loadVC(“PUUIMainStoryBoard”,strVCId:VC\u标识符\u支付选项) //Loadvc函数是我为加载视图控制器而创建的,您必须在调用视图控制器时对其进行更改

2) RunnonMainThread({ //此函数用于在主线程上运行代码

我使用了PayU团队提供的所有测试凭证 您可以在他们的文档中找到更多信息:

//通过这一行,我们添加了支付网关发送的通知,通知我们支付过程的状态,让我们兑现通知

func paymentResponseReceived(notify:NSNotification) {
print(notify)
}
您将在notify.object中获得响应。 您可以在他们的文档中找到更复杂的语言和方式:


希望这个答案能对您有所帮助。

以下是解决方案的源代码,包括所有步骤

首先,从这个链接下载框架,并按照安装步骤进行操作

完成框架安装步骤后,此处是代码

导入此框架

**

1)导入插件显示 2) 导入CommonCrypto

**

添加此函数,并在需要ex-like on按钮或特定事件时调用它

func continueWithCardPayment()

    {
             var paymentParam = PUMTxnParam()
            paymentParam.key = "your merhcant key"
            paymentParam.merchantid = " merchant id"
            paymentParam.txnID = "xyz"
            paymentParam.phone = "982412345"
            paymentParam.amount = "500"
            paymentParam.productInfo = "Nokia"
            paymentParam.surl = "https://test.payumoney.com/mobileapp/payumoney/success.php"
            paymentParam.furl = "https://test.payumoney.com/mobileapp/payumoney/failure.php"
            paymentParam.firstname = "john"
            paymentParam.email = "john@john.com"
            paymentParam.environment = PUMEnvironment.test
            paymentParam.udf1 = "udf1"
            paymentParam.udf2 = "udf2"
            paymentParam.udf3 = "udf3"
            paymentParam.udf4 = "udf4"
            paymentParam.udf5 = "udf5"
            paymentParam.udf6 = ""
            paymentParam.udf7 = ""
            paymentParam.udf8 = ""
            paymentParam.udf9 = ""
            paymentParam.udf10 = ""
            paymentParam.hashValue = self.getHashForPaymentParams(paymentParam)
           // paymentParam.offerKey = ""              // Set this property if you want to give offer:
           // paymentParam.userCredentials = ""



                PlugNPlay.presentPaymentViewController(withTxnParams: paymentParam, on: self, withCompletionBlock: { paymentResponse, error, extraParam in
                    if error != nil {
                        UIUtility.toastMessage(onScreen: error?.localizedDescription)
                    } else {
                        var message = ""
                        if paymentResponse?["result"] != nil && (paymentResponse?["result"] is [AnyHashable : Any]) {
                            print(paymentResponse!)
                            message = "Hello Asad sucess"
                            //                    message = paymentResponse?["result"]?["error_Message"] as? String ?? ""
                            //                    if message.isEqual(NSNull()) || message.count == 0 || (message == "No Error") {
                            //                        message = paymentResponse?["result"]?["status"] as? String ?? ""
                            //                    }
                        } else {
                            message = paymentResponse?["status"] as? String ?? ""
                        }
                        UIUtility.toastMessage(onScreen: message)
                    }
                })

            //PlugNPlay.presentPaymentViewController(withTxnParams: paymentParam, on: self, withCompletionBlock: )
        }
然后添加这两个生成hash的函数&SHA512

func sha512(_ str: String) -> String {

        let data = str.data(using:.utf8)!
        var digest = [UInt8](repeating: 0, count: Int(CC_SHA512_DIGEST_LENGTH))
        data.withUnsafeBytes({
            _ = CC_SHA512($0, CC_LONG(data.count), &digest)
        })
        return digest.map({ String(format: "%02hhx", $0) }).joined(separator: "")
    }
    func getHashForPaymentParams(_ txnParam: PUMTxnParam?) -> String? {
        let salt = "your salt key"
        var hashSequence: String? = nil
        if let key = txnParam?.key, let txnID = txnParam?.txnID, let amount = txnParam?.amount, let productInfo = txnParam?.productInfo, let firstname = txnParam?.firstname, let email = txnParam?.email, let udf1 = txnParam?.udf1, let udf2 = txnParam?.udf2, let udf3 = txnParam?.udf3, let udf4 = txnParam?.udf4, let udf5 = txnParam?.udf5, let udf6 = txnParam?.udf6, let udf7 = txnParam?.udf7, let udf8 = txnParam?.udf8, let udf9 = txnParam?.udf9, let udf10 = txnParam?.udf10 {
            hashSequence = "\(key)|\(txnID)|\(amount)|\(productInfo)|\(firstname)|\(email)|\(udf1)|\(udf2)|\(udf3)|\(udf4)|\(udf5)|\(udf6)|\(udf7)|\(udf8)|\(udf9)|\(udf10)|\(salt)"
        }



        let hash = self.sha512(hashSequence!).description.replacingOccurrences(of: "<", with: "").replacingOccurrences(of: ">", with: "").replacingOccurrences(of: " ", with: "")

        return hash
    }
func-sha512(str:String)->String{
让data=str.data(使用:.utf8)!
变量摘要=[UInt8](重复:0,计数:Int(抄送摘要长度))
data.withUnsafeBytes({
_=CC_SHA512($0,CC_LONG(data.count)和摘要)
})
return digest.map({String(格式:'%02hhx',$0)})。已加入(分隔符:“”)
}
func getHashForPaymentParams(xnParam:PUMTxnParam?->字符串{
让salt=“你的盐钥匙”
var hashSequence:字符串?=nil
如果让key=txnParam?.key,让txnID=txnParam?.txnID,让amount=txnParam?.amount,让productInfo=txnParam?.productInfo,让firstname=txnParam?.firstname,让email=txnParam?.email,让udf1=txnParam?.udf1,让udf2=txnParam?.udf2,让udf3=txnParam?.udf3,让udf4=txnParam?.udf5=txnParam?.udf5,让udf6=txnParam?.udf6,让udf7=txnParam?.udf7,让udf8=txnParam?.udf8,让udf9=txnParam?.udf9,让udf10=txnParam?.udf10{
hashSequence=“\(键)\(txnID)\(金额)\(产品信息)\(名字)\(电子邮件)\(udf1)\(udf2)\(udf3)\(udf4)\(udf5)\(udf6)\(udf7)\(udf8)\(udf9)\(udf10)\(盐)”
}
让hash=self.sha512(hashSequence!)。说明。replacingOccurrences(of:,with:)。replacingOccurrences(of:,with:)
返回散列
}

立即运行代码

以下是解决方案的源代码,包括所有步骤

首先,从这个链接下载框架,并按照安装步骤进行操作

完成框架安装步骤后,此处是代码

导入此框架

**

1)导入插件显示 2) 导入CommonCrypto

**

添加此函数并在需要时调用它