近半年来工作主要是做支付平台,近期参与了部分微信公众号开发的工作。
由于做的是贷款类项目,原来接入的主动还款方式为代扣,目前线上已经遇到了一些问题,需要拓展支付渠道用户客户还款。所以预研了一下微信支付,用于客户主动还款。
由于只做了预研,后端并未做设计,只是完成了掉起微信支付界面,并成功付款。具体设计详细步骤如果接入了微信支付再来补充。
同时吐槽一句,微信支付的文档真的不咋地!!!(据说部分内容是产品经理写的→_→)
调起微信支付主要包括三个步骤
- 调用统一下单接口生成请求==预支付交易会话标识==
- 请求参数MD5签名(可能是自己接触OpenAPI太少,没看懂文档里面有这个步骤)
- 调用微信jssdk支付方法,唤起微信支付框
开发前需要搭建好微信支付开发环境.
相信需要接入微信支付,微信公众平台的开发环境已经准备好。
微信开发需要在商户中按照https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_3进行配置
同时自己需有商户信息
商户号:
秘钥:**
微信公众号信息
AppID(应用ID):**** AppSecret(应用密钥):******
下载微信提供的java 版本DEMO
java版本demo内容还是比较齐全,基本整合入工程就可以使用。如果项目中使用spring的话,需稍作加工
详细介绍下这三个步骤,及注意事项
- 调用统一下单
采用服务端直接调用http请求至微信服务器,获取 prepay_id
java代码如下
|
|
项目中使用了使用了spring,所以方法需要在spring中进行注册
WeChatPayService 如下
基本也是从Demo中拷贝出来,然后加入自己的参数
|
|
- 请求参数MD5签名
这个步骤在微信支付流程文档中的第6步,只是简单写了一句生成JSAPI页面调用的支付参数并签名,这个步骤很容易被忽略
签名代码如下,主要还是使用DEMO中的WXPayUtil进行签名,WXPayUtil已经对数据参数进行排序,并计算,同时还支持shadow
|
|
- 调用微信jssdk支付方法,唤起微信支付框
调用提供的jssdk方法在进入页面后直接唤起微信支付框,如果没有第2个步骤,直接将第一步得到的加密串传入jssdk中将会报错“签名错误”
|
|
进入页面成功唤起微信支付框,支付成功后将执行回调方法中的alert,至此微信支付成功。
同时,这次只是前台成功唤起了支付的界面,微信支付接入最主要的还是后端支付平台的设计。主要有以下几个点需要注意
- 微信支付DEMO与框架的整合,使用spring时候需要注意原来Service修改为多实例 @Scope(BeanDefinition.SCOPE_PROTOTYPE)
@Component - 微信支付的成功不能以前台通知为准,一定要在以微信推送的后台通知为准,放可进入账务系统进行入账。