ios 之WKWebView與h5交互 微信支付與支付寶支付

根據需求,公司的項目的微信支付和支付寶支付由原生的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的話,只能這樣了,如果誰有更好的方法。歡迎在下方留言~~

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容