选择你需要的支付产品
这里的支付产品是微信官方的说法,有以下几种:
- 付款码支付
- JSAPI支付
- Native支付
- APP支付
- H5支付
- 小程序支付
- 人脸支付
选择前需要知道这几种到底是什么,因为有官方文档,这里只做简要说明。
付款码支付
其实就是在超市结账时,收银员(或者自助收银机器)采用扫码设备扫描用户的手机上的条码完成支付的方式。付款用户不需要输入支付密码。
JSAPI支付
适用场景是公众号内部。
Native支付
需要生成一张二维码图片,用户需要用微信扫描该二维码,扫描后,显示付款金额和付款项目,用户输入支付密码后完成支付。
很类似在小食杂店扫描店铺内张贴的二维码图片支付,区别是金额是否由付款用户输入。
APP支付
望文生义,就是在APP中调用微信支付。
H5支付
适用于在手机浏览器环境内进行微信支付。
小程序支付
在微信小程序内支付。
人脸支付
最新的支付方式,2020新冠肺炎疫情期间,戴口罩是必须的,微信也关闭了这项支付渠道。
Native支付实现选择
根据以上说述的各种支付产品和自身的业务需求,我们需要进行Native支付的开发。
官方文档中Native支付有两种时序,第二种实现起来更简单。
在第二种方法中,一次准备好所有的请求数据,从服务器获得交易url,据此生成二维码,用户扫码完成交易。微信支付服务器通知后端交易结果,根据交易结果对订单做处理。
二维码生成可在前端或者后端进行。
业务中的支付时序
说明
- 业务服务器和支付服务器可以合并
- 支付服务器操作订单信息,订单信息对业务服务器只读,避免多头操作
- 订单从创建到完成要经历创建、追加支付信息、修改支付状态三个步骤
- 一个订单支付地址只在一定时间内有效
- 在有效期内,不能重复调用统一支付接口
- 因为前面两点,获得支付地址等信息后,应该将其保存,因为用户支付的行为是异步发生的
- 调用统一支付接口有一个参数指定接收付款结果通知的地址,该地址对应的服务应由开发者实现
- 在微信支付的管理后台也可以设置前一个地址,但不清楚二者如果不一致会如何
- 支付完成后,用户会得到反馈,微信支付服务器只能通告上述的地址
- 收到支付通知后要正确响应,否则会多次收到通知
- 对于支付通知应该做内容检查,不要轻易就做支付结果的修改操作
- 这里收到支付通知,只做了响应,不做支付结果的修改,紧接着主动询问订单支付情况,根据返回结果修改订单支付状态
实现步骤
开通微信支付和设置
开通支付无需多言,开通后需要给开发人员提供如下内容:
- APPID(对应接受支付的账号主体)
- 微信支付商户号(对应接受支付的账号主体)
- API密钥(交易过程中加密使用)
阅读开发文档
阅读官方开发文档,这里把相关要点整理如下:
- 协议接口需要支持https
- 以http的POST方式提交
- 收发数据都是XML格式
- 官方提供java、php、.net版本的sdk
- 文档中的一系列接口,发送前需要使用API密钥加密,必要时,收到的内容需要根据API密钥进行验证
- 具体到某一个接口,仔细看文档,按需传参数即可
具体实现细节
引用相关sdk
尽管maven上有相应的项目,但是还是采用官方的为好,参看这篇,我采用的方式下载官方的项目并构建,然后在自己的项目中引用它。
了解sdk的作用
建议首先阅读改项目的ReadMe文档。
这里只说和本次开发相关的几点:
- sdk提供了map转xml的功能,方便参数设置
- sdk提供了生成随机字符串的功能
- sdk提供了生成签名的方法
- sdk提供了检查数据有效性的方法
不提供示意代码了,因为文档中提供了。