微信H5支付开发日志

本文写于 2018-03-28

1. 参考微信官方流程

参考:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4

2. 准备资源

  • 注册申请(略)成功后可以拿到和设置的信息。
    你需要准备的东西:(4样!)
  1. 公众账号ID (Appid)

  2. 公众号商户号 (mch_id)

  3. apisign key API密钥 (签名时要用!)
    设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置。

    API密钥.png

    我用md5命令生成:
    echo -n "mySignKey" | md5

  4. H5 支付域名(只需要配置顶级域名)
    产品中心->我的产品->H5支付->开发配置->支付配置->H5支付域名


    H5支付域名.png

3. 开发流程

流程有点多。其实总结起来就是一句话。用户点击你提供的链接,把钱给微信,微信异步通知公众号(你),公众号(你)接到通知处理后给用户反馈。

简单流程.png


注意,这里涉及三个角色。

  • 用户
  • 微信支付平台
  • 公众号开发人员(你!)


你的开发任务就在于这样一个场景:
用户已经在微信旁边等你的页面了,微信也等着你发下单请求。

你(公众号)的开发细节总览:

  1. 提供页面给用户点击支付。
    地址如下: http://pay.yourdomain.com/order/pay?userId=9527

  2. 用户点击之后,你的后台要生成一个预支付的的订单,发给微信统一下单API。
    参考统一下单:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20&index=1
    预支付订单格式如下:

<xml>
<appid>wx2421b1c4370ec43b</appid>
<attach>附加数据</attach>
<body>H5支付测试</body>
<mch_id>10000100</mch_id>
<nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str>
<notify_url>http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php</notify_url>
<openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid>
<spbill_create_ip>14.23.150.211</spbill_create_ip>
<total_fee>1</total_fee>
<trade_type>MWEB</trade_type>
<scene_info>{"h5_info": {"type":"IOS","app_name": "王者荣耀","package_name": "com.tencent.tmgp.sgame"}}</scene_info>
<sign>0CB01533B8C1EF103065174F50BCA001</sign>
</xml>

这里需要注意的是:
2.1 scene_info 中的wap_url 域名必须和上文中准备的H5支付域名匹配。(否则报错: 商家存在未配置的参数,请联系商家解决)
2.2 sgin 签名是计算出来的。用的是上文准备好的API密钥。计算错误是无法下单成功的。(参考这里https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=4_3
2.3 spbill_create_ip的ip要正确的获取。(否则报错:网络环境未能通过安全验证,请稍后再试)
2.4 通知地址要设置一个能访问且能处理的地址,用来处理微信回调。(要不然你怎么知道充值成功了呢!)

  1. 微信通过验证后会给你一个包含支付地址信息给你
    支付地址格式如下:
<xml>
   <return_code><![CDATA[SUCCESS]]></return_code>
   <return_msg><![CDATA[OK]]></return_msg>
   <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
   <mch_id><![CDATA[10000100]]></mch_id>
   <nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str>
   <sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign>
   <result_code><![CDATA[SUCCESS]]></result_code>
   <prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id>
   <trade_type><![CDATA[MWEB]]></trade_type>
   <mweb_url><![CDATA[https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx2016121516420242444321ca0631331346&package=1405458241]]></mweb_url>
</xml>
  1. 你的后台会接收支付信息,把"mweb_url"对应的地址发给用户,用户点击之后直接跳转到微信。
    用户点击 mweb_url 对应的地址,就能跳转微信。

  2. 用户进入微信,输入支付密码。支付成功。微信会通知公众号(你)。
    也就是步骤2中你配置的notify_url。接收到的是一个XML。

  3. 你拿到通知。最好应该再去微信查询这个订单。验证订单的真伪。
    参考查询订单:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_2&index=2
    也是要用API秘钥签名的。基本没啥难度了。

  4. 如果订单是真的,表示钱到账了,准备发货给用户吧。

9.流程结束。

PS:
1.隐去很多小细节。坑算是比较少的,跟着错误提示来调试即可。
2.只是记录。写的不完整。

代码参考:
GitHub: (后面再补!)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 关于微信支付 生活中的微信支付 目前我们日常生活中接触得比较多的线上电子支付方式主要有两种,一种是支付宝,另一种就...
    积_渐阅读 9,359评论 3 26
  • 本篇文件来聊聊微信服务商模式以及商户模式下微信H5支付 先说一个事情。8月1号开始微信公众平台支付的开发配置页面迁...
    Javen205阅读 22,063评论 13 23
  • 我们走着一条没有尽头的路,伴随着孤独与寂寥. 偌大的宇宙洪荒悄然运转着,生活在尘埃一般的世界,渺小的我们更加无能为...
    何言初日阅读 1,810评论 0 1
  • 《我滴个神啊》感悟 信仰,宗教。一直以来以为信仰是个褒义词,是人们追求美好的方式,然而这部电影让我对信仰有了重新的...
    6Day阅读 3,226评论 0 0
  • 妖王出世 大海乌浪翻滚,水晶宫一阵震荡,砰的一声,一扇石门爆破而开,一条八爪章鱼疾射而出。 金...
    空中的梨子阅读 3,966评论 7 7

友情链接更多精彩内容