uni-app前端无法直接调用微信即时配送接口,必须经自有服务端中转,因接口强制要求authorizer_access_token(仅服务端可安全获取并管理),且需完成微信开放平台授权链路、签名验证及权限配置。

uni-app 无法直接调用微信即时配送接口,必须通过服务端中转,且所有关键步骤依赖微信开放平台的授权链路和 authorizer_access_token —— 这是绝大多数前端开发者一开始栽跟头的地方。
为什么 uni-app 前端不能直接调用 delivery.create_order
微信即时配送接口(如 delivery.create_order、delivery.cancel_order)属于服务端能力,强制要求使用 authorizer_access_token 调用,而该 token 只能由第三方平台或已授权的服务商从微信服务器换取,且有 2 小时有效期、需缓存复用、需校验签名。uni-app 运行在客户端,既无法安全存储密钥,也无法完成 OAuth2.0 授权码换 token 的完整流程。
常见错误现象:
- 前端直接发请求到
https://api.weixin.qq.com/cgi-bin/delivery/create_order,返回{"errcode":40001,"errmsg":"invalid credential, access_token is invalid or not latest"} - 把小程序自己的
access_token当成authorizer_access_token使用,报错61007(文档明确写“请务必先完成授权后再调用,否则会出现61007的错误”) - 尝试在 uni-app 里拼接签名参数,但因缺少
component_appid、component_access_token等上下文,签名始终失败
uni-app 正确调用路径:三端协作模型
真正可行的链路是「uni-app 前端 → 自有服务端 → 微信服务端」,其中自有服务端承担鉴权、token 管理、签名、重试、日志等职责。
实操建议:
- uni-app 前端只负责收集必要字段:
shop_id、origin_id、dest_id、goods_list、deliver_time,并通过uni.request提交到你自己的 API(如/api/v1/delivery/order) - 你的服务端(Node.js/Java/PHP)需预先完成:在微信开放平台配置「即时配送权限集」、获取并缓存
authorizer_access_token、维护pre_auth_code和authorization_code生命周期 - 服务端调用微信接口时,必须携带
authorizer_access_token作为查询参数,且 POST body 需严格按微信格式序列化(例如goods_list是数组,不是对象;weight单位是克,必须为整数) - 特别注意
waybill_id:下单成功后微信返回的运单号,后续查单、取消、通知都依赖它,必须落库并同步回 uni-app 前端
uni-app 中物流状态展示组件的坑点
微信提供了 logisticsPlugin 插件用于渲染物流轨迹,但 uni-app 集成时极易出错。
关键条件:
- 小程序后台必须开通「物流服务 → 查询组件」,否则插件初始化即失败
-
manifest.json的mp-weixin节点下必须声明插件,版本不能低于2.1.12,provider 固定为wx9ad912bf20548d92(不可改) -
waybillToken不是运单号,而是调用微信后台接口https://api.weixin.qq.com/cgi-bin/logistics/get_waybill_token返回的临时凭证,有效期 2 小时,且一次只能查一个单 - 插件调用前需确保用户已登录且 openid 可用,否则
openWaybillTracking会静默失败,控制台无报错
示例片段(服务端生成 waybillToken 后传给前端):
plugin.openWaybillTracking({
waybillToken: 'xxxxxx_xxxxxxxxxx_xxxxxxx'
})
测试阶段最容易被忽略的四个硬性前提
即使代码全对,以下任一条件不满足,整个流程都会卡死:
- 小程序必须完成微信认证,且在「内测申请」中以“自营小程序商户”身份提交
appid,等待 5 个工作日审核通过(不是提交就开) - 配送公司账号必须已在闪送/美团/达达等平台完成签约,并在微信公众平台【物流助手】→【即时配送】中完成授权绑定(跳转第三方登录页那步不能跳过)
- 测试用的小程序必须在第三方平台后台被显式勾选「即时配送权限」并完成授权,仅开通权限不等于可调用
- 服务端请求微信接口的域名,必须加入公众号后台的「request 合法域名」白名单,否则微信服务器直接拒绝连接
这些环节没有日志、没有提示、不报具体错误码,只在某个环节静默失败——调试时优先逐条确认是否全部到位,比改代码更有效。











