我所在公司需要开发一款商城小程序,里面需要用到微信支付,我负责里面的下单功能,从小程序端到后台的支付流程都是我自己开发的,由于我们组没有人有开发微信支付的经验,只有我有开发过JSAPI的微信支付的经验,但是之前的开发经验自己其实还不是很理解,现在又要开发小程序的微信支付,很多东西都还不怎么明白,但是没办法,只能我自己琢磨,写完之后总感觉有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. 支付结果通知的安全性问题。因为支付结果通知接收的地址是对外开放的,所以一旦地址泄露出去,有可能会被有心人调用,按照一定的参数格式调用,就能修改订单的付款状态,造成假的支付通知。所以在收到支付结果通知的时候,需要对接收到的数据按照签名的规则进行签名校验,校验通过了,才更新订单的付款状态。签名需要用到支付秘钥,只要秘钥没有泄露,就不会有安全性问题。
  4. 微信支付的秘钥不要读到前端。因为我们的接口分了好多地方读取,所以在进行微信统一下单的时候,有把支付秘钥在小程序的js页面里读出来,再在js里调统一下单的接口,从安全性的角度上来看,这样不够安全,支付秘钥的读取和传输应该只在后端操作,不应该读到前端,当然读到前端也没有问题,但是可以改的话最好改一下。

附:微信JSAPI支付流程
微信JSAPI支付流程和小程序的支付流程基本一致,需要注意两点:

  1. 需要在微信商户平台配置支付目录,只有跳转到了支付目录的地址,才能发起微信支付。
  2. 网页需要获取openid需要进行一次页面跳转,需要用户对网页授权之后,才能获取到code,获取到code之后,再使用code获取到openid,再进行统一下单预支付,其他流程就和小程序一致。因为在网页里要获取到openid必须要进行一次页面跳转才能获取到openid,所以我建议可以在订单确认页面,确认好信息之后,先下好待付款的订单,得到订单号之后再跳转,跳转到支付页面的时候,进行获取openid的操作,再进行下面的操作即可。

获取openid参考微信网页授权

小程序微信支付开发流程记录相关推荐

  1. 微信小程序收款手续费_小程序微信支付收款流程

    大家都知道,小程序具备微信支付功能,但是,很多商家还不知道具体的收款流程是什么?用户在小程序下单支付的款项究竟到了哪里?或者找第三方公司开发担心资金安全问题? 今天给大家详细的讲解一下: 在实现微信小 ...

  2. 移动支付开发:小程序微信支付开发测试

    小程序推出邀请测试已经有一个多月,终于申请到一个内部账号,尝试了一把小程序上的微信支付.小程序虽然叫"小",但是个人感觉他的门槛并不低.(/www.zhaoweb.cn) 教育小程 ...

  3. tp小程序微信支付部分代码

    小程序微信支付开发指引:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_2.shtml 流程图: <?php names ...

  4. 微信小程序 微信支付代码实现流程

    微信小程序 微信支付是一个很简单的流程  微信开发文档 地址:wx.requestPayment(Object object) | 微信开放文档 微信公众平台申请支付功能 百度一大堆例举代码 官方文档 ...

  5. 小程序微信支付接口php,微信小程序微信支付接入开发

    本文主要讲述微信小程序接入微信支付开发过程中遇到的坑,分为两大块,小程序端和后台接口封装.本文主要内容如下: 一.后台接口封装: 二.小程序端整合: 三.踩坑总结. 一.后台接口封装 基于ThinkP ...

  6. 微信小程序支付返回签名错误_java 微信小程序微信支付统一下订单及数字签名错误问题(后端)...

    今天来分享一下之前做微信小程序微信支付遇到的一些坑,博主这里是微信小程序支付功能,因此选择的微信支付方式是JSAPI支付方式(温馨提示左下角有音乐哦). 首先我们肯定是要在小程序后台绑定一个商户号的, ...

  7. 小程序微信支付申请与配置完整版操作流程

    小程序微信支付申请与配置完整版操作流程 一. 申请小程序微信支付 微信支付申请分为两种情况: 情况一,申请新的微信支付商户号: 情况二,绑定已有微信支付商户号 注意:申请微信支付的小程序账户需要进行微 ...

  8. PHP实现小程序微信支付V2获取prepay_id

    PS:本文旨在简单获取prepay_id,只是简单的介绍一下流程,并非完整的订单支付流程 小程序端JS代码: getxml(){var test = thiswx.getStorage({ //从缓存 ...

  9. nodejs实现小程序微信支付

    最近做小程序时用到了微信支付很是开心,因为之前支付一直都没有做过,终于又可以学点东西了.于是很开心的去看了下微信小程序的支付接口,没想到,事情基本都是后端做的,前端只要调用wx.requestPaym ...

最新文章

  1. python 时间减去一天_Python是个什么鬼?为什么985学生都在学它?!
  2. 编程:利用杨辉三角形原理来计算组合数
  3. php 接口说明文档,phpwind文章中心接口说明
  4. 友元函数 友元类 友元成员函数
  5. 将之前写完的猜数字游戏改为通过javabean_42个宝宝益智游戏良心整理!让宝宝快人一步更聪明...
  6. Class绑定、Class对象绑定、v-if(条件渲染)、v-show(元素显示)、v-for(列表渲染)
  7. reduce 数据倾斜_Spark(四十)数据倾斜解决方案之将reduce join转换
  8. CodeForces 489A SwapSort (选择排序法)
  9. POJ 2240 Arbitrage Bellman_ford 判读是否存在正环
  10. 基于跨模态预测的多模态情感分类
  11. *(volatile unsigned long *) 语法
  12. [T-ARA][I'm so bad]
  13. 安装CUDA和CUDNN
  14. 自然语言处理和编译器的对比
  15. Windows XP SP2 (Simplified Chinese MS08_067漏洞复现)
  16. IOS 锁屏 状态下,看到歌手图片
  17. RX 6500 XT和rtx3050 哪个好
  18. NetBox的简单使用
  19. 大型网站的架构设计图分享
  20. 3D人体重建从单张图中-DeepHuman: 3D Human Reconstruction from a Single Image

热门文章

  1. 【机房收费个人版】DataTable 与泛型集合的较量
  2. 适合普通人的竞争策略
  3. 打印Excel工作表时忽略打印区域
  4. 2021-2027全球与中国草坪和花园用品市场现状及未来发展趋势
  5. 软件测试学习 之 进阶之路
  6. ts3.03.x cocos实现九宫格/跑马灯抽奖
  7. 《蔡康永的201堂情商课(完结)》学习
  8. Microsoft.Office.Interop.Word 创建word
  9. 谷歌浏览器打开标签会把之前的覆盖掉_Chrome浏览器切换到之前打开的标签页会重新加载...
  10. Java实现单次转账到支付宝账户(新版接口)(SpringBoot)