react-native-paysdk link到已有Cocoapods工程及本地配置

  • 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,并且这里的也不能删除。
    react-native-paysdk link到已有Cocoapods工程及本地配置_第1张图片
    library中文件结构.png
  • 手动link到Cocoapods的工程中
    react-native-paysdk link到已有Cocoapods工程及本地配置_第2张图片
    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到已有Cocoapods工程及本地配置)