摘要:附微信支付流程微信支付流程和小程序的支付流程基本一致,需要注意两点需要在微信商户平台配置支付目录,只有跳转到了支付目录的地址,才能发起微信支付。
我所在公司需要开发一款商城小程序,里面需要用到微信支付,我负责里面的下单功能,从小程序端到后台的支付流程都是我自己开发的,由于我们组没有人有开发微信支付的经验,很多东西都还不怎么明白,但是没办法,只能我自己琢磨,写完之后总感觉有bug,但是不知道该怎么改才合适,前前后后踩了不少的坑,自己有时间也研究了一下,改动了好几次之后,我觉得目前的版本是最顺畅,安全性也是最高的,我把目前的做法流程记录一下,供他人参考。
首先要拿到收款的微信商户号和支付秘钥
确保拿到用户的openid,获取用户的openid的流程大致是,在微信端使用wx.login获取到code,将code传到服务器换取openid,具体的流程可去官方文档查看获取openid
创建一个代付款的订单,得到该订单的单号
在服务端调用微信支付的统一下单接口微信支付统一下单,( 调用预下单接口的时候,要传入一个正确的通知地址,字段名称是notify_url,这个地址是我们自己写的接口地址,用于接收微信支付结果通知,然后更新订单状态 ),进行预下单之后,得到一个prepay_id
用得到的prepay_id在js里调用发起支付微信小程序支付
支付结果,微信会通过服务端通知到统一下单的时候的通知地址,当收到微信支付结果通知之后,需要对接收到的信息进行签名验证,确保验证通过了,才更新订单的状态。
踩坑集合:
最开始的版本是直接在小程序微信支付的js的success回调里,接收到了支付成功之后,再在js里调用修改订单状态的接口,这样做其实很不安全,因为别人一旦拿到小程序的源码,就可以直接跳过微信支付,直接调用修改订单付款状态的接口了,而且,如果客户在微信支付完成之后,没有点完成按钮,也不会进入js的success回调里面,所以需要通过服务端的通知接口,接收到支付结果通知之后,再在服务端修改订单付款状态,这样就没有问题了。
多次通知付款结果的问题。付款结果通知,微信会发起多次,一开始的时候,我发现同一个订单会有多条一样的付款日志,没找到问题,后面看了微信支付的官方文档之后,才知道,为了保证能接收到支付的结果,同一条订单的支付结果会通知多次,需要开发者自己进行处理。
支付结果通知的安全性问题。因为支付结果通知接收的地址是对外开放的,所以一旦地址泄露出去,有可能会被有心人调用,按照一定的参数格式调用,就能修改订单的付款状态,造成假的支付通知。所以在收到支付结果通知的时候,需要对接收到的数据按照签名的规则进行签名校验,校验通过了,才更新订单的付款状态。签名需要用到支付秘钥,只要秘钥没有泄露,就不会有安全性问题。
微信支付的秘钥不要读到前端。因为我们的接口分了好多地方读取,所以在进行微信统一下单的时候,有把支付秘钥在小程序的js页面里读出来,再在js里调统一下单的接口,从安全性的角度上来看,这样不够安全,支付秘钥的读取和传输应该只在后端操作,不应该读到前端,当然读到前端也没有问题,但是可以改的话最好改一下。
附:微信JSAPI支付流程
微信JSAPI支付流程和小程序的支付流程基本一致,需要注意两点:
需要在微信商户平台配置支付目录,只有跳转到了支付目录的地址,才能发起微信支付。
网页需要获取openid需要进行一次页面跳转,需要用户对网页授权之后,才能获取到code,获取到code之后,再使用code获取到openid,再进行统一下单预支付,其他流程就和小程序一致。因为在网页里要获取到openid必须要进行一次页面跳转才能获取到openid,所以我建议可以在订单确认页面,确认好信息之后,先下好待付款的订单,得到订单号之后再跳转,跳转到支付页面的时候,进行获取openid的操作,再进行下面的操作即可。
获取openid参考微信网页授权
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/101416.html
摘要:背景最近项目需要上线支付宝小程序,同时需要走用户的授权流程完成用户信息的存储,以前做过微信小程序的开发,本以为实现授权的过程是很简单的事情,但是再实现的过程中还是遇到了不少的坑,因此记录一下实现的过程学到的知识支付宝开放接口的调用模式以及实 背景 最近项目需要上线支付宝小程序,同时需要走用户的授权流程完成用户信息的存储,以前做过微信小程序的开发,本以为实现授权的过程是很简单的事情,但是...
摘要:使用触发器自动根据微信支付回调更新可以保证无论何种情况下,数据中保存的都是最终用户实际支付的金额。想要实现这个功能,则要将触发器和云函数进行搭配使用了。 showImg(https://segmentfault.com/img/remote/1460000018649967?w=2160&h=918);本文主要侧重于讲述小程序在线支付功能中的编程思想和编程模式,并在必要的地方提供关键代...
摘要:本文是浅析微信支付系列文章的第二篇,主要讲解一下普通商户接入的支付方式以及其中的不同之处。浅析微信支付前篇大纲微信支付是集成在微信客户端的支付功能,用户可以通过手机完成快速的支付流程。目前微信支付支持手机系统有苹果安卓和。 本文是【浅析微信支付】系列文章的第二篇,主要讲解一下普通商户接入的支付方式以及其中的不同之处。 上篇文章讲了本系列的大纲,没有看过的朋友们可以看一下。 浅析微信支...
摘要:浅析微信支付前篇大纲本文是浅析微信支付系列文章的第一篇,主要会介绍一下为何写下这个系列以及对于微信支付的一点小经验,与君共勉。下面讲一下我是如何去学习微信支付的。 浅析微信支付:前篇大纲 本文是【浅析微信支付】系列文章的第一篇,主要会介绍一下为何写下这个系列以及对于微信支付的一点小经验,与君共勉。 以下会分几个步骤讲一下我学习微信支付的过程,也是一部辛酸史,也是希望朋友们不要再次跌进...
阅读 1828·2021-09-22 15:55
阅读 3521·2021-09-07 10:26
阅读 627·2019-08-30 15:54
阅读 683·2019-08-29 16:34
阅读 838·2019-08-26 14:04
阅读 3258·2019-08-26 11:47
阅读 2133·2019-08-26 11:33
阅读 2293·2019-08-23 15:17