微擎支付返回商户单号_微信小程序支付流程
微信支付之小程序支付
微信的支付方式有以下几种,不同的支付方式适用于不同的支付场景,而今天要给大家讲的就是 小程序支付 方式
说到支付功能就要涉及到金钱交易,必定是有比较严格的规范及流程,如要求小程序必须具备企业性质,必须拥有微信支付商户平台的账号
PS:申请微信支付商户平台需要一个微信小程序或公众号等,建议按照以下流程进行操作
准备工作
1、申请微信小程序账号
申请成功可拿到 AppID(小程序 id)和 AppSecret(小程序密钥) 申请类型为企业性质,否则无法接入微信支付
2、微信小程序认证
通过认证的小程序才能接入微信支付和绑定商户平台
3、申请商户平台账号
需要第一步申请的 AppID 申请成功可拿到 MchID(商户 id)和 MchKey(商户密钥)
4、信小程序关联商户号
微信和商户都认证成功后,在微信后台微信支付菜单中进行关联
5、接入微信支付
在微信后台微信支付菜单中进行接入
小程序支付流程
简要支付流程如下:
- 用户发起支付请求
- 后端调用统一下单接口得到 prepay_id
- 把支付所需参数返回前端
- 前端调用支付接口进行支付操作
- 支付结果通知
- 前端根据不同的支付结果给用户不同的提示
PS:难点在第 2、3、5 步,一定要仔细查看相关接口文档,否则容易出错,接下来我们按照以上 6 个步骤详细讲解在微信小程序中的支付流程
支付前的操作
因为严格意义上来说这不属于支付流程中的步骤,但支付过程中需要用到用户唯一标识openid,所以建议在用户进入小程序时就进行这一步的操作
- 调用wx.login()接口获取 code,并把code传到服务器
- 后端服务器拿到 code 后调用code2Session 接口获取 openid 和 session_key 建议把openid存入数据库,方便随时获取,下面的步骤也会用到
- 后端服务器保好 appid, secret, mch_id, mch_key(这些数据分别在小程序后台和商户平台中获得,我是把它们做成 commonjs 模块并保存在config/wx.js文件中以方便调用)
PS:开发者需要自行维护用户登录状态(用户登录状态的维护本文不做展开,请自行查阅相关资料)
1、小程序端:用户向商户服务器发起支付请求
这步没什么好说的,当用户点击支付按钮时,给我们自己的后端接口发起一个请求,携带必要的参数(如:body,total_fee 等),接口地址需要自行编写,如我的接口地址为/payment/order
// http对象为wx.request()的二次封装
PS:可能会有小伙伴产生疑惑,为什么不直接通过 wx.requestPayment() 在小程序端发起请求而要先请求商户自己的服务器呢?原因很简单,安全性问题,wx.requestPayment()需要 2 个重要参数paySign和package,需要 appid,secret,openid,mch_key 等私密数据,这些私密的数据不应该在前端暴露出来,而是放在自己的服务器中更安全,所以需要向自己的服务器发起这个请求拿到这些参数,下一步才能真正发起支付。接下来我们来看看后端是如果操作的
2、商户后端服务器:签名+生成预支付标识
后端代码使用 egg 框架(基于 NodeJS+Koa)实现,文中涉及到 egg 用法和 koa 的用法不再额外说明,请自行查阅相关资料
调用统一下单接口获取 预支付会话标识 prepay_id
注意:该接口需要发送 xml 格式参数,同时返回 xml 格式数据,需自行转换(我使用的是xml-js第三方模块)
- 该接口必填参数:appid,mch_id,nonce_str,sign_type,body,out_trade_no,total_fee,spbill_create_ip,notify_url,trade_type,sign,其中 sign 为前面所有参数加密后的字符
async
3、给前端返回支付参数+签名
// 支付签名参数
附上封装好的签名方法sign()和生成随机字符串的方法randomStr(),我写在service/wx.js
"use strict"
4、小程序端:向微信服务器发起请求
第 1 步的数据返回后,向微信服务器接口wx.requestPayment()发请求,唤起支付界面,请查看第一步 try...catch 中的代码
5、微信服务器:支付结果通知
在第 2 步向统一下单接口发起请求时附带了一个notify_url,此地址一定要是可外网访问的接口地址(商户自行编写),由微信服务器调用该接口,不管支付成功与否,此接口都会调用,并返回相应数据(查看接口数据),所以商户可以在此接口中编写相关业务逻辑、如支付成功后写入数据库等操作
注意:商户需要在此接口中做接收处理,并向微信服务器返回应答(按接口规范返回特定数据)。如果微信收到商户的应答不是成功或超时,微信会认为通知失败,微信会通过一定的策略定期重新发起通知,通知频率为:15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h,但微信不保证通知最终一定能成功。
"use strict"
附上以上代码中会用的封装好的方法parse()、xml2js()、js2xml(),我写在utils/index.js中
const
到此微信支付之小程序支付就完成了,过程比较繁杂,一定要一步步去实现,也许会踩坑,但相信我,这是每个程序员的必经这路,面对它,勇敢地走过去,你对能到达胜利的彼岸。
注意事项
- appid、appsecret、mchid、mchkey、openid 为小程序或商户私密信息,应保存在服务端
- 注意参数大小写:每个接口大小写可能不同
- 签名算法:请查看接口文档
- 一定要注意看文档,根据我多冷踩坑的经历,90%以上的问题都是没有仔细看文档所致
参考网址与接口
- 微信支付商户平台:https://pay.weixin.qq.com
- 微信公众平台:https://mp.weixin.qq.com
- 微信支付接口:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/payment/wx.requestPayment.html
- 统一下单接口:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1
- 支付结果通知接口:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_7&index=8
- 签名算法:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_3
[mp] https://mp.weixin.qq.com
[pay] https://pay.weixin.qq.com
[payment] https://developers.weixin.qq.com/miniprogram/dev/api/open-api/payment/wx.requestPayment.html
[notify] https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_7&index=8
[login] https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html
[unifiedorder] https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1
[code2session] https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html
[sign] https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_3
此文转载自:千锋HTML5学院
原文链接:微信小程序支付流程
Eric:开发Web应用为啥要使用TypeScript?zhuanlan.zhihu.com
Eric:如何讲清楚Promise?zhuanlan.zhihu.com
微擎支付返回商户单号_微信小程序支付流程相关推荐
- 微擎支付返回商户单号_微信、支付宝支付动态库PayApiFun.dll说明
微信.支付宝支付动态库PayApiFun.dll说明 PayApiFun.dll这个动态库中包含了:微信付款码支付.生成微信支付二维码扫码支付.按商户单号查询微信支付状态.关闭未支付的微信订单.支付宝 ...
- 微擎支付返回商户单号_微信刷脸支付流程是怎么样的?
刷脸支付用于线下消费场景. 视壮科技微信刷脸支付设备具有以下特点: 1.无需提前录入人脸,无需拿出手机,在支持微信刷脸支付的机具上,刷脸并输入手机号验证,即可完成付款使用方便. 2.使用专用 3D 活 ...
- 微擎支付返回商户单号_支付宝,微信,银联支付
https://open.unionpay.com/tjweb/index 银联支付 统一支付接口 接口描述 用于线下刷卡交易.生物特征识别(例如人脸).被扫支付等后台交易. 对于被扫支付,收银员使用 ...
- 微擎支付返回商户单号_一步一步教你在SpringBoot中集成微信扫码支付
一:准备工作 使用微信支付需要先开通服务号,然后还要开通微信支付,最后还要配置一些开发参数,过程比较多. 申请服务号(企业) 开通微信支付 开发配置 具体准备工作请参考Spring Boot入门教程( ...
- 微擎支付返回商户单号_聚合支付系统设计(二)
支付网关与异步通知设计 支付网关 用户下单成功后,要经过收银台发起支付流程,支付网关就是用户发起支付流程的入口地址.支付网关需要接收订单的部分数据(订单号.待支付金额.商品描述信息等)和交易数据(支付 ...
- 加入域时出现以下错误 登陆失败 该目标账户名称不正确_微信支付踩坑合集:微信小程序支付失败是什么原因?持续更新...
微信小程序开发的过程一定会遇到各种问题,最让人棘手的就是支付问题,因为没有支付做商城类似的小程序就没有办法完成最关键的一步.那么支付失败到底什么原因呢?一下子收集了几个错误类似,希望对你有帮助: No ...
- 视频教程-微信小程序系统教程python版[3/3阶段]_微信小程序支付-手游开发
微信小程序系统教程python版[3/3阶段]_微信小程序支付 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试 ...
- 小程序下单账号与支付账号不一致不让支付_微信小程序支付流程
微信支付之小程序支付 微信的支付方式有以下几种,不同的支付方式适用于不同的支付场景,而今天要给大家讲的就是 小程序支付 方式 说到支付功能就要涉及到金钱交易,必定是有比较严格的规范及流程,如要求小程序 ...
- 微信支付踩坑合集:微信小程序支付失败是什么原因?
微信小程序开发的过程一定会遇到各种问题,最让人棘手的就是支付问题,因为没有支付做商城类似的小程序就没有办法完成最关键的一步.那么支付失败到底什么原因呢?一下子收集了几个错误类似,希望对你有帮助: No ...
最新文章
- 「 Luogu P2420 」 让我们异或吧
- OpenCV4.4.0+VS2017 环境配置
- Spring Boot 入门之缓存和 NoSQL 篇(四)
- 用于.NET Core的ORM
- 集合对象-“块数据”操作--其实是同一对象引用
- maven使用出现的错误
- Linux查找class类所在jar包
- 【高级】分表和分区的区别、分库分表介绍与区别
- 3842开关电源完整原理图_8大常见开关电源电路分析,让你项目设计更轻松!
- ASSERT(0) 详解
- Nginx 屏蔽ip地址的方法
- 分金币 (UVA 11300)
- 计算机硬件相关专业学校,计算机硬件相关专业有哪些
- 数据结构中的时间复杂度的计算
- java程序员转正述职报告PPT
- 八、Kubernetes 网络和负载均衡
- 优盘连接时显示参数错误请问咋才能修复
- 设备上报二进制数据在 IoT 平台解析实践
- DiskTrix UltimateDefrag(磁盘碎片整理软件) v6.0.22.0破解版
- 教育云盘在数字校园中的应用
热门文章
- 1、Neural Rendering
- 【网络安全】细分领域总览
- 计算机中华五岳说课稿,中国五岳 地理课前三分钟演讲.ppt
- Unity粒子特效场景视图下可见但游戏视图下不可见
- yyyy-MM-dd和YYYY-MM-dd格式化日期的区别你知道吗?
- 毕设java 电脑配件购物商城论文
- TM影像各波段及波段组合情况
- 【Blender】问题记录001--用grease pencil画线条时一节一节不连贯的原因
- Python3.5 使用 protobuf3.0.0.beta2
- 最全最详细的PHP面试题(带有答案)