微信支付开发以及踩过的坑
记录公众号微信支付开发以及踩过的坑
支付开发文档链接:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1
一. 开发配置
1) 授权目录(及其重要)
公众号后台/微信支付里配置
2) 网页授权域名(获取权限时需要) 公众号设置/功能设置
填写服务器的域名(请注意www. redkidedu.com 和redkidedu.com)也就是加www和不加www, 微信是严格验证的, 在后面获取用户权限时需要回调地址, 这个地址的域名和你所填写的域名必须一样, 否则报redirect_url参数错误
3) 白名单设置(获取access_token) 基本配置/ip白名单
详见微信公众号支付的开发配置
链接: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_3
二. 简要说明
调用支付接口
可以看到我们需要这个统一下单接口中返回的参数prepay_id, 其它参数可以通过方法生成或者是固定的公众号参数
接下来看统一下单接口:
接口地址: https://api.mch.weixin.qq.com/pay/unifiedorder
把所有所必须的参数找出来, 文档写得很清楚. 大概需要12个参数
其中注意的是openid 以及sign(签名)这两个参数, 其中sign是由前面11个参数根据文档中指定的算法生成得来的
这里说说openid的获取 : 参考链接如下
http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
从该链接找到微信网页开发/微信网页授权
这里便有获取openid的参考文档
所有的参数获取完毕之后, 就可以使用微信官方给的那段支付代码支付了
注意: 页面一定要wx.config, 笔者第一次接触这个根本不知道还有这回事, 公众号支付文档就给了那段支付的代码, 然后我就莫名的一直失败,提示jssdk/pay未注册. 经过查看资料得知是这个缘故
三. 坑
1) 获取openid时踩了redirect_url的坑(域名一定完全相同, www惹的祸, 哭晕在厕所)
2) 在生成wx.config所需参数signature时 , 在本机测试时因为域名不一样, url报invalid url domain, 那既然如此就把url写死吧。 然后就报invalid signature。因为笔者已经用那个在线的测试工具测了生成signature的算法, 就猜想应该是写死的地址与实际的地址不符报的错, 想了下那就修改hosts文件吧, 将域名指向我本机。这次终于ok了
3) 支付时总是报当前页面url未注册
分两种情况:
3.1) 如果所报url确实是你当前支付的url, 那么基本可以确定就是你授权目录配置错误了
http://redkidedu.com/ener/wx/pay/wxpay 这是我的支付页面controller地址
http://redkidedu.com/ener/wx/pay/ 那么我只需配到上一级即可, 以/结尾, 因为是一个目录, 不需要全部具体.
3.2) 如果所报url地址不是你当前支付的url, 那么可能就是参数什么的不对了或者wx.config没加. 要具体盘查原因.
支付成功之后的图片(走到这里太心塞了)
代码文件:
PayController.java (支付controller)
Token.java (wx.config的一些参数获取)
Constant.java (一些常量, 比如公众号的appid, 等)
PayUtil.java (工具类, 生成支付接口的参数)
MD5Util.java (工具类MD5加密算法)
HttpClientUtil.java (工具类执行get, post方法)
pay.jsp 支付页面
card.jsp 相当于订单页面(用来测试)
card.jsp----PayController(生成参数)---------pay.jsp--------支付
代码链接:https://github.com/waston1997/wechatPay
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构