0%

微信支付接入记录

选择你需要的支付产品

这里的支付产品是微信官方的说法,有以下几种:

  1. 付款码支付
  2. JSAPI支付
  3. Native支付
  4. APP支付
  5. H5支付
  6. 小程序支付
  7. 人脸支付

选择前需要知道这几种到底是什么,因为有官方文档,这里只做简要说明。

付款码支付

其实就是在超市结账时,收银员(或者自助收银机器)采用扫码设备扫描用户的手机上的条码完成支付的方式。付款用户不需要输入支付密码。

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提供了检查数据有效性的方法

不提供示意代码了,因为文档中提供了。