1、拦截支付URL
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
MLog(@"decisionHandler ---- %@", navigationAction.request.URL.absoluteString)
NSString*urlString = navigationAction.request.URL.absoluteString;
urlString = [urlString stringByRemovingPercentEncoding];
NSURLRequest *request = navigationAction.request;
NSString *scheme = [request.URL scheme];
if (![scheme isEqualToString:@"https"] && ![scheme isEqualToString:@"http"]) {
decisionHandler(WKNavigationActionPolicyCancel);
NSURL *requestURL = request.URL;
if ([@"weixin" isEqualToString:scheme]) {
if (endPayRedirectURL) {
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:endPayRedirectURL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10]];
endPayRedirectURL = nil;
}
} else if ([@"alipay" isEqualToString:scheme]) {
/*
替换里面的默认Scheme为自己的Scheme LGKJAliPay
在Info.plist 增加对应的URLTypes LGKJAliPay
*/
NSArray *urlBaseArr = [navigationAction.request.URL.absoluteString componentsSeparatedByString:@"?"];
NSString *urlBaseStr = urlBaseArr.firstObject;
NSString *urlNeedDecode = urlBaseArr.lastObject;
NSMutableString *afterDecodeStr = [NSMutableString stringWithString:[urlNeedDecode stringDecoderUrlEncode]];
NSString *afterHandleStr = [afterDecodeStr stringByReplacingOccurrencesOfString:@"alipays" withString:@"LGKJAliPay"];
NSString *finalStr = [NSString stringWithFormat:@"%@?%@",urlBaseStr, [afterHandleStr stringUrlEncode]];
requestURL = [NSURL URLWithString:finalStr];
}
BOOL canOpen = [[UIApplication sharedApplication] canOpenURL:requestURL];
MLog(@"canOpen Url %@ = %@", @(canOpen), requestURL.description)
if (canOpen) {
[[UIApplication sharedApplication] openURL:requestURL
options:@{UIApplicationOpenURLOptionUniversalLinksOnly: @NO}
completionHandler:^(BOOL success) {
}];
}
return;
}
decisionHandler(WKNavigationActionPolicyAllow);
}
2、配置Info.plist
a、跳转到微信,支付宝
<key>LSApplicationQueriesSchemes</key>
<array>
<string>wechat</string>
<string>weixin</string>
<string>mqqopensdkapiV4</string>
<string>alipay</string>
</array>
b、微信,支付宝跳转回来 设置URLTypes
微信: 拿到支付时的URL的一级域名(看支付时候的URL)
eg:(https://baidu.com/pay/... -> com.baidu.com)
支付宝
替换支付URL里面的默认Scheme为自己的Scheme xxxxAliPay
if ([@"alipay" isEqualToString:scheme]) {
NSArray *urlBaseArr = [navigationAction.request.URL.absoluteString componentsSeparatedByString:@"?"];
NSString *urlBaseStr = urlBaseArr.firstObject;
NSString *urlNeedDecode = urlBaseArr.lastObject;
NSMutableString *afterDecodeStr = [NSMutableString stringWithString:[urlNeedDecode stringDecoderUrlEncode]];
NSString *afterHandleStr = [afterDecodeStr stringByReplacingOccurrencesOfString:@"alipays" withString:@"xxxxAliPay"];
NSString *finalStr = [NSString stringWithFormat:@"%@?%@",urlBaseStr, [afterHandleStr stringUrlEncode]];
requestURL = [NSURL URLWithString:finalStr];
}
再把xxxxAliPay配置到URL Types中去。
网友评论