H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付。
主要过程:
(1)添加URL Schemes,如下图所示:
特别强调,其中URL Schemes必须是商户申请h5支付的授权域名、最多只可添加5个。 如图域名: (2)若提示:商家参数格式不对,则请求头缺少referer字段,需要手动添加。 NSMutableURLRequest * request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"http://oms.medicalunion.cn" forHTTPHeaderField: @"Referer"];
[self.webview loadRequest:request];
[self.view addSubview:self.webview];
复制代码
(3)若提示网络环境未通过验证、则说明ip不合法
(4)拦截url,通过openURL打开微信app、如下代码: NSString *jsonString = [[request URL] absoluteString];
if ([jsonString rangeOfString:@"weixin://"].location != NSNotFound) {
[[UIApplication sharedApplication]openURL:[request URL]];
}
复制代码
(5)解决支付完成后微信端不能返回app的问题。
应该在获取的支付链接上,拼接redirect_url字段,这个为商户申请h5支付的授权域名。若没拼接,默认为referer字段。一定要记得在域名后面添加://
NSString *str = @"phpt.zwjk.com://";
NSString *payString = [NSString stringWithFormat:@"%@&redirect_url=%@",[_payInfoDic objectForKey:@"payUrl"],str];
NSURL * url = [[NSURL alloc] initWithString:payString];
结果大致类似:
https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096&redirect_url=https%3A%2F%2Fwww.wechatpay.com.cn
复制代码
然后拦截url(redirect_url)做相应处理就好:
NSString *jsonString = [[request URL] absoluteString];
if ([jsonString isEqualToString:@"phpt.zwjk.com://"]) {
for (UIViewController *controller in self.navigationController.viewControllers) {
if ([controller isKindOfClass:[HistoryDetailViewController class]]) {
HistoryDetailViewController *A =(HistoryDetailViewController *)controller;
[self.navigationController popToViewController:A animated:YES];
}
}
}
复制代码