ios 微信h5支付取消或完成支付時不能返回原APP

首選:
保證調起微信的地址:https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb? 中沒有回調參數 redirect_url ,否則取消支付時永遠調起redirect_url中對應的地址,返回到瀏覽器裏;

其次:
找到商戶申請H5時提交的授權域名,比如:https://www.baidu.com

這個時候去配置APP 的schemes ,注意,一定要這麼配:aaa可以隨便寫,有識別性就行,保證不跟其他APP的schemes相同就行。
在這裏插入圖片描述
再次:
代碼裏去實現給Referer賦值,在webview的shouldStartLoadWithRequest中實現,代碼如下:

-(BOOL)setReferer:(NSURLRequest *)request
{
__block NSString *urlString = [NSString stringWithFormat:@"%@",request.URL];
if ([urlString hasPrefix:@“https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb”]) {
NSDictionary *header = request.allHTTPHeaderFields;
if (header[@“Referer”] && [header[@“Referer”] isEqualToString:@“nxh.pay.1an.com?/”]) { // 如果已經設置過referer
// 允許跳轉
return YES;
} else {
// 設置referer

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

            dispatch_async(dispatch_get_main_queue(), ^{
                NSString *urlStr = [NSString stringWithFormat:@"%@", urlString];
                // 注意,此處須去掉redirectUrl參數,如果沒去掉的話就自己 [寫方法刪除url中的redirectUrl字段](https://blog.csdn.net/qijian_shashi/article/details/88995399)
                /*取掉redrect_url參數及其對應的值*/
               NSString *newStr = [[NSString alloc]removeParValue:urlStr Key:@"redirect_url"];
               NSURL *newUrl = [NSURL URLWithString:newStr];
                NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:newUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
                [request setHTTPMethod:@"GET"];
                [request setValue:@"nxh.pay.1an.com://" forHTTPHeaderField: @"Referer"];
                [self.webView loadRequest:request];
            });
        });
        return NO;
    }
}

NSURL *url = request.URL;
// 微信支付協議
if ([url.scheme isEqualToString:@"weixin"]) {
    if ([url.host isEqualToString:@"wap"]) {
        if ([url.relativePath isEqualToString:@"/pay"]) {
            if ([[UIApplication sharedApplication] canOpenURL:url]) {
                [[UIApplication sharedApplication] openURL:url];
            }
        }
    }
    return NO;
}
return YES;

}

最後:
嘗試下,會不會成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章