18673179777
获取免费方案
电话咨询
QQ咨询
微信咨询
返回顶部
×

个人开发者必看:5步教你用微信小程序搭建自动收钱系统

想做微信小程序来收款,但一搜教程,要么是教你“注册个商户号就行”,要么是“调用wx.requestPayment”这种半截话。实际动手时,你会发现坑全藏在细节里——比如个人小程序能不能收款?境外主体怎么办?用户支付后钱到底进了谁的口袋?今天咱们就掰开揉碎,从零开始把这条路走通。

一、先搞清楚:你的小程序到底能不能收款?

微信小程序的收款能力,取决于你用的是微信支付商户号,而不是个人微信号的“收付款”。第一步就卡在“我注册了个小程序,但后台没有支付功能”——因为微信支付需要单独申请。

举个例子:你开了一家水果店,小程序里展示苹果、香蕉。用户下单后,如果他点击“支付”,钱直接进你的商户号账户(T+1到账),而不是进你的个人微信零钱。这里有个关键区别:个人小程序(主体为个人)无法申请微信支付,必须用企业、个体工商户、政府或媒体等组织资质。如果你是个人开发者,想练手的话,可以注册个体工商户(成本极低),或者用“小商店”这类模板(但自由度受限)。

还有个容易忽略的点:海外主体的小程序,目前微信支付支持境外商户号(比如香港的WeChat Pay商户),但流程和费率完全不同。如果你在海外做华人社区生意,建议直接用境内主体注册,否则后续退款、结算都会很痛苦。

二、实操:从0到1开通微信支付商户号

假设你已经有企业或个体工商户执照,咱们开始走流程。打开微信公众平台(mp.weixin.qq.com),登录你的小程序账号,左侧菜单找到“微信支付” -> “开通”。这里会跳转到商户平台,需要填写:经营类目(比如“电商平台”或“线下零售”)、营业执照照片、法人身份证、银行账户信息。

注意:经营类目不能乱选。比如你卖的是虚拟商品(课程、会员),就不能选“餐饮”,否则审核会被驳回,甚至后续触发风控。我见过一个做知识付费的朋友,选了“在线教育”,结果微信要求提供《办学许可证》——他根本没有,最后只能改成“其他服务”才通过。

审核通过后,你会得到一个商户号(一串数字,比如1234567890)。接下来需要在小程序后台绑定这个商户号:在“微信支付” -> “商户号管理”里,输入商户号并确认。这一步会忘:必须在小程序后台的“开发”->“开发设置”里,把“服务器域名”的白名单加上(尤其是api.mch.weixin.qq.com),否则支付请求会被拦截。

三、写代码:让用户能点“支付”按钮

现在开始写代码。微信小程序支付的核心是统一下单 + 调起支付。先看前端代码(以JavaScript为例):

// 用户点击“立即支付”按钮时
wx.request({
url: 'https://你的服务器域名/pay/unifiedOrder', // 你的后端接口
method: 'POST',
data: {
orderId: '订单号', // 由你生成,唯一
totalFee: 100, // 单位是分,所以100=1元
body: '水果套餐'
},
success: function(res) {
// 假设后端返回了prepay_id等参数
wx.requestPayment({
timeStamp: res.data.timeStamp,
nonceStr: res.data.nonceStr,
package: res.data.package, // 注意是字符串 "prepay_id=xxx"
signType: 'MD5',
paySign: res.data.paySign,
success: function(payRes) {
console.log('支付成功', payRes)
},
fail: function(err) {
console.log('支付失败', err)
}
})
}
})

看到没?前端只是发请求和调起支付,真正的签名、订单生成都在后端。很多新手犯的错是:在前端直接拼接签名参数,然后被微信驳回。因为sign(签名)必须用商户密钥在服务端生成,否则任何人都能伪造支付请求。

后端代码(以Node.js为例)怎么写?关键步骤:

1. 接收前端传来的orderId、totalFee、body。
2. 调用微信的统一下单API(URL:https://api.mch.weixin.qq.com/pay/unifiedorder),参数包括:appid(小程序ID)、mch_id(商户号)、nonce_str(随机字符串)、sign(签名)、body、out_trade_no(你的订单号)、total_fee、spbill_create_ip(用户IP)、notify_url(支付结果回调地址)、trade_type(固定为JSAPI)。
3. 微信返回prepay_id后,用这个ID生成调起支付所需的参数(timeStamp、nonceStr、package、signType、paySign)。
4. 把参数返回给前端。

注意:notify_url(回调地址)必须是公网可访问的,不能是localhost。推荐用云函数(比如微信云开发)或自己的服务器。如果回调地址不通,用户支付成功后,你的系统永远收不到通知,订单会一直显示“未支付”。

四、避坑指南:那些让你头疼的支付问题

问题1:用户支付成功,但小程序没收到回调。
原因通常是:你用的回调地址是HTTP而不是HTTPS(微信要求HTTPS),或者服务器防火墙屏蔽了微信的IP。解决方案:在微信商户平台(pay.weixin.qq.com)的“产品中心”->“开发配置”里,设置支付回调域名。另外,回调地址不能带参数,比如 https://你的域名/notify 可以,但 https://你的域名/notify?orderId=123 不行。

问题2:支付金额对不上。
比如用户支付了1元,但你收到的是0.99元。这通常是因为单位搞错了——微信支付以“分”为单位,如果你在前端传了“1”(代表1分),用户看到的就是0.01元。反过来,如果你在后台把“100”传成了“10000”,用户得付100元。建议在后端统一乘以100,前端只显示元。

问题3:退款怎么实现?
退款需要调用微信的申请退款API,但有个前提:你的商户号必须开通“退款”权限(默认是关闭的)。在商户平台 -> “产品中心” -> “退款配置”里开启。退款时,需要传入原订单的transaction_id(微信支付订单号)和退款金额。注意:退款金额不能大于原订单金额,且退款会占用你的商户号余额(如果余额不足,退款会失败)。

问题4:用户支付后,小程序怎么判断是否成功?
不要依赖前端的success回调(因为用户可能支付后立刻退出,或网络中断)。正确做法:以后端收到的notify回调为准。在回调里更新订单状态,然后用户下次进入小程序时,通过查询订单接口(比如wx.request查你的数据库)来显示状态。

五、进阶:如何让你的收款更安全?

觉得支付接口通了就万事大吉,但忽略了金额篡改风险。举个例子:恶意用户抓包修改前端请求,把totalFee改成1(分),然后支付0.01元买你的100元商品。怎么防?

方案:后端校验金额。在统一下单前,从你的数据库里查出这个商品的真实价格,对比前端传来的totalFee。如果对不上,直接拒绝下单。另外,不要在前端存储商户密钥,所有敏感操作都在后端完成。

另一个安全点是HTTPS。你的服务器必须用HTTPS,否则支付参数在传输过程中可能被劫持。微信小程序强制要求所有请求域名必须是HTTPS,所以这一步其实已经帮你卡住了。

最后,如果你用的是微信云开发(云函数+云数据库),支付流程会简化很多:云函数里直接调用微信支付的云调用接口(免去签名计算),而且云函数天然支持HTTPS。但云开发也有局限——比如不能自定义域名,退款需要额外配置。小团队或个人项目用云开发很省事,但大型项目建议还是自建后端。

六、扩展:除了直接收款,还能怎么玩?

微信小程序的支付能力不止“用户付钱给你”。比如:

- 付款码支付:如果你做线下门店,可以用小程序生成付款码,用户扫码支付(类似商超的扫码枪)。这需要调用wx.scanCode接口,然后调起支付。

- 合单支付:一个订单里既有商品又有运费,或者需要分账给多个商家(比如平台模式)。微信支付支持“分账”功能,但需要单独签约。

- 刷脸支付:如果你的设备支持摄像头,可以调用微信的刷脸支付接口(但需要额外申请资质)。

举个例子:一个社区团购小程序,团长收钱后,平台需要把部分钱分给供应商。这时候可以用“分账”API,在用户支付成功后,自动把80%给供应商,20%留给平台。注意:分账比例需要在商户平台配置,且每笔订单的分账上限有规定。

总之,开发微信小程序收款,核心是理解“商户号”和“统一下单”这两个概念。别被复杂的文档吓到,按步骤走:先申请资质,再写后端接口,最后调前端支付。遇到问题就查微信支付的“错误码文档”(比如INVALID_REQUEST通常是参数格式不对),多试几次就能通。如果实在搞不定,用微信官方提供的“支付测试工具”(在商户平台里)可以快速验证签名和参数。

上一篇
别让爱意只留在聊天框:用微信小程序,把心动做成视频给她看
下一篇
网站开发电话怎么找?专业网站建设公司哪个好?