公司要开发微信支付, 于是我就开始看微信开放平台的API文档, 发现微信, 历尽两周开发, 把网页前后端都开发完毕了, 遇到过大大小小的坑, 记录一下
开发准备
- 注册微信公众号(服务号)
- 开通微信支付功能
- 注册开发者账号(微信开放平台)
- 在开发者账号内绑定自己的微信公众号
- 申请测试公众号
在微信公众号平台获取基本参数
- token
- test_token
- appid
- appsecret
- mch_id
- test_appid
- test_appsecret
- server_notify
- key
服务器在获取基本参数
- 验证服务器 (
80
443
端口, 接受GET请求, 验证 签名) - 获取
ACESS_TOKEN
(用独立服务刷新) - 配置
JSSDK
- 获取
openid
(oauth2.0
)
微信开发
- 微信支付
-
注入其实不用注入也可以成功JSSDK config
- 注入成功之后要验证
Agent
是否支持微信支付 - 客户端输入信息完毕之后, 点击支付后
- 服务器进行输入校验后, 保存订单和用户信息, 然后通过 统一下单接口 生成订单, 并发送给客户端
- 不要使用JSSDK网页上的微信支付接口, 使用 微信支付详情页面示例的微信支付接口进行支付
- 支付成功后, 用
wx.closeWindow()
接口关闭页面 - 微信会给服务器一个回调, 然后服务器更改订单状态, 并通过客服消息接口给客户发个信息反馈(注意重复验证)
-
- 微信客服消息
- 接受回调, 验证签名和随机字符串是否正确
- 正确之后发布客服消息
- 微信事件通知及被动消息回复
- 在开发者配置里, 把服务器回调网址配置好
- 当微信接到用户特定动作时时, 会给服务器发送事件通知(POST), 然后开发者直接回复
xml
或者''
即可
吐槽注意要点
- 微信的
SessionID
会一直变化, 所以不能用Session
去存openid
, 我采用的是cookies
存储 - 微信支付的支付页面, 强匹配网址(http://www.abc.com 和 http://www.abc.com/)都不一样, 有一点网址不一样都不行
- 微信支付的支付 sdk 旧的和新的在微信支付页面没有标明,(JSSDK说明文档上的支付API是旧的), 千万不要用旧的了, 用新的即可
- 微信API上充斥着各种风格的变量名(
noncestr
nonce_str
nonceStr
以及timestamp
timeStamp
)千万要小心
开发时间
- 采用
nodejs
开发, 微信支付的各种坑踩完 7个工作日 - 后端
CRUD
1个工作日 - 客服消息 不到1个小时
- 微信事件通知及被动消息回复 不到1个小时
PS: 欢迎大家继续吐槽微信开发