小程序微信支付开发流程记录

栏目: IOS · Android · 发布时间: 5年前

内容简介:我所在公司需要开发一款商城小程序,里面需要用到微信支付,我负责里面的下单功能,从小程序端到后台的支付流程都是我自己开发的,由于我们组没有人有开发微信支付的经验,只能我自己琢磨,写完之后总感觉有bug,但是不知道该怎么改才合适,前前后后踩了不少的坑,自己有时间也研究了一下,改动了好几次之后,我觉得目前的版本是最顺畅,安全性也是最高的,我把目前的做法流程记录一下,供他人参考。踩坑集合:

我所在公司需要开发一款商城小程序,里面需要用到微信支付,我负责里面的下单功能,从小程序端到后台的支付流程都是我自己开发的,由于我们组没有人有开发微信支付的经验,只能我自己琢磨,写完之后总感觉有bug,但是不知道该怎么改才合适,前前后后踩了不少的坑,自己有时间也研究了一下,改动了好几次之后,我觉得目前的版本是最顺畅,安全性也是最高的,我把目前的做法流程记录一下,供他人参考。

  1. 首先要拿到收款的微信商户号和支付秘钥
  2. 确保拿到用户的openid,获取用户的openid的流程大致是,在微信端使用wx.login获取到code,将code传到服务器换取openid,具体的流程可去官方文档查看 获取openid
  3. 创建一个代付款的订单,得到该订单的单号
  4. 调用微信支付的统一下单接口 微信支付统一下单 ,调用预下单接口的时候,要传入一个正确的通知地址,进行预下单之后,得到一个prepay_id
  5. 用得到的prepay_id在js里调用发起支付 微信小程序支付
  6. 支付结果,微信会通过服务端通知到统一下单的时候的通知地址,当收到微信支付结果通知之后,需要对接收到的信息进行签名验证,确保验证通过了,才更新订单的状态。

踩坑集合:

  1. 最开始的版本是直接在小程序微信支付的js的success回调里,接收到了支付成功之后,再在js里调用修改订单状态的接口,这样做其实很不安全,因为别人一旦拿到小程序的源码,就可以直接跳过微信支付,直接调用修改订单付款状态的接口了,而且,如果客户在微信支付完成之后,没有点完成按钮,也不会进入js的success回调里面,所以需要通过服务端的通知接口,接收到支付结果通知之后,再在服务端修改订单付款状态,这样就没有问题了。
  2. 多次通知付款结果的问题。付款结果通知,微信会发起多次,一开始的时候,我发现同一个订单会有多条一样的付款日志,没找到问题,后面看了微信支付的官方文档之后,才知道,为了保证能接收到支付的结果,同一条订单的支付结果会通知多次,需要开发者自己进行处理。
  3. 支付结果通知的安全性问题。因为支付结果通知接收的地址是对外开放的,所以一旦地址泄露出去,有可能会被有心人调用,按照一定的参数格式调用,就能修改订单的付款状态,造成假的支付通知。所以在收到支付结果通知的时候,需要对接收到的数据按照签名的规则进行签名校验,校验通过了,才更新订单的付款状态。签名需要用到支付秘钥,只要秘钥没有泄露,就不会有安全性问题。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

驯服烂代码

驯服烂代码

伍斌 / 机械工业出版社 / 2014-11 / 69.00

Kent Beck、Martin Fowler、Michael C. Feathers、Robert C. Martin、Joshua Kerievsky、Gerard Meszaros等大师们的传世著作为如何提升编程技艺和代码质量提供了思想和原则上的指导,本书则为实践和融合这些思想、原则提供了过程和方法上指导。本书通过编程操练的方式讲述了如何用TDD(测试驱动开发)的方法来驯服烂代码,通过结对编......一起来看看 《驯服烂代码》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

MD5 加密
MD5 加密

MD5 加密工具