iOS 端H5支付流程以及坑(微信)

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];
            }
        }
    }
复制代码

转载于:https://juejin.im/post/5c25d4ccf265da616e4c8151

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值