CFSDK支付网关'Invalid token sent in request'

CFSDK payment gateway 'Invalid token sent in request'

我正在开发一个需要集成支付网关的应用程序,我正在使用 Cashfree payment gateway WebView Checkout option as per the need. It is easy to implement from their docs。这就是我启动 SDK 的方式:

func initiateCFSDK() {
        let cashfreeVC = CFViewController(params: getPaymentParams(), appId: self.appId, env: self.environmentCF, callBack: self)
        let navVC = UINavigationController(rootViewController: cashfreeVC)
        self.present(navVC, animated: true, completion: nil)
    }

支付参数:

func getPaymentParams() -> Dictionary<String, String> {
        return [
            "orderId": self.orderId,
            "tokenData" : self.paymentToken,
            "orderAmount": self.paymentValue,
            "customerName": "name",
            "orderNote": "health prodcuts",
            "orderCurrency": "INR",
            "customerPhone": "9876543210",
            "customerEmail": "abc@gmail.com",
            "notifyUrl": "https://test.gocashfree.com/notify"
        ]
    }

从他们的文档中,我们需要将框架拖放到 Xcode 项目并将其添加到 Embedded Binaries。使用 orderId 从后端生成的令牌需要在支付参数中传递它。

问题一: 每次我启动 SDK 它都会给我错误:"Invalid token sent in request" 并在 delegate 方法中打印以下结果:

Finished navigating to url https://test.cashfree.com/billpay/checkout/post/submit JSON value : {"orderId":"","referenceId":"","orderAmount":"","txMsg":"Invalid token sent in request","txTime":"","txStatus":"FAILED","paymentMode":"","signature":""}

以下为截图供参考。

问题二: 由于我通过嵌入 UINavigationController 来呈现 SDK,因此当我按下后退按钮时它无法自行关闭。

我为无法解决的错误(无效令牌)苦恼了好几个星期。所以这里有人试过,请看看有什么问题吗?期待 SO 的解决方案。

P.S:我尝试联系他们的技术支持,每次他们只是将 link 发送到他们的文档。

我已经用 Cash Free SDK 准备了演示项目,使用 Xcode 11.0

步骤 1

为了生成token,我在postman中使用

https://test.cashfree.com/api/v2/cftoken/order

带参数

{
"orderId":"ORD123456",
"orderAmount":"30",
"orderCurrency":"INR"
}

与以下 headers

Content-Type:application/json
X-Client-Id:XXXXXXX
X-Client-Secret:XXXXXX

步骤 2

现在在代码中

func initiateCFSDK() {
    let cashfreeVC = CFViewController(params: getPaymentParams(), appId: "xxxxxxxxxxx", env: "TEST", callBack: self)
    self.navigationController?.pushViewController(cashfreeVC, animated: true)
 }
       func getPaymentParams() -> Dictionary<String, String> {
           return [
               "orderId": "ORD123456",
               "tokenData" : "<<TOKEN FROM POSTMAN REQUEST>>",
               "orderAmount": "30",
               "customerName": "name",
               "orderNote": "health prodcuts",
               "orderCurrency": "INR",
               "customerPhone": "9876543210",
               "customerEmail": "abc@gmail.com",
               "notifyUrl": "https://test.gocashfree.com/notify"
           ]
       }

这里没什么变化只是使用了TEST环境并传递了appid和token

备注:

  1. 确保您正在使用 TEST 环境 URL 生成带有 TEST 环境客户端 ID 和客户端密码的令牌
  2. 还要检查 notifyUrl
  3. 订单 ID 应该相同
  4. 确保您没有使用旧的或过期的令牌

问题2 : 不用present了,直接按这个controller :)

干杯! :)