一、配置
商户号
微信支付功能先要申请微信(企业)"大众平台,然后开通企业"大众年夜众平台付功能。下图为微信(企业)公众平台页面,可以看到商户号等信息
微信公众号APPID
从开拓-基本配置中获取APPID
2、微信商户平台干系配置
微信商户平台干系配置
由于微信"大众平台调度,"大众平台微信支付公众号支付授权目录、扫码支付回调URL配置入口于2017年8月1日迁移至商户平台(pay.weixin.qq.com),以是微信支付配置和干系信息要登录商户平台才能拿到。(估计是微信想要把"大众年夜众号的管理功能和开拓功能分离)
回调链接
从微信商户平台的产品中央-开拓配置-支付配置配置扫码回调链接(扫码回调链接便是你项目中微信支付回调函数名称,这里须要的是加了项目域名的函数全称,必须担保能从公网访问。为什么须要一个回调函数呢?这属于微信支付的回调机制:当用户利用微信支付完成后,你从本地是无法得知是否支付成功的,而微信这边在获取到支付完成的状态后,主动去访问你所设置的回调函数地址,将支付状态等干系信息返回,我们只要在回调函数中止定支付状态,就能够便捷的进行下一步操作!
)
设置API密钥
下载微信sdk
微信sdk是微信官方给出的微信支付demo,个中有很多好用的工具类,demo本身也可以为我们的支付接口开拓供应参考(https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1)
把sdk导入到项目中
二、开拓
紧张业务流程
紧张业务流程
(1)商户后台系统根据用户选购的商品天生订单。
(2)用户确认支付后调用微信支付【统一下单API】天生预支付交易;
(3)微信支付系统收到要求后天生预支付交易单,并返复活意营业会话的二维码链接code_url(code_url便是微信支付地址)。
(4)商户后台系统根据返回的code_url天生二维码(用第三方插件天生二维码)。
(5)用户打开微信“扫一扫”扫描二维码,微信客户端将扫码内容发送到微信支付系统。
(6)微信支付系统收到客户端要求,验证链接有效性后发起用户支付,哀求用户授权。
(7)用户在微信客户端输入密码,确认支付后,微信客户端提交授权。
(8)微信支付系统根据用户授权完成支付交易。
(9)微信支付系统完成支付交易后给微信客户端返复活意营业结果,并将交易结果通过短信、微信提示用户。微信客户端展示支付交易结果页面。
(10)微信支付系统通过发送异步关照商户后台系统支付结果。商户后台系统需回答吸收情形,关照微信后台系统不再发送该单的支付关照。
这是官方给出的文档,这里再梳理一下。纯挚做PC端扫一扫开拓很大略,紧张是向微信支付的【统一下单API】要求,发送订单信息和署名(署名比较麻烦,可能前期测试会报多次署名缺点,不过官方SDK中有天生署名的方法,当然,自己也可以写),要求成功微信支付返回二维码链接code_url,把稳这是微信支付的链接,不是二维码!
不是二维码!
不是二维码!
二维码须要自己天生,不要直接就把code_url挂在页面上~
要求【统一下单API】的参数列表
好了,上代码~
与支付无关的业务逻辑
与支付无关的业务逻辑
这里我单独创建一个类PayController来写自己的业务逻辑,天生业务订单啊,业务订单保存在数据库啊,查询订单信息啊,验证是否支付完成啊等等,我的业务逻辑比较大略,仅供参考~
微信支付逻辑
微信支付逻辑
1、天生署名,然后打包成【统一下单API】哀求格式的订单(参数列表),微信支付哀求为XMl格式
2、调用【统一下单API】微信接口,将我们打包好XMl格式的参数列表发送给【统一下单接口】,调用成功会吸收到XMl格式的返回值,解析成我们须要的格式,判断是否要求 成功,成功的话是会返回code_url的
3、然后我们把code_url天生二维码展现给用户就OK了!
4、用户支付完成后,微信会访问我们的回调接口,根据返回的结果修正数据库支付状态
要求【统一下单API】返回参数列表
将微信支付所须要的固定参数封装到类WXpayConfig中
封装固定参数
WXPayController,主掌握器
如果要求【统一下单接口】的参数精确,署名也没有报错,那我们就能成功获取到code_url,从而天生二维码,让用户扫码支付了。
天生二维码工具类QRCodeUtil
利用了第三方工具类zxing,这里用到的zxing依赖包请自行下载
前端轮询
当用户支付完成后,微信成功调用了我们的回调方法,数据库订单状态修正为“已支付”,Java后真个事情就基本完成了,那前端怎么知道用户完成了支付呢?现在普遍的办法是,前端写方法轮询支付状态,限定韶光内查询到支付状态为“已支付”就进行下一步操作,限定韶光后未支付就做支付超时的操作。本项目用户查询支付状态的代码已经写在了之前“与支付无关的业务逻辑”中了~