美文网首页iOS开发攻城狮的集散地< iOS >iOS自我学习库
ios 之WKWebView与h5交互 微信支付与支付宝支付

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

作者: 路小白同学 | 来源:发表于2018-05-10 19:32 被阅读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的话,只能这样了,如果谁有更好的方法。欢迎在下方留言~~

    相关文章

      网友评论

      • 青空逸隐:这个写的有问题, 支付宝返回的navigationAction.request.URL.absoluteString, 你去抓一下, 根本不是个链接, 这里和微信不一样 .

        //alipay://alipayclient/?{"requestType":"SafePay","fromAppUrlScheme":"alipays","dataString":"h5_route_token=\"RZ18AseOoQH8kPS7owotGtYJHhs4QRmobilecashierRZ18\"&is_h5_route=\"true\""}
        //weixin://wap/pay?appid=wx360638309cc59c4e&noncestr=52bdba949576e6bcec5682a4993bfb58&package=WAP&prepayid=wx29115850053307950b41bfda1719642549&sign=8D12E363AAFDD0B6C84E6DE931AA0C02&signtype=MD5&timestamp=1543463930
        路小白同学:@書冩傳奇 这样,就像你前面截取的支付宝的url,它的url scheme 是alipay://,这样是能打开的,如果打不开,你可以检查下是否注册了支付宝的白名单。
        青空逸隐:@路小白同学 对的, 说的是同一件事的. 就是APP嵌web页面, 然后在web页里面去进行支付. 但是拦截请求后, 使用[UIApplication sharedApplication]openURL: 去调用打开手机端的微信或者支付宝客户端时, 会发现微信可以打开, 支付宝打不开
        路小白同学:我们因为特殊原因,不能用微信和支付宝的sdk,所以集成了网页版本的微信和支付宝,但用网页版的会跳的h5界面进行支付,需要输入密码,很繁琐。所以通过这种方式拦截请求来调用手机端的微信或支付宝的APP~,所以,这个拦截的是网页版本的支付宝或微信,您说的是哪个?

      本文标题:ios 之WKWebView与h5交互 微信支付与支付宝支付

      本文链接:https://www.haomeiwen.com/subject/yzstdftx.html