Node.js 接入
本页是 Node.js(Express)商户的完整接入教程,五步走完就能收款,代码都可以整段照抄。 读完本页就能完成接入,其他页面当参考手册,用到再翻。
第一步:确认手里有这些
安装(要求 Node.js ≥ 20):
api_secret 放环境变量或配置中心,不要写进代码,不要提交到代码仓库。
第二步:初始化
方法名、参数名、返回字段都和 HTTP 报文、Python SDK 一字不差(snake_case),对着接口文档就能核对。
第三步:服务端三个路由
充值功能在服务端就是三个路由:下单、收回调、给前端查状态。以下 Express 代码可直接粘贴:
不要全局挂 app.use(express.json())。webhook 的签名针对请求体原文,全局 JSON
中间件会把 body 提前消费掉,导致验签必然失败。像上面这样按路由挂中间件:业务路由用
express.json(),webhook 路由用 express.raw()。这是 Node 侧最常踩的一个坑。
其他框架取原文的方式:Koa 用 raw-body,Nest 开启 rawBody: true,
Next.js App Router 用 await request.text()。
第四步:前端充值页
前端要做的只有两件事:展示 pay_url、轮询自家后端的订单状态。两条渠道的 pay_url 用法不同:
支付宝给的是一个可嵌入的网页,放 iframe 就行;银商聚合码给的是二维码内容,要用二维码库
渲染成码图(放 iframe 会白屏,电脑浏览器直接打开会提示不支持)。按后端返回的 channel 分支即可:
要点:支付完成时 PC 页面不会收到任何事件,靠的就是这个轮询;到账的依据是你后端的 订单状态(由 webhook 驱动),不是支付页的跳转。
银商聚合码的两点说明
一张码微信、支付宝、云闪付都能扫,用哪个钱包由用户扫码的 App 决定。回调、查单、退款和 支付宝渠道完全一致,服务端不用做任何额外处理。
页面在微信里打开(公众号菜单、聊天链接)时展示二维码是没法付的——改传
pay_mode: 'redirect'(可带 return_url),拿到的 pay_url 直接 location.href
整页跳过去,银商收银台会唤起微信支付,你不需要有自己的公众号。
参数细节与微信内完整示例见发起支付。
第五步:上线前核对
按 联调与上线 的用例走一遍(真实支付 0.01 元,验完退款收回),每步预期如下:
本地开发收不到回调时:回调地址需公网可达(内网穿透),排查前先用查单接口确认支付 本身是否成功。遇到任何报错,直接查常见问题排查,按症状对号入座。