文章包括以下内容
- 支付场景简介
- 第一步:申请微信支付申请(注册微信支付商户号)
- 第二步:获取商户号的支付参数
- 第三步:SDK下载(java版本)
- 第四步:支付过程了解
- 第五步:开始设计和编码
支付场景简介
目前微信支付有6个场景,分别是以下6个(2019-04-06)
- 我有线下场所
- 我有公众号
- 我有小程序
- 我有pc网站
- 我有App
- 我有企业微信
https://pay.weixin.qq.com/static/applyment_guide/applyment_index.shtml
第一步:申请微信支付申请(注册微信支付商户号)
这一步完成后那么就拥有了支付接口权限了。
我的支付场景是公众号支付,所以首先你先要有一个公众号。有了公众号之后就可以申请付款码支付和JSAPI支付产品了,我习惯成这个产品为支付接口。也就是有了2个支付接口权限了,
- 根据自身的属性申请准备对应的申请材料
- 交申请费用(目前几百就行了)
- 3个申请流程
https://pay.weixin.qq.com/static/applyment_guide/applyment_detail_public.shtml
第二步:获取商户号的支付参数
支付参数都是登录商户号页面里面获取的,参数用于对接用
需要4参数:
- appid(appid)
- mchid(商户id)
- key(支付key)
- certPath(证书路径)
说明:以上参数是sdk需要的参数
第三步:SDK下载(java版本)
首先下载微信支付sdk,我选择的是java开发
下载地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
解压之后的目录是这样的
文件说明
src:源代码目录
pom.xml:该库依赖的第三库
README.md:微信提供的示例,这个一定要打开看看,里面有关于怎么使用这个sdk的例子。
把下载下来的代码引入到工程下目录是这样的
第四步:支付过程了解
对应的微信支付文档地址:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_3
下面这个时序图是从用户下单到支付完成过程,涉及的应用包括微信客户端,商户app客户端,上后后台系统,微信支付系统。
大概的过程是这样的
- 用户打开商户系统选择商品下单,这时候商户系统后台生成订单和订单明细,记录到数据库中(购物车)
- 用户向商户系统发送支付请求(带上订单id)
- 商户系统系统根据订单id计算金额等一些信息(收集一些支付参数)
- 向微信发起支付请求(生成预支付订单),并且返回预支付参数(用于调起微信支付界面)
- 商户系统接收微信系统的支付结果推送。
- 商户系统根据推送结果更新订单状态
基本上我们关注的是商户系统的开发,比如购物车(生成订单和订单明细),更新订单支付状态这些功能点了
第五步:开始设计和编码
了解以上微信支付的过程后接下来要编码就简单多了,
首先我们需要有个订单和订单明细表,如customer_order,customer_order_detail,
customer_order主要的字段包括:
字段名称 | 类型 | 说明 |
id | string | |
pay_time | datatime | 支付时间 |
total_fee | int | 订单金额(单位:分) |
customer_id | string | 用户id |
order_state | string | 订单状态 |
customer_order_detail主要字段包括:
字段名称 | 类型 | 说明 |
id | string | |
order_id | string | 订单主键 |
good_id | string | 商品id |
count | int | 商品数量 |
unit_price | int | 单价(分) |
调用微信统一支付接口代码
这里要注意的就是返回的结果中要有个对参数进行签名,sdk中提供的是扫描支付号线更没有加入最后一行的签名,我这里遇到了一坑花了好长时间,其实时序图中已经写明了要进行签名,所以吸取个教训,一定要看清楚文档。
拉起微信支付界面
这里需要利用上一步的参数,然后调用微信内置浏览器的函数拉起微信支付,所以这里一定要在微信内打开才能拉起支付,在别的手机浏览器或者电脑浏览器打开是不行的。
如果程序正常调用该函数应该会拉起微信支付界面,这里值得说下的是维系貌似有提供沙箱模式给开发者测试用的,但是没必要开发过程中可以先把金额调整1分钱就行了,就像下图这样。真实环境开干啊。
最后一步:更新支付状态(订单状态)
这里需要说下在调用预支付(统一支付接口)的时候有个参数是设置回调的连接,notify_url,这个连接是用户支付之后微信用这个链接来告诉你支付结果的,这里要注意更新订单的时候要判断下微信是否已经支付过了(判重),好像微信不止推送一次的,如果订单不止未支付和已支付2个状态那么一定要做一下判重。
以上就是基本的支付流程了,我遇到的问题大概就是支付参数获取麻烦(商户号不是我的),和少了次签名,导致花了好多时间。
完毕,谢谢大家