-
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之前的版本了
网友评论