文章目录
前言
最近对接微信小程序支付突然遇到提示“小程序违规,支付功能不可用“,仔细排查后没有发现任何地方违规或代码书写错误。经过一番查阅终于找到原因,原来是微信最新上线的运营规范强制要求所有实物电商类小程序必须接入微信订单管理系统进行发货信息录入,确认收货流程后方可进行资金结算,否者将无法使用支付功能。本文将详细介绍订单发货管理功能、接入前的准备工作、发货信息录入的两种方式以及相关API的使用方法,帮助开发者顺利接入微信订单管理系统。
一、订单发货管理功能介绍
为保障小程序健康交易生态,进一步提升用户购物体验,微信小程序平台推出订单发货管理功能。商家接入后可在小程序后台进行订单和发货信息管理,并通过订单发货通知使用户知悉物流状态,用户可进入小程序查询具体订单和物流信息。
1.1 订单管理入口
登录微信小程序后台,可在左侧菜单找到“订单管理”
找到【发货信息录入】标签进行发货信息录入
1.2 小程序端表现
小程序可通过订单发货管理功能,上传订单相关的商品和物流信息。上传后用户会收到相应的订单发货通知,以了解物流进度,进行售后服务,并引导用户回流小程序获取其他相关服务。还可以收到确认收货通知提醒,提醒及时确认收货。
当后台发货时,买家微信上的【服务通知】立即收到订单发货通知
点击查看通知详情:
可以看到物流进度和订单信息,底部有个确认收货按钮,点击确认收货按钮完成订单并进行资金结算
当然如果小程序有内置确认收货功能,这里也可以通过api设置使得用户点击【服务通知】直接跳转到小程序订单详情页进行确认收货。
当服务端监测到客户物流信息已收货,可通过【服务通知】提醒用户及时确认收货
什么是订单发货管理功能,简单总结就是微信为了交易安全,强制介入资金管控,内搭一套订单管理系统免费开放给小程序主体使用。如果自己已开发了订单管理后台不想使用微信提供的也支持通过api接入打通2套订单系统。接入后的好处是享有微信端自动发起订单发货通知、物流信息查阅等便捷功能,对小程序主体影响就是在用户确认收货或者自动收货前资金处于冻结状态,只有确认收货后才会进行资金结算。
二、相关FAQ
罗列几个常见问题,摘抄自官方文档,帮助我们更好理解其中的规则
-
问题1总结:如上面介绍的允许在自己的后台管理操作订单发货但需要与微信订单管理系统通过api打通。
-
问题2总结:想让资金进行结算,小程序内的确认收货组件必须使用微信小程序提供的【确认收货组件】而非普通按钮自己处理逻辑。
-
问题3总结:资金结算是有周期的,如快递物流方式用户手动点击确认收货组件或者发货10天后系统自动收货后才会进行结算,也即客户确认收货前资金处于微信监管冻结状态不可提现。
三、接入前准备工作
- 1.交易结算管理确认:小程序在商户平台提交商户号关联申请后,需前往小程序后台「功能-微信支付」模块,对正在关联的商户号完成交易结算管理确认授权,商户号授权后方可关联成功
- 2.小程序端上传一版带订单详情页代码版本提交审核
- 3.小程序后台-订单管理-订单信息录入标签下填写【小程序商品订单详情path】,如下图所示
【小程序商品订单详情path】:填写订单详情页在小程序端页面路径,携带参数名称(key)按自己实际修改,值(value)固定写${商品订单号}, 例如:
pages/mine/orderDetail?order_num=${商品订单号}
也可以按需额外添加参数,例如:
pages/mine/orderDetail?order_num=${商品订单号}&channel=1
填写 完【小程序商品订单详情path】,打开微信——我——订单与卡包——小程序购物清单页就可通过点击订单上【前往小程序】按钮跳转到小程序详情页(并携带商品订单号和自定义参数)
而${商品订单号}值为服务端支付预下单接口填入的 out_trade_no值,简单说这里商品订单号就是我们自己平台定义了订单号(非微信),在预支付下单时候传给微信方,这边跳转入口又回传,拿到这个参数我们才能在详情页处理自己的逻辑,例如获取订单详情数据或其他操作。
通过上面3步,等待小程序版本审核通过(无需发布),小程序端开发版或体验版支付功能将正常,不再违规提示。
四、发货信息录入
发货信息录有2种方式,一种用微信小程序后台自带订单管理系统,另一种使用自己平台开发订单系统通过api连接微信订单系统,本节重点讲解后者。
4.1 微信小程序后台发货信息管理使用指南(方式一)
如何操作微信小程序后台提供的订单发货信息录入,详见官方文档 发货信息管理使用指引
4.2 发货信息管理服务API接入(方式二)
重点讲述如何通过api接入微信订单发货系统。实际开发过程应该更倾向使用自己的后台管理订单而非官方。
流程图:
方式1:服务通知内部确认收货
方式二:小程序内部确认收货
方式一和方式二流程基本一致,主要区别在于确认收货按钮位置不同,方式一收货按钮在服务通知详情里面非小程序内部,确认收货逻辑完全由微信接管。服务端只需接入微信推送消息即可获取确认收货的回调。方式二收货按钮在小程序内部涉及到确认收货后的订单状态刷新逻辑,服务端收到确认收货回调既可以通过前端接口告知也可以通过微信推送消息获取,如果服务端仍然采用消息推送获取会涉及异步问题,当前端确认收货成功回调后立即发起订单状态查询刷新页面数据,此时服务端可能还未接受到微信收货回调,订单仍然处于待收货状态,就会造成小程序端显示bug。这里最好的方式应该采用前端接口告知,后服务端通过api查询微信订单状态二次确认后修改订单信息在响应前端请求,就不会有异步问题。
下面看下微信提供的发货信息管理的服务API有哪些:
官方文档地址:发货信息管理服务API
详细使用和参数看官方文档。
发货信息管理的服务API总结
下面对常用接口做一个简单作用说明
一、发货信息录入接口 (发货)
作用:把发货的订单信息、发货方式、物流信息等告知微信,在自己的后台管理系统进行发货操作时调用,相当于对接微信订单系统发货功能。
二、发货信息合单录入接口 (重新发货)
作用:在用户尚未确认收货的情况下可以通过该接口修改发货信息,但一个支付单只能更新一次发货信息,请谨慎操作。相当于重新发货功能。
三、查询订单发货状态
作用:可以查询订单状态,订单状态枚举:(1) 待发货;(2) 已发货;(3) 确认收货;(4) 交易完成;(5) 已退款;(6) 资金待结算。方式二中可以通过该接口二次确认订单是否已收货。
五、确认收货提醒接口 (提醒收货)
作用:如已从快递物流服务方获知用户已收货,调用该接口发起【服务通知】提醒用户"确认收货",以提高资金结算效率,每个订单仅可调用一次。
六、消息跳转路径设置接口 (跳转小程序内部)
作用:设置【服务通知】-【发货提醒】点击跳转到小程序页面路径 ,设置完用户只能在小程序内进行确认收货操作。
九、相关消息推送
当产生交易或订单结算时,微信服务器会向开发者服务器、第三方平台方的消息与事件接收 URL 以 POST 的方式推送相关事件。用于用户确认收货、订单结算监听。
服务端开发步骤:
(1)调用【接口六】进行发货通知详情跳转路径设置(可选)
(2)调用发货信息录入接口(接口一)进行发货
(3)如果需要修改发货信息先调【接口三】进行订单信息查询,如果订单处于未收货状态,调用【接口二】进行发货信息修改
(4)调用【接口九】接入微信小程序消息推送服务。
(5)对接物流服务,获知用户已收货,调用【接口五】提醒用户及时“确认收货“ (可选)
(6)订单结算中(已确认收货)消息推送回调中更新自己平台订单状态,订单由待收货变成已收货状态
(7)如果是小程序内部确认收货,先调用【接口三】进行订单状态查询二次确认订单已变成“确认收货”状态,更新自己平台订单状态。
小程序开发步骤:
小程序端相对比较简单,只要接入官方提供【确定收货组件】即可
示例:
<button @click="handleConfirm">确认收货</button>
//确认收货
const handleConfirm = () => {
//拉起确认收货组件
if (wx.openBusinessView) {
wx.openBusinessView({
businessType: 'weappOrderConfirm',
extraData: {
transaction_id: '42012312xxxxxxxxxxxxx' //用户交易单号
},
success(e) {
let {
status, //"success":用户确认收货成功;"fail":用户确认收货失败;"cancel":用户取消
req_extradata //开发者调用组件时的请求信息
} = e.referrerInfo.extraData
//成功收货
if (status === 'success') {
let {
transaction_id // 用户交易单号
} = req_extradata
//请求服务器接口告知订单已确认收货
//服务器响应后刷新详情页订单状态
}
},
fail(e) {
console.log(e)
},
complete() {
}
});
} else {
//引导用户升级微信版本
wx.showToast({
title: '请升级到最新微信版本',
icon: 'none'
})
}
}
组件样式截图:
【确定收货组件】更多说明请查看官方文档确定收货组件
五、如何判断是否需要接入发货管理
登录小程序后台,在通知中心查看是否收到如下图消息提醒,如有就必须接入
六、总结
通过上面介绍我们了解什么是订单发货管理功能和掌握了对接的流程、基本步骤,总体来说只要认真阅读官方文档,对接起来还是比较简单的。从另一方面讲对于必须接入小程序订单发货管理功能新规来看,对各方影响是不同的,有利也有弊。站在买家角度看既保证其资金安全也收到更好的服务体验能及时掌握订单发货和物流信息,站在小程序运营方角度来看增加了资金结算的周期,降低了资金流转可操作性但同时带来了更好的订单管理体验。站在开发者角度看,增加了开发时间成本和开发难度。