iOS H5 调用微信、支付宝支付无法返回app 解决方法

    最新项目中遇到H5页面中调用微信客户端支付的需求,虽然这并不是推荐的做法,但是需求确实存在。。。加载h5页面点击支付调起需要支付的客户端(微信或者支付宝),

原理上应该很简单,并且文档中都提供了相应的接口,当然想象总是很容易,实现起来还是出现很多的问题;比如无法调起微信/支付宝客户端

下面是解决的代码部分:

#pragma mark -- webviewDelegate

-(BOOL)webView:(UIWebView*)webViewshouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

    NSURL *url = [request URL];

    NSString *newUrl = url.absoluteString;

    

    NSLog(@"截取到的url---%@",newUrl);

    #warning 微信支付链接不要拼接redirect_url,如果拼接了还是会返回到浏览器的

//传入的是微信支付链接:https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx201801291021026cb304f9050743178155&package=3456576571

    if ([newUrl rangeOfString:@"https://wx.tenpay.com"].location != NSNotFound) {

        //这里把webView设置成一个像素点,主要是不影响操作和界面,主要的作用是设置referer和调起微信

        WebChatPayH5VIew *h5View = [[WebChatPayH5VIew alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];

        //newUrl是没有拼接redirect_url微信h5支付链接

        [h5View loadingURL:newUrl withIsWebChatURL:NO];

        [self.view addSubview:h5View];

        return NO;

        

    }

    else

    {

        NSLog(@"截取到的url2---%@",newUrl);

 // 调起支付宝的处理方法  --  这个方法在https://docs.open.alipay.com/203/106493/ 中可见 

        __weak ScannCodeViewController* wself = self;

 BOOL isIntercepted=[[AlipaySDK defaultService]payInterceptorWithUrl:[request.URL           absoluteString]fromScheme:@"com.gantang"callback:^(NSDictionary*result) {

            

            // 处理支付结果

            NSLog(@"返回的的的的的d%@", result);

            // isProcessUrlPay 代表 支付宝已经处理该URL

            if([result[@"isProcessUrlPay"]boolValue]) {

                

                //returnUrl 代表 第三方App需要跳转的成功页URL

                NSString* urlStr = result[@"returnUrl"];

                NSLog(@"回调回来的url%@",urlStr);

                [wself loadWithUrlStr:urlStr];

            }

        }];

        

        if(isIntercepted) {

            

            return NO;

        }

    

    }

    return YES;

    

}


下面是对微信无法返回app的详细描述:

1.首先要设置好你自己项目中的scheme, LSApplicationQueriesSchemes 中添加weixin;

2.你点击支付的时候,会获取到https://wx.tenpay.com/cgi-bin/mmpayweb。。。。类似这种的连接,这就是你的支付链接,如果没有加载成功有可能是连接中没有设置Referer,导致页面出错,关于添加Referer的问题,大家可自行google,会有相应的添加方法,webView加载完成后就可以调起微信/支付宝进行支付了。

3.支付完成后无论成功失败,都会调转到Safari浏览器中。。。。,不要怕,重点来了

H5支付最终返回APP的解决方案是:把Referer设置成:www.xxx.com://           scheme设置成:www.xxx.com就可以直接返回APP了。

注意  /www.xxx.com 这个必须是H5授权的域名,这个一定要注意一下 ,另外这种方法在使用的时候,回调的URL中一定不要拼接redirect_url, 不然还是会跳转到浏览器中,这个如果前端有拼接,可以让前端来对iOS区别使用,不拼接redirect_url,仅供参考。

4.至于支付宝的返回,在上面的代码中就能处理掉无法返回的问题;


以上就是解决方法,说的不详细还请见谅,当时也是查阅了很多博客才找到方法,非常感谢;

推荐稍微详细的博客:H5调起微信无法返回的问题







评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值