# 微信支付(公众号和网页) **Repository Path**: lsx589/wechat_payment ## Basic Information - **Project Name**: 微信支付(公众号和网页) - **Description**: 第一次写微信公众号的小得 - **Primary Language**: JavaScript - **License**: AFL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2019-05-27 - **Last Updated**: 2022-06-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 微信支付(公众号和网页) #### 介绍 第一次写微信公众号的小得 #### 使用说明 - 1. 1. :point_right: 1.网页支付( _**目前有个小问题还未解决,具体描述放到最后**_ ) - 1. 1. 网页相对比公众号简单很多 - 1. 1. (1)网页交易类型 trade_type=MWEB - 1. 1. (2)相关参数获取到之后只需点击支付执行window.location.href = res.data.Result.data.mweb_url + '&redirect_url=' + encodeURIComponent('回调地址==当前页面?state=128个字节随便填') - 1. 1. #### 参数介绍 - 1. 1. 1.window.location.href 大家都懂得 - 1. 1. 2.res.data.Result.data.mweb_url后台返的跳转支付的地址,下面是我的代码https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx2714XXXXXXX&package=XXXXX - 1. 1. 3.&redirect_url掉起支付之后的回调地址(如果不写回调地址默认返回当前支付页) _**==这里回调地址当前支付页和其他页面也有区别,具体放最后== - 1. 1. **_ - 1. 1. 4.state 重定向之后会带回的参数(和回调地址放一起说 :persevere: ) - 1. 1. ### 第一个小问题 - 1. 1. :blush: 当掉起支付,重定向到回调地址之后,订单状态(比如已支付未支付)不能实时获取(原因的话我观察到如果支付系统掉起慢的话他已经到达了回调页面,得出结论,当你点击支付按钮的时候回调地址也在执行,并不是支付之后才会执行=个人想法 :grimacing: =),但是如果再进入路由之前alert一个随意值,那么订单状态是可以获取到的,当然这样的话用户和产品就不高兴了 :worried: , - 1. 1. :smirk: 解决办法,需要后台配合,让后台主动掉一下微信的接口直接从微信获取支付的结果返回结果。 - 1. 1. ### 第二个小问题 - 1. 1. :blush:回调地址到当前页和其他页的区别 - 1. 1. 当时写的时候还感到奇怪回调地址传的参数刚才还有换到当前页面回调地址的参数都就没了,这个问题纠结 :tired_face: 了好久,之后发现,当你回调到不是当前支付页的所有页面,回调地址是可以带参数的(比如一些订单号啊啥的好多东西)并且微信不会给你删除,进而进行一些判断订单状态,但是我就想让他回调到当前支付页咋地(就是任性 :joy: ),这个时候就可以用到state 了,但是有局限性就是只能带一个参数了带好多个好像是没门哦 :broken_heart: 。 - 1. 1. 附H5支付文档链接 [https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4] - 1. 1. :point_right: 2.公众号支付(公众号支付有两种方式) - 1. 1. 往下看 :point_down: - 1. 1. (1)第一步 :point_up: - 1. 1. 判断是不是在微信内打开的,代码如下 :point_down: - 1. 1. `var ua = navigator.userAgent.toLowerCase(); - 1. 1. - 1. 1. if (ua.match(/MicroMessenger/i) == "micromessenger") { - 1. 1. 微信内 - 1. 1. } else { - 1. 1. 微信外 - 1. 1. }` - 1. 1. (2)第二步: :v: - 1. 1. 获取code,通过code获取openid,代码如下 :point_down: - 1. 1. 哎,代码太多了,还是看文件吧(懒懒更健康 :stuck_out_tongue_winking_eye: ) - 1. 1. (3)第三步: :v: :point_up: - 1. 1. 原材料都准备好了,那就只省下开灶了,老规矩,代码如下: :point_down: - 1. 1. 这的代码更多,不想写 ### _**这是补充用的**_ ### _**这是赏钱用的**_ https://images.gitee.com/uploads/images/2019/0527/151756_98c8f864_530477.jpeg