文章目录▼CloseOpen
- 现成源码怎么拿?先搞懂你需要的“基础配置包”
- 对接步骤别瞎试,按我踩过坑的流程走
- 第一步:后端先测“统一下单”接口
- 第二步:前端调起支付别乱改代码
- 最容易翻车的5个坑,我帮你把“雷”排好了
- 坑1:签名错误——90%是因为“参数顺序不对”
- 坑2:回调失败——不是地址错了,是“没返回正确的XML”
- 坑3:openid获取失败——前端没传code给后端
- 坑4:证书路径错误——PHP要填“绝对路径”
- 坑5:支付成功但订单没更新——后端没处理“回调通知”
- 现成的微信小程序支付源码里一般包含哪些内容?
- 对接微信小程序支付前,得先准备好什么东西?
- 支付时总提示“签名错误”,一般是哪里出问题了?
- 前端点了支付但弹不出支付框,可能是什么原因?
- 用户付了钱但订单显示“未支付”,这该怎么办?
- 小程序已经完成微信认证(个人主体不行,得是企业/个体工商户);
- 已经开通微信支付商户号(直接在小程序后台“微信支付”入口申请,1-3天就能批);
- 商户号已经绑定小程序AppID(在商户平台的“产品中心-AppID授权管理”里加,不然调不动支付接口)。
- 先填好“参数配置文件”——别让“手敲错误”坑你
- 对接步骤别跳步,按“先后端后前端”的顺序来
从商户号与AppID的关联、统一下单接口的参数填写,到前端调起支付的代码写法、后端回调的验证逻辑,每一步都配了具体代码片段和操作截图,新手也能跟着“复制-配置-测试”一步到位。更贴心的是,把大家常踩的“证书路径填错”“openid获取失败”“支付结果通知漏签”这些坑挨个拆解,告诉你怎么快速排查。
不管你是刚入门的开发者,还是想快速上线功能的小团队,不用啃官方文档,跟着这篇走,1小时就能把支付功能跑通——赶紧往下看,少走弯路!
你有没有过这种情况?想给小程序加支付功能,找了一堆源码要么缺这缺那,要么配置项像“天书”,调了一礼拜还是报“签名错误”“回调失败”?去年我帮楼下奶茶店做小程序时,就踩过一模一样的坑——一开始找的免费源码缺了证书路径配置,结果调试到凌晨2点才发现;后来又因为没搞懂“openid要和下单用户绑定”,导致用户付了钱订单还是“未支付”,差点被老板追着要说法。
今天我把自己踩过坑整理的“微信小程序支付对接包”和流程分享给你,不用懂复杂的支付逻辑,跟着做就能把支付功能跑通——而且我敢说,这是你能找到的“最省时间”的对接方法。
现成源码怎么拿?先搞懂你需要的“基础配置包”
别再乱搜“微信支付源码”了,你要的源码其实就3个部分:前端调起支付的JS代码、后端统一下单的服务端代码、参数配置示例文件。我把这些整理成了“傻瓜版包”,里面每一行代码都标了注释,比如前端的wx.requestPayment
方法里,timeStamp
要转成字符串、nonceStr
要和后端保持一致,这些细节我都帮你标好了——就像我帮奶茶店对接时,把“证书路径要填绝对路径”写在注释里,老板的兼职程序员看了直接就能改。
不过拿源码前,你得先确认自己有这3个“前置条件”:
我之前帮鲜花店对接时,就遇到过“商户号没绑定AppID”的情况——源码没问题,但就是调不起支付,后来翻了微信支付文档才发现,这一步是“隐形要求”,很多新手都漏了。
对接步骤别瞎试,按我踩过坑的流程走
其实支付对接就4步,但90%的人都在“参数配置”和“接口测试”上翻车。我把流程拆成了“能直接抄作业”的版本,你按顺序来绝对不会错:
源码里会有个config.js
(前端)或config.php
(后端)的文件,里面要填appid
(小程序ID)、mch_id
(商户号)、api_key
(API密钥)、notify_url
(回调地址)这4个核心参数。我帮你整理了“参数获取表”,直接对着找就行:
参数名 | 用途 | 获取路径 | 注意事项 |
---|---|---|---|
appid | 小程序唯一标识 | 小程序后台-设置-基本设置 | 必须和商户号绑定 |
mch_id | 微信支付商户号 | 商户平台-账户中心-商户信息 | 需开通“JSAPI支付”权限 |
api_key | API接口密钥 | 商户平台-账户中心-API安全 | 设置后别丢,重置会影响业务 |
notify_url | 支付结果回调地址 | 自行设置(需为HTTPS) | 测试用ngrok暴露本地服务 |
填参数时我 你“复制粘贴”,别手敲——我之前帮美甲店对接时,手敲mch_id
多打了一个0,结果统一下单接口一直返回“商户号无效”,查了2小时才发现。
支付对接的核心逻辑是:用户点支付→前端传用户信息给后端→后端调用微信“统一下单”接口拿prepay_id
→前端用prepay_id
调起支付→支付成功后微信通知后端改订单状态。我把步骤拆成了“能直接跟着做”的版本:
第一步:后端先测“统一下单”接口
不管你用PHP还是Python,先把后端代码里的参数填好,然后用Postman测一下——比如PHP的代码里,unifiedorder
方法要传body
(商品描述,比如“奶茶一杯”)、out_trade_no
(订单号,要唯一)、total_fee
(金额,单位分,比如10块钱就是100)、openid
(用户唯一标识)这些参数。
我帮奶茶店测试时,用Postman发了个请求,返回prepay_id
就说明后端没问题了——这一步过了,后面就成功了80%。
第二步:前端调起支付别乱改代码
前端的wx.requestPayment
方法里,参数要严格按微信的要求来:
wx.requestPayment({
timeStamp: '', // 后端返回的时间戳(字符串!)
nonceStr: '', // 后端返回的随机字符串
package: 'prepay_id=' + prepay_id, // 必须加prepay_id=前缀
signType: 'MD5', // 和后端签名方式一致
paySign: '', // 后端生成的支付签名
success(res) { console.log('支付成功', res) },
fail(res) { console.log('支付失败', res) }
})
我之前帮鲜花店调前端时,一开始把package
写成了prepay_id
,结果支付框弹不出来——后来看微信文档才知道,必须加prepay_id=
前缀,这细节真的能坑死新手。
最容易翻车的5个坑,我帮你把“雷”排好了
我对接过5个小程序支付, 了最容易翻车的5个坑,你直接避开就行:
坑1:签名错误——90%是因为“参数顺序不对”
微信的签名规则是“按参数名ASCII码从小到大排序,再拼接api_key做MD5”。我帮美甲店对接时,一开始把total_fee
放在body
前面,结果签名一直错——后来用微信的“签名验证工具”(https://pay.weixin.qq.com/wiki/doc/apiv3/tools/certificates_and_keys.shtml?nofollow)查了一下,发现参数顺序错了,调整后立刻就好了。
坑2:回调失败——不是地址错了,是“没返回正确的XML”
微信支付成功后会给notify_url
发通知,你得返回才能算成功。我帮奶茶店对接时,后端返回了JSON,结果微信一直重试通知,后来改成XML就好了。
坑3:openid获取失败——前端没传code
给后端
openid
是用户在小程序里的唯一标识,得用前端的wx.login
获取code
,再传给后端调用auth.code2Session
接口换。我帮鲜花店对接时,前端忘了传code
,结果后端一直拿不到openid
,统一下单接口返回“openid无效”——后来加了code
传递就好了。
坑4:证书路径错误——PHP要填“绝对路径”
如果后端用PHP,curl_setopt
里的证书路径要填绝对路径,比如/www/cert/apiclient_cert.pem
,别填相对路径./cert/apiclient_cert.pem
——我帮美甲店对接时,一开始填了相对路径,结果curl一直报“证书验证失败”,改绝对路径就好了。
坑5:支付成功但订单没更新——后端没处理“回调通知”
很多人以为“前端收到success就完事了”,其实得等微信的回调通知才能改订单状态——我帮奶茶店对接时,一开始没处理回调,结果用户付了钱,订单还是“未支付”,后来加了回调处理逻辑,把订单状态改成“已支付”就好了。
按我这个流程走,你最多花2小时就能把支付功能跑通——就像我帮奶茶店做的那样,老板的兼职程序员跟着做,下午3点开始,5点就上线了支付功能。
如果你按这些方法试了,遇到问题可以评论区问我——毕竟我踩过的坑,不想让你再踩一遍。要是你想要我整理的“傻瓜版源码包”,也可以留个言,我私发给你!
现成的微信小程序支付源码里一般包含哪些内容?
主要是三部分:前端调起支付的JS代码、后端统一下单的服务端代码,还有参数配置示例文件。我整理的源码包里每一行都加了注释,比如前端wx.requestPayment里timeStamp要转成字符串、nonceStr得和后端保持一致,这些细节我都标清楚了——就像之前帮奶茶店对接时,把“证书路径要填绝对路径”写在注释里,兼职程序员看了直接就能改。
不过要注意,源码只是“半成品”,你得自己填对商户号、AppID这些核心参数,不然拿到手也用不了。
对接微信小程序支付前,得先准备好什么东西?
三个前置条件必须有:首先小程序得是企业或个体工商户主体(个人号没法接支付),而且得完成微信认证;其次要开通微信支付商户号,直接在小程序后台“微信支付”入口申请就行,1-3天能批下来;最后得把商户号和小程序AppID绑定——在商户平台的“产品中心-AppID授权管理”里加,我之前帮鲜花店对接时就漏了这步,结果源码没问题但调不起支付,后来翻文档才发现这是“隐形要求”。
这些没准备好,再好用的源码也对接不上。
支付时总提示“签名错误”,一般是哪里出问题了?
90%的情况是参数顺序不对!微信的签名规则是“按参数名的ASCII码从小到大排序,再拼接api_key做MD5加密”。我之前帮美甲店对接时,把total_fee(金额)放在body(商品描述)前面,结果签名一直错,后来用微信的“签名验证工具”(https://pay.weixin.qq.com/wiki/doc/apiv3/tools/certificates_and_keys.shtml?nofollow)查了才发现问题——你要是碰到签名错,先去这个工具里验一下,比自己瞎试管用。
另外要注意,签名的方式得和后端一致,比如后端用MD5,前端signType也得选MD5,别一端用SHA256一端用MD5。
前端点了支付但弹不出支付框,可能是什么原因?
先查两个细节:一是前端wx.requestPayment里的package参数,必须写成“prepay_id=xxx”(xxx是后端返回的prepay_id),我之前帮鲜花店调前端时,一开始直接写prepay_id,结果支付框根本弹不出来,加了“prepay_id=”前缀才好;二是openid是不是对的——openid得是当前下单用户的,要是你传了别的用户的openid,微信识别不了,也调不起支付。
还有一种可能是商户号没开通JSAPI支付权限,去商户平台的“产品中心”看看,没开的话得先申请。
用户付了钱但订单显示“未支付”,这该怎么办?
大概率是你没处理微信的“支付结果回调通知”!很多人以为前端收到success就完事了,其实得等微信把支付结果POST到你后端的notify_url,你得在后端写代码接收这个通知,然后把订单状态改成“已支付”。我之前帮奶茶店对接时就犯过这错,用户付了钱订单还是“未支付”,后来加了回调处理逻辑,把订单状态更新的代码写上才解决。
要注意,回调地址得是HTTPS的,测试的时候可以用ngrok把本地服务暴露成HTTPS地址,别用HTTP,不然微信发不了通知。