ReactNative:react-native-paysdk link到已有Cocoapods工程及错误处理

通过终端link执行react-native link react-native-paysdk

  • 报错:libz.tbd is not an object file (not allowed in a library)
    只需将所需库link到build phases中,然后删除整个frameworks文件夹。
  • 报错: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之前的版本就可以了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,324评论 25 708
  • 支付宝没有支持RN,所以只能通过在原生封装支付宝让RN调用。来一波效果图: 在没有安装支付宝APP的情况下,跳转网...
    云上月阅读 7,605评论 2 17
  • 我早就知道自己的疼痛阈值特别低,朋友间说笑高兴起来不自禁的拍拍会让我疼上半天那种;但是我也一向自诩坚强,正如某个男...
    眉头轻蹙皱了谁的心阅读 318评论 1 1
  • 大家在开发中,有些viewcontroller需要隐藏navigationbar,经常在这跳转的时候会出现黑条,白...
    moonCoder阅读 1,761评论 9 20
  • 序:如果说死亡是一个艰难的话题,是因为这世界上没有人了解死亡,那么婚姻这个话题之艰难,则是因为婚姻被说烂了。关于婚...
    luobo25阅读 495评论 0 0