iOS开发攻城狮的集散地< iOS >iOS自我学习库

ios 之WKWebView与h5交互 微信支付与支付宝支付

2018-05-10  本文已影响39人  路小白同学

根据需求,公司的项目的微信支付和支付宝支付由原生的sdk转为h5支付,做这个过程中遇到了一些问题,做一个简单的记录。
本文主要讲以下几点:
1.在app内调用h5的方法,用于传值已经做一些操作
2.支付过程中使用手机自带的支付宝APP以及微信APP进行支付,不使用网页

1.在app内调用h5的方法

一般是在网页加载完毕后才调用h5的方法,如果在h5页面未加载完毕调用,那样的话会调不了。WKWebView调用h5的方法如下:
h5的方法为:

function payResult(str){
if(str == ‘ture’){
alert(‘登录’);
} 
}
// 页面加载完成之后调用
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
    [SVProgressHUDdismiss];
    NSString * jsStr [NSStringstringWithFormat:@"payResult('%@')",@"true"];
    [self.webViewevaluateJavaScript:jsStrcompletionHandler:^(id_Nullable result, NSError * _Nullable error) {
        NSLog(@"==%@----%@",result, error);
    }];
}

亲测有效。
2.由于不能集成微信和支付宝的sdk,但是像支付宝的网页支付步骤又太麻烦,所以希望能调用手机原生的支付宝APP和微信APP,(微信app只能调用客户端,没有网页支付)。实现的方式是拦截请求,拦截到支付请求时直接打开相应的APP。
代码如下:

#pragma mark - WKNavigationDelegate
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
{
    NSLog(@"%@",navigationAction.request.URL.absoluteString);
    NSString* reqUrl = navigationAction.request.URL.absoluteString;
    if ([reqUrl hasPrefix:@"alipays://"] || [reqUrl hasPrefix:@"alipay://"]) {
         [[UIApplication sharedApplication]openURL:navigationAction.request.URL];
        //bSucc是否成功调起支付宝
    }
    if ([reqUrl hasPrefix:@"weixin://"]) {
        [[UIApplication sharedApplication]openURL:navigationAction.request.URL];
        //bSucc是否成功调起微信
    }
    
    decisionHandler(WKNavigationActionPolicyAllow);
}

亲测可用,但这样做有一个问题,就是支付后不能直接跳回原来的app,但如果不集成SDK又想调用手机内原生app的话,只能这样了,如果谁有更好的方法。欢迎在下方留言~~

上一篇下一篇

猜你喜欢

热点阅读