看到微信最近放开了微信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支付的限制个数。

iOS实现微信外部H5支付完成后返回原APP的更多相关文章

  1. 微信商户H5支付申请不通过被驳回,拒绝原因提示:网站存在不实内容或不安全信息

    一.H5支付简介及使用场景说明 H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付.主要用于触屏版的手机浏览器请求微信支付 ...

  2. 微信商户H5支付申请不通过被驳回解法,拒绝提示:网站有不实内容或不安全信息

    H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付.主要用于触屏版的手机浏览器请求微信支付的场景.可以方便从外部浏览器唤起 ...

  3. asp.net mvc实现微信外H5支付方法

    一.微信支付方式介绍 微信提供了各种支付方式,试用于各种不同的支付场景,主要有如下几种: 1.刷卡支付 刷卡支付是用户展示微信钱包内的“刷卡条码/二维码”给商户系统扫描后直接完成支付的模式.主要应用线 ...

  4. 微信商户/H5支付申请 被拒原因:网站存在不实内容或不安全信息

    看到这张图片,申请H5支付的朋友估计是崩溃的,被拒的原因是网站存在不实内容或不安全信息. 解决方法有两种: 针对不安全内容,则是微信支付审核团队认为你的网站存在安全漏洞的,需要修复. 针对不实内容,则 ...

  5. php如何实现登陆后返回原页面

    访问网站页面时,有的页面需要授权才能访问,这时候就会要求用户登录,跳转到登录页面login.php,怎么实现登录后返回到刚才访问的页面项目需求 访问网站页面时,有的页面需要授权才能访问,这时候就会要求 ...

  6. thinkphp实现登录后返回原界面

    主要思路还是用session记录原地址,在登录后再跳转回原界面 先保存请求login方法界面的url public function savelogin(){ session('returnUrl', ...

  7. 解决iOS微信H5支付跳转微信后不返回App问题(Swift-WKWebview)(转)

    问题分析 正常的H5支付流程如下 按照上面的支付流程会出现 App -> 微信 -> 支付 -> 点击 完成 -> safari访问redirect_url设置的URL,这种流 ...

  8. .NET Core之微信支付之公众号、H5支付篇

    前言 本篇主要记录微信支付中公众号及H5支付全过程. 准备篇 公众号或者服务号(并开通微信支付功能).商户平台中开通JSAPI支付.H5支付. 配置篇 公众号或者服务号中 -------开发----- ...

  9. ***新版微信H5支付技术总结(原创)

    新版微信H5支付官方文档: https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20&index=1 H5支付是指商户在微信客户端外 ...

随机推荐

  1. 认识Linux分区

    前言 今年目标是熟练Linux系统与内核,没有老司机带只能自己慢慢参照鸟哥教程学习了.如果有老司机麻烦指导一下便捷路线,作为这方便的新手还是很乐意接受各位的意见.今天第一步就是熟悉安装Linux中分区 ...

  2. JS中获取session中传过来的值对象

    摘录自:http://www.360doc.com/content/11/0316/13/5790498_101627263.shtml 把某一对象置于session范围内,并在JSP页面中提取ses ...

  3. 商品鼠标移过去hover效果---图片放大1.1倍

    .home-standard-layout .middle-goods-list ul li:hover{ box-shadow: 0 0 10px gray;} .home-standard-lay ...

  4. scrapy-redis功能简介

    connection:连接redis最基本文件 default:默认值设置文件 dupefiler_key 保存指纹 dupefilter:替换scrapy默认的url去重器 piklecompat: ...

  5. python_面向对象

    什么是面向对象? -- 一种主流编程范式,编程思维框架,世界主流两个方向,面向对象和面向过程. --  面向是把关注点集中一个具体东西,比如看向手机,也叫面向手机,手机就是一个对象,我们 把手机的属性 ...

  6. scrapy_xpath

    什么是xpath? 路径表达式 在xml和html中进行导航 包含标准函数库 遵循w3c标准 xpth节点关系是什么? 父节点 子节点 兄弟节点 先辈节点 后代节点 xpth语法 a         ...

  7. SQL Server ——动态SQL

    EXECUTE 执行 Transact-SQL 批中的命令字符串.字符串或执行下列模块之一:系统存储过程.用户定义存储过程.标量值用户定义函数或扩展存储过程.SQL Server 2005 扩展了 E ...

  8. 理解Object.defineProperty的作用

    对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值.定义对象可以使用构造函数或字面量的形式: var obj = new Object; //obj = {} obj.name = ...

  9. VisionPro学习笔记:用IEEE1394相机抓取图像

    1)找到采集卡: CogFrameGrabber1394DCAMs cameras = new CogFrameGrabber1394DCAMs(); 2)列举相连接的相机: ICogFrameGra ...

  10. eclipse每次闪退后都提示查看\workspace\.metadata\.log

    错误如下: 找到<workspace>/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi"文件,将其删掉,再重启 ...