iOS微信H5支付 支付完成返回原APP
iOS实现微信H5支付完成后返回原APP而不打开Safari或没反应...
由于公司多个APP都要用微信支付, 需要申请好多APPID, 所以避免这些申请的过程和时间的浪费, 把微信H5支付集成到多款APP上.
下面说一下开发过成:
首先去微信商户后台去申请开通H5支付, 假设支付域名填写的 www.maimaicn.com,注意是顶级域名,不是二级或三级的子域名
服务器端通过统一下单接口从微信拿到支付跳转链接(https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20180115115052bedf091fba0369993002&package=2975002856),称为mweb_url,有效期为5分钟。 由于这里是APP调起支付,不是网页H5发起支付,所以这里mweb_url值不需要再拼接上redirect_url参数。 然后移动端进行请求mweb_url,就会调起微信APP支付
可能会出现以下问题:
"出现商家参数格式有误,请联系商家解决"
说明在请求mweb_url时referer为空导致,设置上就可以,这里我们设置最先在商户后台注册的www.maimaicn.com的一个多级子域名,比如:mai.maimaicn.com, 如果不是设置商户后台注册的顶级域名的多级子域名,比如:mai.aaa.com.会出现 "商家存在未配置的参数,请联系商家解决"
那就把aaa.com注册到商户后台就可以解决了。
到目前为止,你就可能正常支付了,但支付成功后,并不能正常跳回原APP,严重影响了用户体验 解决方案:把referer设置成 : mai.maimaicn.com:// ,scheme设置成: mai.maimaicn.com 就可以直接返回APP了 如是你只有一款APP使用此支付方式,那就可以到此为止了
我把设置 referer的代码贴一下:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {/// 配置微信H5支付 WEB的RefererNSDictionary *headers = [request allHTTPHeaderFields];BOOL hasReferer = [headers objectForKey:@"Referer"] != nil;if (hasReferer) {// .. is this my referer?return YES;} else {// relaunch with a modified requestdispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{dispatch_async(dispatch_get_main_queue(), ^{NSURL *url = [request URL];NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];[request setHTTPMethod:@"GET"];[request setValue:@"mai.maimaicn.com://” forHTTPHeaderField: @"Referer"];[_webView loadRequest:request];});});return NO;}
}
如果你有两款以上APP(比如A,B,C),并都把referer设置成: mai .maimaicn.com ://,scheme设置成: mai .maimaicn.com 用户只安装了其中一款APP(A),此时支付能够成功,并能转回原APP,一点问题没有。如果同时安装了(A,B),就会发现支付能够成功,但成功后页面静止,不能跳回原APP了,也严重影响了用户体验
解决办法:
把referer与scheme设置成注册的顶级域名的多级子域名
A: referer: mai.maimaicn.com:// scheme: mai.maimaicn.com
B: referer: tian.maimaicn.com:// scheme: tian.maimaicn.com
C: referer: jin.maimaicn.com:// scheme: jin.maimaicn.com
通过测试,完美运行。理论上这个解决方案可以支持无数个APP,也同时解决了微信开放平台APP支付的限制个数
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
