用Java怎么实现微信支付?

 我来答
猪八戒网
2023-06-06 · 百度认证:重庆猪八戒网络有限公司官方账号
猪八戒网
猪八戒网(zbj.com)创建于2006年,现已形成猪八戒网、天蓬网和线下八戒工场的“双平台+一社区”服务模式,是中国领先的人才共享平台。
向TA提问
展开全部

技术栈

Springboot

java

XML(微信在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构造方法中,调整如下

结束语

做完以后,微信支付的后端逻辑还是很清晰的,但是在开发过程中很煎熬,不清楚每个专业术语在微信哪里配置,加密方式乱的很

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式