小程序(登录 / 支付 / 订阅消息)
中台已为小程序预留账号类型与接口。接入一个小程序只需四步:后台登记账号、商户平台关联 AppID、 小程序后台加合法域名、绑开放平台拿 unionid。
接入前置
| 动作 | 在哪做 | 注意 |
|---|---|---|
| 登记小程序账号 | 中台后台「微信账号」,类型 miniprogram | AppID 与 AppSecret 都填这里 |
| 关联商户号 | 商户平台 → 产品中心 → APPID 账号管理 | 主体一致时公众平台点确认即可;不一致要签《联合运营承诺函》(1–3 工作日审核); 申请单 7 天失效、绑定后不可解绑 |
| 绑开放平台 | 微信开放平台 → 管理中心 | 不绑就没有 unionid,服务号与小程序认不出同一个人 |
| 服务器合法域名 | 小程序后台 → 开发管理 → 服务器域名 | request 域名加 https://wx.onzx.cn;每月限改 5 次,一次配齐;必须 https 且已备案 |
| 订阅消息模板 | 小程序后台 → 订阅消息 | 选类目模板,模板 ID 填进中台「消息模板」,channel 选 mp_subscribe |
登录:用 code 换身份
// 小程序端:只把 code 交给自己的站点服务端,密钥绝不进小程序包
wx.login({ success: r => myFetch('/site/mp-login', { code: r.code }) })
// 站点服务端 → 中台
POST https://wx.onzx.cn/api/v1/miniprogram/login
{ "code": "081abc…", "profile": "mp" }
→ { "ok": true, "data": { "openid": "oMP…", "unionid": "uX…", "identity_id": 44, "session_key": "…" } }
小程序的 openid 与公众号的 openid 不是同一个值。同一个人两边也不同,只能靠
unionid 认人。
业务账号的唯一键应当是 unionid(有则优先),openid 只作兜底。
session_key 只能留在站点服务端(内存或短期缓存),不要写日志、不要下发给前端;
手机号建议用新版 getPhoneNumber 在服务端换取。
支付:小程序内必须用 wx.requestPayment
POST https://wx.onzx.cn/api/v1/pay/order
{ "out_trade_no": "MP-20261015-001", "amount_total": 9900, "description": "测评报告",
"scene": "miniprogram", "openid": "<小程序 openid>", "channel": "yzy" }
→ data.jsapi_params = { appId(小程序), timeStamp, nonceStr, package, signType:"RSA", paySign }
wx.requestPayment({ ...jsapi_params, success(){}, fail(){} }) // 结果仍以服务端通知为准
小程序里不要用中台托管收银台:web-view 内嵌 H5 支付在小程序里被限制,
而且会额外占用业务域名与支付授权目录名额。走 scene=miniprogram 直接调起最省事。
订阅消息
// 小程序端先攒额度(必须由用户点击触发)
wx.requestSubscribeMessage({ tmplIds: ['模板ID'], success(res) { /* 上报站点服务端 */ } })
// 站点服务端记额度
POST https://wx.onzx.cn/api/v1/message/grant
{ "openid": "oMP…", "template_id": "模板ID", "times": 1, "profile": "mp" }
// 之后按事件发送
POST https://wx.onzx.cn/api/v1/message/send
{ "event_key": "report_ready", "openid": "oMP…", "channel": "mp_subscribe",
"params": { "thing1": "报告已生成", "date2": "2026-10-15" }, "page": "pages/report/view" }
小程序订阅消息字段名是 thing1 / date2 / amount3 这种带类型的键,与服务号的 keyword1 不同 ——
在后台「字段对应」里映射一次即可,站点代码不用改。
带参数二维码
POST https://wx.onzx.cn/api/v1/miniprogram/qrcode
{ "scene": "poster-202610", "profile": "mp" }
→ { "url": "https://mp.weixin.qq.com/…", "ticket": "…" }
注意:扫码后的关注/进入事件需要公众号配置消息推送 URL 才收得到,而那个位置目前属于存量系统。 所以中台的绑定链路走"链接 + 网页授权"(见 登录中转), 不依赖带参数二维码的事件回调。
PC 扫码登录(顺带说明)
这属于开放平台「网站应用」,与公众号网页授权是两条链路:需注册网站应用(企业主体 + 资质认证),
拿到 AppID 后在后台以 website 类型登记。中台当前未开放该接口 ——
需要时补一个 /oauth/webqrcode + 前端轮询即可,不影响已有链路。
本页内容随代码一起版本化(V0.1.0)。发现文档与实际行为不一致,请当缺陷报告。