IOS 关于web支付无法返回APP解决方案

使用WKWebview支付,使用的支付宝和微信支付,由服务器下单,app端拿到服务端下单数据加载,微信支付下单成功返回的是一个链接,支付宝支付下单成功返回的是一个html样式,加载方式也是不同的

//拿到服务端下单数据之后
 dispatch_async(dispatch_get_main_queue(), ^{
        if (weakSelf.paytype == WeChatPay) {
        //微信支付
            NSString*dataStr = [self.dataDic objectForKey:@"web_url"];
            if(dataStr.length==0){
                return ;
            }
            [self loadRequestWith:dataStr];
        }else if(weakSelf.paytype == AliPay){
        //支付宝支付
             NSString*dataStr = [self.dataDic objectForKey:@"AlipayTradeWapPayRequest"];
            if (dataStr.length==0) {
                return ;
            }
             [weakSelf.webView loadHTMLString:dataStr baseURL:nil];
        }

    });

微信支付请求处理

-(void)loadRequestWith:(NSString*)urlStr{
    NSLog(@"%@",urlStr);

    // urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    urlStr = [self URLEncodedStringWith:urlStr];
    self.requestUrlStrs = urlStr;//@"https://www.baidu.com";//

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:self.requestUrlStrs]];
    request.HTTPMethod = @"GET";
    //设置Preferer 微信支付能跳转回来
   /*schemUrlStr Info里面注册的Scheme 
   *company.com是公司注册支付时候的域名,A.company.com
   *A 可以任意非特殊字符的字符串*/
    NSString*schemUrlStr = @"A.company.com://";
     [request setValue:schemUrlStr forHTTPHeaderField:@"Referer"];
    dispatch_async(dispatch_get_main_queue(), ^{
    [self.webView loadRequest:request];
    });

}

设置SchemUrl
这里写图片描述

获取跳转的Url 实现跳转到微信或者支付宝

-(void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
    NSString *url = [navigationAction.request.URL.absoluteString stringByRemovingPercentEncoding];
    NSString* reUrl=[[webView URL] absoluteString];
    reUrl = url;
//    NSURLRequest *request = navigationAction.request;
//    NSString *wxPre = @"https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb";
    if ([url containsString:@"alipay://"]) {
        //支付宝支付
        if ([url containsString:@"\"fromAppUrlScheme\":\"alipays\""]) {
        //抓取fromAppUrlScheme 将alipays 替换成自己设置的
             NSString*schemUrlStr = @"A.company.com://";
            NSString*replaceStr = [NSString stringWithFormat:@"\"fromAppUrlScheme\":\"%@\"",schemUrlStr];
             url = [url stringByReplacingOccurrencesOfString:@"\"fromAppUrlScheme\":\"alipays\"" withString:replaceStr];
        }
        NSInteger subIndex = 23;
        NSString* dataStr=[url substringFromIndex:subIndex];
        //编码
        NSString *encodeString = [self URLEncodedStringWith:dataStr];
        NSMutableString* mString=[[NSMutableString alloc] init];
        [mString appendString:[url substringToIndex:subIndex]];
        [mString appendString:encodeString];

        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:mString]];

    }else if([url  hasPrefix:@"weixin://"]){

        if ([[UIApplication sharedApplication]canOpenURL:navigationAction.request.URL]) {
            //微信支付
            if (@available(iOS 10.0, *)) {
                [[UIApplication sharedApplication]openURL:navigationAction.request.URL options:@{UIApplicationOpenURLOptionUniversalLinksOnly:@NO} completionHandler:^(BOOL success) {
                }];
            } else {
                // Fallback on earlier versions
            }
        }else{
            [[UIApplication sharedApplication]openURL:navigationAction.request.URL];

        }
    }
     decisionHandler(WKNavigationActionPolicyAllow);
    return;
}
//Url 处理
- (NSString *)URLEncodedStringWith:(NSString*)urlStr
{
    NSString *encodedString = (NSString *)
    CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                              (CFStringRef)urlStr,
                                                              (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]",
                                                              NULL,
                                                              kCFStringEncodingUTF8));
    return encodedString;
}

微信和支付宝都可以跳转了

iOS支付宝H5支付无法返回APP解决方案

iOS微信H5支付无法返回APP解决方案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值