zoukankan      html  css  js  c++  java
  • iOS实现微信外部H5支付完成后返回原APP(多APP也可实现)

    看到微信最近放开了微信H5支付,公司决定把H5集成到多款APP上。下面记录下了开发过程。

    由于是微信新推出的支付方式,在网上搜索到的相关资料并不多,其中有一篇文章(点此跳转)对我的整个开发过程起到了很大帮助,在此表示感谢。

    首先去微信商户后台去申请开通H5支付。

    微信审核通过需要3至5个工作日。

    我们假设支付域名填写的  aaa.cn,注意是顶级域名,不是二级或三级的子域名。

    服务器端通过统一下单接口从微信拿到支付跳转链接(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为空导致,设置上就可以,这里我们设置最先在商户后台注册的aaa.cn的一个多级子域名,比如:b.aaa.cn。
    如果不是设置商户后台注册的顶级域名的多级子域名,比如:b.ccc.cn。
    就会出现“商家存在未配置的参数,请联系商家解决”异常。
    那就把ccc.cn注册到商户后台就可以解决了。
    到目前为止,你就可能正常支付了,但支付成功后,并不能正常跳回原APP,严重影响了用户体验。
    解决方案:把referer设置成:b.aaa.cn://,scheme设置成:b.aaa.cn就可以直接返回APP了。
    如是你只有一款APP使用此支付方式,那就可以到此为止了。

    如果你有两款以上APP(比如X1,X2,X3),并都把referer设置成:b.aaa.cn://,scheme设置成:b.aaa.cn。
    用户只安装了其中一款APP(X1),此时支付能够成功,并能转回原APP,一点问题没有。如果同时安装了(X1,X2),就会发现支付能够成功,但成功后页面静止,不能跳回原APP了,也严重影响了用户体验。
    想到的第一个解决方案就是更改referer与scheme。
    APP X1 X2 X3
    referer b.aaa.cn/x1:// b.aaa.cn/x2:// b.aaa.cn/x3://
    scheme b.aaa.cn/x1 b.aaa.cn/x2 b.aaa.cn/x3
    通过测试发现不起作用。在网上搜索了很久也没有找到解决方案,感觉只能妥协了,牺牲点用户体验,让用户点击左上角返回原APP。
     
    突然灵光一闪,微信商户后台即然让我们注册顶级域名,那是不是只要把referer与scheme设置成注册的顶级域名的多级子域名就可以了呢,如下:
    APP X1 X2 X3
    referer b1.aaa.cn:// b2.aaa.cn:// b3.aaa.cn://
    scheme b1.aaa.cn b2.aaa.cn b3.aaa.cn
    通过测试,完美运行。理论上这个解决方案可以支持无数个APP,也同时解决了微信开放平台APP支付的限制个数。
  • 相关阅读:
    关于IP4上WIFI设置静态IP的一点经验
    迷你MVVM框架 avalonjs 1.1发布
    r.js合并实践
    IE6的checkbox, radio是通过defaultChecked决定是否选中
    2013年最后的收成:avalon1.0正式发布
    还要多少年, 前端开发才能像后端那样轻松
    JavaScript Promise:去而复返
    JavaScript 18岁生日快乐
    web界面上的字体兼容方案
    键盘钩子原理----开发按键发音程序
  • 原文地址:https://www.cnblogs.com/Life-Record/p/8472319.html
Copyright © 2011-2022 走看看