美文网首页React Native开发技巧
react-native-paysdk link到已有Cocoa

react-native-paysdk link到已有Cocoa

作者: 言溪Lee | 来源:发表于2017-05-26 18:21 被阅读38次
    • react-native init的工程link执行react-native link react-native-paysdk
      需要修改两个地方:
      1.报错:libz.tbd is not an object file (not allowed in a library)只需将所需库link到build phases中,然后删除整个frameworks文件夹。
      2.报错:Undefined symbols for architecture arm64: "_OBJC_CLASS_$_AlipaySDK", referenced from: objc-class-ref xxx只需将目录中的AlipaySDK.framework拖拽到根目录,copy+group,并且这里的也不能删除。
      library中文件结构.png
    • 手动link到Cocoapods的工程中
      react-native-paysdk.png
      添加支持库:上图中frameworks文件中所需的库

    appdelegate相关配置

    func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool {
         if let host = url.host {
             if host == "safepay" {
                  return true
             } else if host == "pay"{//添加微信支付代理
                    return WXApi.handleOpenURL(url, delegate: WXApiManager.sharedManager())
                }
             }
          return true
     }
    //iOS 9之前
     func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
          if let host = url.host {
                if host == "safepay" {
                    AlipaySDK.defaultService().processAuth_V2Result(url, standbyCallback: { (resultDic) in
                        DLog("支付宝返回的授权结果信息\(resultDic)")
                    })
                    AlipaySDK.defaultService().processOrderWithPaymentResult(url, standbyCallback: { (resultDic) in
                        DLog("支付宝返回的支付结果信息\(resultDic)")
                    })
                }else if host == "platformapi" {
                    AlipaySDK.defaultService().processAuthResult(url, standbyCallback: { (resultDic) in
                        DLog("支付宝platform返回的授权结果信息\(resultDic)")
                    })
                }else if host == "pay"{
                    return WXApi.handleOpenURL(url, delegate: WXApiManager.sharedManager())
                }
            } else {
                return false
            }
            return true
     }
    //iOS 9之后
    func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
            if let host = url.host {
                if host == "safepay" {
                    AlipaySDK.defaultService().processAuth_V2Result(url, standbyCallback: { (resultDic) in
                        DLog("支付宝返回的授权结果信息\(resultDic)")
                    })
                    AlipaySDK.defaultService().processOrderWithPaymentResult(url, standbyCallback: { (resultDic) in
                        DLog("支付宝返回的支付结果信息\(resultDic)")
                    })
                }else if host == "platformapi" {
                    AlipaySDK.defaultService().processAuthResult(url, standbyCallback: { (resultDic) in
                        DLog("支付宝platform返回的授权结果信息\(resultDic)")
                    })
                }else if host == "pay"{
                    return WXApi.handleOpenURL(url, delegate: WXApiManager.sharedManager())
                }
            }
            return true
        }
    
    

    最近测试接口遇到的问题

    • 支付宝支付成功后无法自动跳转回应用内
      查看文件ReactNativePay.m,修改24行的appScheme字符串为自己应用名,并在info.plist中添加此scheme,支付宝会根据这个scheme确定回跳应用。

    • 无法在rn中获取支付宝支付回调问题
      运行后发现appdelegate中的回调可以打印出支付结果信息,但是支付宝的支付payOrder:fromScheme:callback的回调无法获取,回调无法获取接下来的一系列跳转判断就无用了。去年写的项目中也用到了支付宝并且跳转良好,于是就把sdk拿来试下,ok了,所以应该是支付宝的回调机制发生了变化。查看官方文档也看不出个所以然,然后搜到了这篇文章:ios集成支付宝,支付成功后“收不到回调”解决,才知道更新文档中“ v15.1.0 :2.支付结果返回统一,便于用户接入”这句话的含义。v15.1.0回调机制发生变化,H5支付走payOrder:fromScheme:callback 的回调,客户端支付走appdelegate中的回调方法。
      所以要想在rn中获得回调,需要更换sdk为v15.1.0之前的版本了

    相关文章

      网友评论

        本文标题:react-native-paysdk link到已有Cocoa

        本文链接:https://www.haomeiwen.com/subject/rpiyxxtx.html