最近項(xiàng)目碰到一個(gè)不接入微信、支付寶SDK做支付的功能,簡單的說的就是用H5調(diào)起微信、支付支付。支付完成后返回app。
注:沒有安裝支付寶app,可以使用網(wǎng)頁版支付。
找了好多資料,其實(shí)原理都一樣,就是攔截wkwebview、webview的請(qǐng)求,對(duì)請(qǐng)求做一些調(diào)整。實(shí)現(xiàn)起來也不難,這里做個(gè)記錄。
- (void)webView:(WKWebView*)webViewdecidePolicyForNavigationAction:(WKNavigationAction*)navigationActiondecisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler {
? ? NSString*str = webView.URL.absoluteString;
// 攔截支付請(qǐng)求
? ? if ([str containsString:@"https://wx.tenpay.com"] || [str containsString:@"https://mclient.alipay"]) {
? ? ? ? NSDictionary*dic = navigationAction.request.allHTTPHeaderFields;
? ? ? ? NSString*refer = dic[@"Referer"];
? ? ? ? if(refer ==nil) {
? ? ? ? ? ? dispatch_async(dispatch_get_main_queue(), ^{
? ? ? ? ? ? ? ? NSURL*url = navigationAction.request.URL;
? ? ? ? ? ? ? ? NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
? ? ? ? ? ? ? ? request.HTTPMethod=@"GET";
? ? ? ? ? ? ? ? [requestaddValue:@"你的app標(biāo)識(shí)"forHTTPHeaderField:@"Referer"];
// 設(shè)置app標(biāo)識(shí)是為了支付完成可以返回app,也就ios 應(yīng)用間的跳轉(zhuǎn),具體可以了解下URL Scheme。iOS 9以后,可以使用通用鏈接實(shí)現(xiàn)app間的調(diào)整(通訊)。
? ? ? ? ? ? ? ? [webViewloadRequest:request];
? ? ? ? ? ? });
? ? ? ? ? ? decisionHandler(WKNavigationActionPolicyCancel);
? ? ? ? ? ? return;
? ? ? ? }
? ? }
? ? NSURL*url = navigationAction.request.URL;
// 調(diào)起微信支付
? ? if ([url.scheme isEqualToString:@"weixin"]) {
? ? ? ? if([url.host isEqualToString:@"wap"]) {
? ? ? ? ? ? if ([url.relativePath? isEqualToString:@"/pay"]) {
? ? ? ? ? ? ? ? if(@available(iOS10.0, *)) {
? ? ? ? ? ? ? ? ? ? [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) {
? ? ? ? ? ? ? ? ? ? }];
? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? [[UIApplicationsharedApplication]openURL:url];
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? decisionHandler(WKNavigationActionPolicyAllow);
? ? ? ? return;
? ? }
// 調(diào)起支付支付
? ? if ([str containsString:@"https://mclient.alipay"]) {
? ? ? ? if(@available(iOS10.0, *)) {
? ? ? ? ? ? [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) {
? ? ? ? ? ? }];
? ? ? ? }else{
? ? ? ? ? ? [[UIApplication sharedApplication] openURL:url];
? ? ? ? }
? ? ? ? decisionHandler(WKNavigationActionPolicyCancel);
? ? ? ? return;
? ? }
? ? decisionHandler(WKNavigationActionPolicyAllow);
}