先说一下这个想法的来源,然后有相关需求的朋友也可以这样来操作
公司产品用到了支付宝支付,但是避免上架审核问题(不能接入支付宝SDK,害怕检测),采用了支付宝的H5支付,作为产品的支付渠道;APP内部,采用了WKWebView作为主体来加载H5内容。
本来是没有什么问题的,但是每次看到支付宝H5支付页面的提示,就感觉有点别扭,而且支付的话,是在H5中完成支付,需要输入验证码、支付密码这些。如图:
[图一]
Simulator Screen Shot - iPhone XR - 2018-11-09 at 13.50.52.png
Simulator Screen Shot - iPhone XR - 2018-11-09 at 13.54.01.png
看到“尝试打开支付宝客户端”,就猜到,这个应该是会去唤起支付宝APP完成支付,然后本着一个程序员的心态,开始了踩坑之路。
首先,回顾一下支付宝SDK的支付流程:
通过后台接口,获取支付串(个人这样称呼哈),然后交给支付宝SDK
[[AlipaySDK defaultService] payOrder:@"支付串" fromScheme:@"本APP的Scheme" callback:^(NSDictionary * resultDic) {
// 回调流程
}];
当执行上面代码以后,就看到能掉起支付宝APP了(自己设置好白名单和相关SDK初始化工作);然后正常执行支付流程
完成支付以后,支付宝第一次会提示打开“***”APP,点击完成,即可回到自己的APP
APP在Appdelegate的OpenURL方法里处理好相关操作后,即可在第一部的回调流程中,获取到支付结果,即可完成整个支付流程
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
if ([url.host isEqualToString:@"safepay"])
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
}];
}
return YES;
}
然后,我们回头看下这个支付流程,和H5流程对比,我们想要做到的,就是1.掉起支付宝APP;2.支付完成后,支付宝APP要返回到我们的APP里面来
关键点就在这个“URLScheme”里面,废话不多说,直接说我这边的处理方法
在WKWebView进如“图一”页面的时候,看下WKWebView的代理方法
1.代理方法如下面代码
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandle