h5支付不能打开支付宝 ios_iOS 解决微信h5支付,支付宝h5支付无法直接返回APP的问题...

本文介绍了在iOS应用中遇到微信和支付宝H5支付完成后跳转到Safari而不是返回APP的问题。通过设置webView的Delegate,修改请求的Referer和scheme,实现了支付成功或取消后直接返回APP。同时,文中分享了解决多个APP使用同一授权域名时的返回问题,以及如何处理支付宝H5支付的返回页面。提供了具体的代码示例和解决方案。
摘要由CSDN通过智能技术生成

由于公司的业务需要,为了节省申请开通微信支付的时间和人力,公司决定使用微信h5支付。这样即节省了时间,同时以后所有的APP都能使用h5支付,既方便又快捷。

但是真正做的时候问题来了,当你支付成功之后或者是取消支付的时候会跳转到Safari浏览器,这就很尴尬了,完全无用户体验啊。当时看着Android可以直接返回到APP,心里瞬间不爽了。开始埋怨苹果公司了,但是由于公司的业务必须要做h5,没办法开始找办法解决。

首先你在Xcode中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“LSApplicationQueriesSchemes“添加weixin

进入微信查了一下,发现需要设置Referer这个请求头的参数,当然微信也给出了例子微信h5支付其他常见错误。针对于这个问题在网上搜索了一下发现有专门针对于微信h5支付设置Referer的文章iOSwebView设置Referer,在这里我给大家贴一下代码吧!

#pragma mark - MajordomoWKWebViewDelegate

-(void)webView:(WKWebView*)webView decidePolicyForNavigationAction:(WKNavigationAction*)navigationAction decisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler

{

NSString *url = navigationAction.request.URL.absoluteString;

if ([url containsString:@"https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?"] || [url rangeOfString:@"https://wx.tenpay.com"].location != NSNotFound) {

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

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

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

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

[h5ViewloadingURL:url withIsWebChatURL:NO];

[self.viewaddSubview:h5View];

decisionHandler(WKNavigationActionPolicyCancel);

return;

}

#warning todo -处理支付宝h5支付返回问题

NSString *urlStr = [navigationAction.request.URL.absoluteString stringByRemovingPercentEncoding];

DLOG(@"urlStr == %@",urlStr);

NSLog(@"当前加载的webView  decidePolicyForNavigationAction:\n%@",webView.URL.absoluteString);

if([urlStrhasPrefix:@"alipayqr://"] || [urlStrisStartWithString:@"alipay"] || [urlStrhasPrefix:@"alipay://"]) {

NSMutableString* tmpUrlStr = urlStr.mutableCopy;

if([urlStrcontainsString:@"fromAppUrlScheme"]) {

NSDictionary* tmpDic = [selfdictionaryWithUrlString:tmpUrlStr];

DLOG(@"tmpDic == %@",tmpDic);

NSString* tmpValue = [tmpDicvalueForKey:@"fromAppUrlScheme"];

tmpUrlStr = [[tmpUrlStrstringByReplacingOccurrencesOfString:tmpValue withString:@"panda"] mutableCopy];

DLOG(@"tmpUrlStr == %@",tmpUrlStr);

tmpUrlStr = [[tmpUrlStrstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] mutableCopy];

}

NSURL * newURl = [NSURL URLWithString:tmpUrlStr];//navigationAction.request.URL;//[NSURL URLWithString:urlStr];//

[[UIApplication sharedApplication]openURL:newURl];

}

//如果是跳转一个新页面

if(navigationAction.targetFrame==nil) {

[webViewloadRequest:navigationAction.request];

}

decisionHandler(WKNavigationActionPolicyAllow);

self.loadUrl= webView.URL.absoluteString;

}

-(NSDictionary*)dictionaryWithUrlString:(NSString*)urlStr

{

if(urlStr && urlStr.length&& [urlStrrangeOfString:@"?"].length==1) {

NSArray *array = [urlStr componentsSeparatedByString:@"?"];

if(array && array.count==2) {

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值