快应用接入微信支付(H5 支付配置详解)


微信 APP 支付: 如果之前没有在 android 端接入过微信支付,建议先看看微信官方文档, 快应用接入微信 App 支付的过程和这个流程介绍中的一致,无非是发起的客户端由 android app 变成了快应用

快应用接入微信 App 支付的步骤介绍: 1.使用快应用的包名编译一个 android app. 主要用来走微信后台的注册流程,不用有内容,helloworld 就可以了

2.将步骤1中的 android app 注册到微信开放平台,并等待审核通过 主要注意的是,app 的支付能力是需要单独申请的,期间需要用到公司执照,耗时大概一个星期左右. 走流程的过程中,微信后台需要填写 app 的包名签名,包名就是快应用的包名了,签名的获取需要用到微信提供的一个工具,在这个页面可以下载的到

3.完成服务端的接入. 按照微信官方接入文档进行接入,接入完成之后,服务器能正常向客户端返回订单信息,并且返回的订单信息能够使用微信的校验工具校验通过

4.在快应用中进行配置 主要是在 manifest.json 中声明 wxpay 这个 feature 是填上走微信后台注册流程时用到的包名和签名 这里填的签名需要使用快应用的工具获取,获取的方法和微信的工具一致,但是得到值和微信的不一样,不要和微信的签名混淆. 快应用接入微信支付的官方文档

微信H5支付: 如果之前没有在 h5 网站中接入过微信支付能力,建议先看看微信官方文档 快应用中接入微信 H5 支付和微信文档中介绍的一致,快应用只是提供了一个运行 H5 网页的 webView,使用 h5 页面拉起微信支付的能力给开发者提供微信支付的接口

快应用接入微信 H5 支付的步骤: 1.在微信开放平台新注册申请一个 H5 网站 https://open.weixin.qq.com/cgi-bin/frame?t=home/web_tmpl&lang=zh_CN

2.完成支付服务端的接入. 按照微信官方的文档完成服务端的接入,服务器要完成的工作是接收来自客户端的支付请求,然后生成一个订单,之后把订单传给微信的服务器,微信会返回一个 mweb_url,服务器需要把这个 mweb_url 返回给客户端.

3.完成一个中间跳转页面 中间页需要在加载完成的时候从页面的 get 参数中解析出 mweb_url , 然后自动向这个 url 跳转,不需要任何其他的内容,也不需要 ui 关于这个中间页: 1)为什么需要这个中间页? 因为微信 h5 支付拉起支付界面的方式就是向 mweb_url 跳转,不过因为微信会通过 ref 做防盗链检查,因为跳转动作需要在开发者的页面中完成 2)这个中间页什么时候会被加载运行? 调用微信支付的 pay 接口之后,平台会自动加载运行这个页面 3)加载运行这个中间页的时候,会拿到哪些参数? 调用微信支付的 pay 接口时传入的参数,会全部作为 get 参数传给这个页面

4.在快应用中进行配置中间页地址 在 manifest.json 中声明 wxpay 这个 feature 时填上, 参考快应用官方文档中接口声明的 url 字段

FAQ:

1.我可以指定使用微信 h5 支付吗? 答:不可以,H5 支付是 App 支付的 fallback 方案,如果可以 app 支付,不会 fallback 到 h5 支付.具体应该使用那种支付方式,以 getType 的返回值为准.

2.app 支付下,收到了 2001 错误,怎么处理? 答:2001 错误是微信拒绝了支付请求, 可能的原因: 1).微信后台或者 manifest.json 中的签名配置错误 2).订单信息中的 sign 字段生成有误 3).android app 的后台审核流程还未通过

3.微信 h5 支付下,没有拉起微信支付界面,什么原因? 答:检查中间页自动向 mweb_url 跳转的逻辑是否有生效,如果没有请修改中间页的逻辑. 另外,中间页因为不展示 ui 逻辑,只作跳转,因此除了 js 执行权限以外,其他的权限均未授予,包括常用的 domStorage 权限.

4.我们之前已经有一个上线了 android app 接入了微信支付,可以直接把这个 app 的包名和签名配置在快应用中使用吗? 答:不行,如果这么配置,快应用和 android app 同时发起微信支付时,会发生冲突.

5.如何监听订单返回状态?跳转支付页面后,再返回,在这个返回到的页面该如何提示?因为成功回调只是把订单发过去,并没有“取消支付”或者“支付成功”等状态能获取到. 答:网页方式拉起微信支付的情况下,支付结果是返回到一个服务端地址。如果需要接收这个支付结果,请在【统一下单】接口的请求参数里面带上 notify_url,参考微信文档

6.关于微信支付,自定义中间页和 referer 的优先级问题,如果二者都设置了,那么优先跳转哪个? 答:referer

7.微信支付,屏蔽 app 支付,只用网页支付,但是使用 vivo 和 oppo 手机调试时,调不起支付页面,也无任何报错.华为小米的可以调起. 答:如果要用网页支付,vivo 是不允许 manifest.json 配置 app 支付的参数,不然会默认走 app 支付.去掉 sign 参数即可,但如果其他厂商是使用 app 支付,去掉会有影响,建议统一一种方式支付,或者做好适配.

8.调用微信授权时,第一次授权成功,再次授权则界面无反应,连续点击多次后报错 code:205,提示上个授权完成后再操作.清除快应用缓存也无作用. 答:证书问题,release 生成的证书和 debug 不一样,需要用 release 生成的.

9.微信 H5 支付,referer 中间页,是要设置什么域名? 答:在微信后台注册微信支付时,需要填写域名

10.微信 H5 支付成功点击返回时,在快应用能做监听或者回调吗? 答:需要通过服务端的回调地址访问以获取结果

11.接微信支付时,需要微信支付后台注册时提交的 apk 的签名的 Base64 编码是什么,在哪里可以看到? 答:可以用快应用 IDE-->hap-->生成证书,获取到签名文件,release/certificate.pem 文件中-----BEGIN CERTIFICATE----- 与 -----END CERTIFICATE----- 之间即为该 base64 编码

12.为什么调不起微信支付? 答:检查是否参数有误,orderInfo 示例如下 orderInfo示例

13.微信 app 支付,wxpay.pay 无法调用,只打印了 appid order_sign。其他平台可以调用,快应用中,h5 和 app 的 sign 是不同的吗? 答:sign 错误,h5 不需要 sign

附: manifest.json 中微信支付的配置样例:

{
"name": "service.wxpay",
"params": {
"package": "com.your.package.name",
"sign": "MIIDDTCCAfWgAwIBAgIEfiu92jANBgkqhkiG9w0BAQsFADA3MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHQW5kcm9pZDEWMBQGA1UEAxMNQW5kcm9pZCBEZWJ1ZzAeFw0xNjA0MTMwNTUyMDhaFw00NjA0MDYwNTUyMDhaMDcxCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdBbmRyb2lkMRYwFAYDVQQDEw1BbmRyb2lkIERlYnVnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz/dFKLrU3NmabX/byI0vL5ctZkg64Yhas5dsvl6bZZO/FWrgR+ZWiCcVFLQt/CpzLj3fMpIBoUiEuqPVRJoZdRn4gML1oIfj1meM9X9HSQHXzXr0NkOZhOzrlGvuWuy0//m3I18I8V9HXka4xiT9xGBiiMTWbP90vj7fTU+B3Q0UQxbMibdZfap9gCn2QKq7Y8k73n9wLsbmznlHiBeL2kJAcVL+3EtEle1PZaN90w7YGjaKijuXwv8MS0guvzy63t2rqUjEL41wlBz+/DnzfdolAD6toN5aynuFan51pUqrY5CD9CQIbiTeJXgjsz8vaZotSj+61ISqy2sXrpySAwIDAQABoyEwHzAdBgNVHQ4EFgQUhtto5p0PfrnZlj12MpIF6gzYawEwDQYJKoZIhvcNAQELBQADggEBAJcNfFIJCWh9YIFzM7+eg4P9pNME+Q9Oug+NVA+g6+Vuhi2eFMBe29GnSr//EMpnluXhmfNy40whv9uUKdz4ekejDVyHucs8AvJI2cI5WhoenHO2jqw5IpsxIBqyca6zpXpElU35NZnqNoD9Rs5AZrEVxCB3AzhWviGe5QmxXqRMAVOju3X1B+Nv3dVvou9y64UI9mK3Z4Sz0gUNcYsyrSU3uPmCAYGgh/3/ygGZA9LL5a2jvWZVWPq2/+pFzWL10CbFLCXaWT0dJrxDbLWZcd/6N95kT0sMwVJkwL+v/jrnyXpCpbB7UaYw5JSLsWMnk+4/pSeAoDwcZIgdBlRYPmM=",
"url": "https://your.transitional.page/para=value"
}
},

微信工具抓取的签名样例: fcaa113908d343444c1894dc4b42ac13

results matching ""

    No results matching ""