用Java怎么实现微信支付?
2023-04-03 · 百度认证:重庆猪八戒网络有限公司官方账号
技术栈SpringbootjavaXML(微信在http协议中数据传输方案)MD5签名微信支付术语openid(OpenID是公众号一对一对应用户身份的标识)app_id(公众号id,登录微信公众号_开发_基本配置中获得;)key(收款商户后台进行配置,登录微信商户平台_账户中心_API安全-设置秘钥,设置32位key值;)mch_id(收款商家商户号;)certPath(API证书,登录微信商户平台_账户中心-API安全-下载证书)后端流程
服务端需要的核心操作,总共分为以下几步:
统一下单前端调起微信支付必要参数(需加密)订单结果主动通知(回调接口)查询订单结果结束订单支付接口(关闭订单,支付订单关闭)代码微信总共支持多种语言的sdk,在官网可以下载例子,java程序也可以引入微信支付的sdk包,但是github上的sdk已经很久没有更新了,最好的选择,也是我的选择,在官网上下载sdk项目,将其中所有java类copy到自己的项目中.
官网sdk下载目录链接:商户平台首页
微信sdk下载根据微信sdk生成配置类WXPayConfig创建IWxPayConfig.class,继承sdkWXPayConfig.class,实现sdk中部分抽象方法,读取本地证书,加载到配置类中.packagecore.com.chidori.wxpay;
发起统一下单AND前端调起微信支付必要参数回调结果处理核心是支付订单回调时,需校验加密签名是否匹配,防止出现模拟成功通知
注意点统一下单的签名和后续前端拉取微信支付的签名需要统一,也就是都采用MD5加密,如果2者不同,会导致前端拉取微信支付fail,这是一个巨大的坑,因为这个原因调试了好久,微信在文档里没有明确标出统一下单的签名校验方式需要和前端拉取微信支付的签名校验保持一致.微信sdk里的源码需要针对这个问题调整一下,调整如下:WXPay类需要修改下加密判断,在WXPay构造方法中,调整如下
结束语做完以后,微信支付的后端逻辑还是很清晰的,但是在开发过程中很煎熬,不清楚每个专业术语在微信哪里配置,加密方式乱的很