从事电商平台工作的朋友都知道,支付服务是不可缺少的一部分,今天我们先从支付服务的接入和实现讲起。目前在国内,几乎90%的中小企业的支付系统都离不开微信支付和支付宝。那么大家应该思考一下,为什么微信支付和支付宝是大部分企业接入的首选呢?其实这个问题大部分朋友应该都很清楚,说白了就是他们拥有巨大的用户流量,目前微信在国内的用户已经超过10亿,支付宝接近8亿,这么大的用户规模,你会选择其他第三方支付吗(微博钱包、财付通、快钱等)?作为普通消费者,大家都希望方便快捷,谁会为了在一个平台上买东西,去下载或者开通其他服务呢,除非你给他诱人的优惠呢?今天我们来聊聊微信支付的接入和实现。
微信支付接入
我们先来看一下微信支付目前提供的支付方式(如上图),本次我们只讲原生支付(扫码支付)、App支付、小程序支付三种。
1. 准备
开发前需要申请商户版微信公众号或者微信小程序(目前只有商户版公众号才可以使用微信支付),然后开通微信支付功能并进行相应配置。
申请开通微信公众号和开通微信支付(商户)需要等待审核,一般需要5个工作日左右,开通成功后需要获取配置信息:
注:为公众账号ID和支付商户ID。
其中,和可以在公众平台找到,key可以在商户平台找到,特别是key(ie)必须在商户平台设置。在本项目中,这些配置都是通过的方式放在***--根路径下的。
在编码之前您还需要登录微信商户平台配置支付回调URL,该URL作为支付成功后回调接口的域名,如配置的URL为:,您的支付回调路径可以设置为:。
2. 编码阶段
在开始编码之前,我们首先要了解微信支付的连接以及支付业务流程。
扫码支付业务流程:
App支付业务流程:
小程序支付业务流程:
从官方的业务流程图中,我们可以大致总结出对接流程如下:
1、发起支付前,在自身商户后台下订单,生成商户订单信息;
2、根据对应支付方式的参数要求,封装相应的所需参数,调用微信提供的统一下单API接口进行下单;
3、统一下单成功,微信后端返回相应的响应数据,返回数据类型如下:
a.扫描二维码下单后,返回生成二维码图片的链接;
b.APP和小程序下单后都会返回预付款id,即:
4、如果要扫码支付,需要生成二维码展示在前端页面,供客户扫码支付。如果要APP或者小程序支付,后端只需要将需要的参数传给APP和小程序即可。APP通过调用SDK发起支付,小程序通过调用微信的JS发起支付。
5、客户支付成功后,客户微信端会展示支付结果信息,同时微信后台会异步调用商户后台的回调接口(回调API接口在统一订单中作为订单参数),更新商户系统的支付订单状态。
看到这里你会发现这三种方式的基本业务流程是差不多的,只是不同的支付方式调用微信应用支付功能的方式不同,所以下单成功后返回的参数也不同。
接口层:
接口方法:
实现类代码(微信App支付):
统一排序方法(在实现类中):
统一下单完成后微信后台会以XML形式返回相应参数,统一下单成功后返回XML示例:
所以我们需要将统一下单xml解析成map(在上面的统一下单方法中已经转换成map了),并判断订单状态,如果返回值是OK,则说明统一下单成功,然后封装好相应的参数返回给前端。
前端处理下单成功后Java后端返回的参数,并调用微信应用的支付服务。注意二维码支付是使用下单成功后微信后端生成的二维码展示给客户的。二维码可以由前端生成,也可以由Java后端生成然后以输出流的形式输出到网页上(强烈不建议在Java端生成二维码图片然后保存到文件服务器再显示)。
当客户在手机上调出微信支付服务并输入密码支付成功后,客户手机上的微信就会收到支付成功的支付信息,同时微信后台也会异步调用商户后台接口,这个回调地址就是我们在统一下单方法中传递的字段的参数值。
以下是回调接口代码:
至此,所有的编码工作已经完成。
3.测试(扫码支付)
选择您要购买的产品,下订单,然后发起付款。
点击“前往支付”按钮,跳转至二维码支付页面:
扫描二维码支付后,显示二维码的页面会跳转到支付成功页面(有微信支付成功标识),有3s倒计时,然后跳转至“订单详情”页面。