支付宝和微信H5支付

因业务需要,移除项目中支付宝支付SDK和微信支付的SDK,改为网页支付。通过H5网页调起微信和支付宝的客户端进行支付,支付完成返回客户端,做到调用SDK一样的体验。

支付宝和微信建议以App的方式集成, 都不建议在app内部使用网页来支付,但也没有不允许,目前可行,不过也说不好以后会不会禁止这种方式。

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

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

if ([url hasPrefix:@"alipays://"] || [url hasPrefix:@"alipay://"]) {

BOOL success = [[UIApplication sharedApplication]openURL:navigationAction.request.URL];
if (success) {

}

}

if ([url hasPrefix:@"weixin://wap/pay"]) {

BOOL success = [[UIApplication sharedApplication]openURL:navigationAction.request.URL];

if (success) {

}

}

decisionHandler(WKNavigationActionPolicyAllow);
}

微信支付回调问题

TARGETS → Info → URL Types 增加一项 URL Schemes 填写回调的url www.xxx.com

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:self.urlstring]];
NSDictionary *headers = [request allHTTPHeaderFields];
BOOL hasReferer = [headers objectForKey:@"Referer"] != nil;
if (!hasReferer) {
[request setValue:@"www.xxx.com://" forHTTPHeaderField: @"Referer"];
}
[self.webView loadRequest:request];


注意:

  1. 在iOS系统中,唤起支付宝App支付完成后,不会自动回到浏览器或商户App。用户可手工切回到浏览器或商户App。
  2. 审核过程中,除了隐藏入口,代码和注释里面一些包含 支付宝支付 alipay 微信支付 weixinpay weichatpay 类似这样的字段要屏蔽掉,否则在审核期间扫描代码的时候因为隐藏功能而拒审核,最好还是老老实实接苹果支付。

参考链接:

https://docs.open.alipay.com/203/107091/

https://docs.open.alipay.com/203

https://nearwmy.github.io/2017/12/04/%E5%BE%AE%E4%BF%A1H5%E6%94%AF%E4%BB%98%E4%B9%8B%E5%9B%9E%E8%B7%B3%20safari%20%E6%B5%8F%E8%A7%88%E5%99%A8/

https://github.com/mjl123iOS/iOS_WXh5

https://github.com/cheenbee/cheenbee.github.io/issues/1