完结支付分订单
更新时间:2025.03.06||
服务完成后,商户调用本接口,通知微信支付服务已结束(collection.state参数变为USER_PAYING状态,即用户待支付状态)。
2、完结后微信支付会按照一定频率自动发起扣款,直到扣款成功,中间不会自动失效。商户可参考开发指引做业务逻辑处理。
接口说明
请求方式:【POST】/v3/payscore/serviceorder/{out_order_no}/complete
请求域名:【主域名】https://api.mch.weixin.qq.com 使用该域名将访问就近的接入点
【备域名】https://api2.mch.weixin.qq.com 使用该域名将访问异地的接入点 ,指引点击查看
请求参数
Header HTTP头参数
Authorization 必填 string
请参考 签名认证 生成认证信息
Accept 必填 string
请设置为 application/json
Content-Type 必填 string
请设置为 application/json
Path 路径参数
out_order_no 必填 string(64)
【商户服务订单号】 商户系统内部服务订单号,要求32个字符内,只能是数字、大小写字母_-|* 且在同一个商户号下唯一。需要开发者特别注意,该参数不可用于申请退款接口中的 out_trade_no 参数。
Body 包体参数
appid 必填 string(32)
【公众账号ID】 是微信开放平台和微信公众平台为开发者的应用程序(APP、小程序、公众号)提供的一个唯一标识。 开发者需要先在微信开放平台或微信公众平台中申请ID,然后在商户平台中绑定,详见直连商户与AppID账号关联管理。完结订单和取消订单需要和创单传入的appid保持一致。
service_id 必填 string(32)
【服务ID】 商户支付分服务的唯一标识,由32位数字组成。支付分产品权限审核通过后,微信支付运营会向商户提供该ID。
post_payments 必填 array[Payment]
【后付费项目】 用于展示订单后付费项目明细,最多100条,商户需要按照所属行业规程传参,详见post_payments(后付费项目)字段传参说明
post_discounts 选填 array[ServiceOrderCoupon]
【商户优惠】 用于展示订单优惠项目明细,最多30条,完结订单时传的收款总金额需满足计算条件(收款总金额=后付费项目amount和-优惠项目amount和)
 | 属性 |
| name 必填 string(20)
【优惠名称】 用于描述优惠项目,不超过20个字符,同一单多个优惠项目名称不可重复。
description 必填 string(30)
【优惠说明】 用于描述优惠项目使用条件,不超过30个字符。
amount 选填 integer
【优惠金额】 优惠项目金额。 需满足计算条件:total_amount = 后付费项目金额(post_payments.amount总和) - 优惠项目金额(post_discounts.amount总和),例如商户后付费项目金额总和为10元,优惠项目金额总和为2元,则订单收款总金额为8元。
count 选填 integer
【优惠数量】 整型,数量范围为[1,100],用于描述优惠项目使用数量,例如用户使用了两张同一活动优惠券,则count填2。 |
total_amount 必填 integer
【总金额】 订单最终收款总金额,整型,单位为分,商户调用完结订单接口和修改订单金额接口传入,受服务ID风险金额上限影响,服务ID风险金额上限具体请与BD确认。
total_amount<=服务ID风险金额上限。
需满足计算条件:total_amount = 后付费项目金额(post_payments.amount总和) - 优惠项目金额(post_discounts.amount总和),例如商户后付费项目金额总和为10元,优惠项目金额总和为2元,则订单收款总金额为8元。
time_range 选填 TimeRange
【实际服务时间段】 用于描述订单的服务开始和结束时间。
 | 属性 |
| start_time 选填 string(14)
【服务开始时间】 1、商户提供服务的开始时间。例如,用户今天下单,商户明天提供服务,这里的时间指的是明天。 2、支持格式:"yyyyMMddHHmmss"和"yyyyMMdd"。 传入 20091225091010 表示 2009 年 12 月 25 日 9 点 10 分 10 秒。 传入 20091225 表示 2009 年 12 月 25 日 0 点 0 分 0 秒。 3、微信支付会根据传入时间的精度进行校验: 如果是 yyyyMMdd 格式,校验精确到日:start_time 必须晚于或等于商户调用创建订单接口的时间。 如果是 yyyyMMddHHmmss 格式,校验精确到秒:start_time 必须晚于调用创建订单接口的时间(考虑系统时差,建议预留一定误差)。
end_time 选填 string(14)
【服务结束时间】 1、商户提供服务的结束时间,若创单传入了该字段且和实际服务结束时间一致(无需修改)则该参数可以不填。例如,商户明天提供服务,3天后结束服务,这里的时间指的是3天后的时间。 2、支持格式:"yyyyMMddHHmmss" 和 "yyyyMMdd" 。 传入 20091225091010 表示 2009 年 12 月 25 日 9 点 10 分 10 秒。 传入 20091225 表示 2009 年 12 月 25 日 0 点 0 分 0 秒。 3、微信支付会根据传入时间的精度进行校验: 如果是 yyyyMMdd 格式,校验精确到日:end_time 必须晚于或等于 start_time,end_time 必须早于或等于商户调用完结接口当前时间。 如果是 yyyyMMddHHmmss 格式,校验精确到秒:end_time 必须晚于 start_time,且end_time必须早于商户调用完结接口当前时间。 4、end_time必须和start_time时间格式一致,如果start_time使用OnAccept格式则end_time必须使用yyyyMMddHHmmss格式。
start_time_remark 选填 string(20)
【服务开始时间备注】 当有传入服务开始时间时,可添加备注说明,不超过20个字符。
end_time_remark 选填 string(20)
【服务结束时间备注】 当有传入服务结束时间时,可添加备注说明,不超过20个字符。 |
location 选填 Location
【实际服务位置】 服务使用的开始位置和结束位置
 | 属性 |
| end_location 选填 string(20)
【服务结束地点】 用户结束使用服务的地点. 不超过20个字符。 |
profit_sharing 选填 boolean
【微信支付服务分账标记】 支付分订单的分账标识,完结订单时传入true表示需要进行分账。订单收款成功后,资金将被冻结。商户可请求分账,将订单收款资金分配给其他商户或用户。调用完结分账接口后,剩余资金将解冻;若未进行分账且距离支付完成时间超过30天,资金也会自动解冻。
true:需分账
false:不需分账
注:不传默认false,不需分账。
goods_tag 选填 string(32)
【订单优惠标记】 代金券在创建时可以配置多个订单优惠标记,标记的内容由创券商户自定义设置。
如果代金券有配置订单优惠标记,则必须在该参数传任意一个配置的订单优惠标记才能使用券。
如果代金券没有配置订单优惠标记,则可以不传该参数。
device 选填 object
【设备信息】
 | 属性 |
| start_device_id 选填 string(50)
【服务开始的设备ID】 某一设备在商户对应服务ID下的唯一标识,由商户自行填写,建议采用设备SN值。售货机、充电宝、充电桩等无人自助设备行业必传。
end_device_id 选填 string(50) 【服务结束的设备ID】 某一设备在商户对应服务ID下的唯一标识,由商户自行填写,建议采用设备SN值。售货机、充电宝、充电桩等无人自助设备行业必传。
materiel_no 选填 string(100)
【物料编码】 若商户参与政策,则填写微信支付运营给到商家的对应加参后的URL链接;若商家未参与政策,则填写商家自有的URL链接。 |
POST

1curl -X POST \
2 https://api.mch.weixin.qq.com/v3/payscore/serviceorder/1234323JKHDFE1243252/complete \
3 -H "Authorization: WECHATPAY2-SHA256-RSA2048 mchid=\"1900000001\",..." \
4 -H "Accept: application/json" \
5 -H "Content-Type: application/json" \
6 -d '{
7 "appid" : "wxd678efh567hg6787",
8 "service_id" : "2002000000000558128851361561536",
9 "post_payments" : [
10 {
11 "name" : "就餐费用",
12 "amount" : 40000,
13 "description" : "就餐人均100元",
14 "count" : 4
15 }
16 ],
17 "post_discounts" : [
18 {
19 "name" : "满20减1元",
20 "description" : "不与其他优惠叠加",
21 "amount" : 100,
22 "count" : 2
23 }
24 ],
25 "total_amount" : 50000,
26 "time_range" : {
27 "start_time" : "20091225091010",
28 "end_time" : "20091225121010",
29 "start_time_remark" : "备注1",
30 "end_time_remark" : "备注2"
31 },
32 "location" : {
33 "end_location" : "嗨客时尚主题展餐厅"
34 },
35 "profit_sharing" : false,
36 "goods_tag" : "goods_tag",
37 "device" : {
38 "start_device_id" : "HG123456",
39 "end_device_id" : "HG123456",
40 "materiel_no" : "example_materiel_no"
41 }
42 }'
应答参数
appid 必填 string(32)
【公众账号ID】 是微信开放平台和微信公众平台为开发者的应用程序(APP、小程序、公众号)提供的一个唯一标识。 开发者需要先在微信开放平台或微信公众平台中申请ID,然后在商户平台中绑定,详见直连商户与AppID账号关联管理。完结订单和取消订单需要和创单传入的appid保持一致。
mchid 必填 string(32)
【商户号】 调用支付分创单接口提交的商户号,商户号需开通支付分产品权限,且与appid有绑定关系,详见直连商户与AppID账号关联管理。
out_order_no 必填 string(32)
【商户服务订单号】 商户系统内部服务订单号,商户在创建支付分接口中填入的out_order_no参数。
service_id 必填 string(32)
【服务ID】 商户支付分服务的唯一标识,由32位数字组成。支付分产品权限审核通过后,微信支付运营会向商户提供该ID。
service_introduction 必填 string(20)
【服务信息】 用于介绍本订单所提供的服务 ,长度不能超过20个字符(汉字、数字、字母、特殊符号都按照1个字符计算)。
state 必填 string(32)
【服务订单状态】 表示支付分订单状态,免确认模式创单成功即是DOING进行中状态。
CREATED:商户已创建服务订单
DOING:服务订单进行中
DONE:服务订单完成(终态)
REVOKED:商户取消服务订单(终态)
EXPIRED:服务订单已失效,"商户已创建服务订单"状态超过30天未变动,则订单失效(终态)
该状态需结合collection.state字段和state_description字段一起判断,具体可参考支付分订单状态流转图。
state_description 选填 string
【订单状态说明】 此参数用于对服务订单处于DOING状态时的附加说明,非DOIING状态将不会返回该参数。具体状态如下:
USER_CONFIRM:用户已确认状态,表示用户成功确认订单后所处状态。
MCH_COMPLETE:商户已完结状态,指商户调用完结接口成功后至扣款成功前的状态。该状态需结合collection.state字段和state字段一起判断,具体可参考支付分订单状态流转图。
total_amount 必填 integer
【总金额】 订单最终收款总金额,整型,单位为分,商户调用完结订单接口和修改订单金额接口传入,受服务ID风险金额上限影响,服务ID风险金额上限具体请与BD确认。
total_amount<=服务ID风险金额上限。
需满足计算条件:total_amount = 后付费项目金额(post_payments.amount总和) - 优惠项目金额(post_discounts.amount总和),例如商户后付费项目金额总和为10元,优惠项目金额总和为2元,则订单收款总金额为8元。
post_payments 选填 array[Payment]
【后付费项目】 用于展示订单后付费项目明细,商户需要按照所属行业规程传参,详见post_payments(后付费项目)字段传参说明
post_discounts 选填 array[ServiceOrderCoupon]
【后付费商户优惠】 用于展示订单优惠项目明细,最多30条,完结订单时传的收款总金额需满足计算条件(收款总金额=后付费项目amount和-优惠项目amount和)
 | 属性 |
| name 选填 string(20)
【优惠名称】 用于描述优惠项目,不超过20个字符,同一单多个优惠项目名称不可重复。
description 选填 string(30)
【优惠说明】 用于描述优惠项目使用条件,不超过30个字符。
amount 选填 integer
【优惠金额】 优惠项目金额
count 选填 integer
【优惠数量】 整型,用于描述优惠项目使用数量,例如用户使用了两张同一活动优惠券,则count填2。 |
risk_fund 选填 RiskFund
【服务风险金】 本笔订单的风险金额描述
 | 属性 |
| name 必填 string(30)
【风险名称】 订单的风险金额名称,固定传ESTIMATE_ORDER_COST,代表订单预估费用。
amount 必填 integer
【风险金额】 这笔订单的风险金额,风险金额大小会影响评估,理论上金额越高评估通过率越低,商户按照实际场景传入即可,评估不通过是正常风控拦截。 1、该值为整型,必须>0,单位为分。 2、该金额必须小于等于“服务ID风险金额”,“服务ID风险金额”上限具体请与微信支付运营确认。
description 选填 string(30)
【风险说明】 用于描述说明该风险金,不能超过30字符。 |
time_range 选填 TimeRange
【服务时间段】 用于描述订单的服务开始和结束时间。
 | 属性 |
| start_time 选填 string(14)
【服务开始时间】 1、商户提供服务的开始时间。例如,用户今天下单,商户明天提供服务,这里的时间指的是明天。 2、支持格式:"yyyyMMddHHmmss"和"yyyyMMdd"。 传入 20091225091010 表示 2009 年 12 月 25 日 9 点 10 分 10 秒。 传入 20091225 表示 2009 年 12 月 25 日 0 点 0 分 0 秒。 3、微信支付会根据传入时间的精度进行校验: 如果是 yyyyMMdd 格式,校验精确到日:start_time 必须晚于或等于商户调用创建订单接口的时间。 如果是 yyyyMMddHHmmss 格式,校验精确到秒:start_time 必须晚于调用创建订单接口的时间(考虑系统时差,建议预留一定误差)。
end_time 选填 string(14)
【服务结束时间】 1、商户提供服务的结束时间,若创单传入了该字段且和实际服务结束时间一致(无需修改)则该参数可以不填。例如,商户明天提供服务,3天后结束服务,这里的时间指的是3天后的时间。 2、支持格式:"yyyyMMddHHmmss"、"yyyyMMdd" 和 。 传入 20091225091010 表示 2009 年 12 月 25 日 9 点 10 分 10 秒。 传入 20091225 表示 2009 年 12 月 25 日 0 点 0 分 0 秒。 3、微信支付会根据传入时间的精度进行校验: 如果是 yyyyMMdd 格式,校验精确到日:end_time 必须晚于或等于 start_time,end_time 必须早于或等于商户调用完结接口当前时间。 如果是 yyyyMMddHHmmss 格式,校验精确到秒:end_time 必须晚于 start_time,且end_time必须早于商户调用完结接口当前时间。 4、end_time必须和start_time时间格式一致,如果start_time使用OnAccept格式则end_time必须使用yyyyMMddHHmmss格式。
start_time_remark 选填 string(20)
【服务开始时间备注】 当有传入服务开始时间时,可添加备注说明,不超过20个字符。
end_time_remark 选填 string(20)
【服务结束时间备注】 当有传入服务结束时间时,可添加备注说明,不超过20个字符。 |
location 选填 Location
【服务位置】 服务使用的开始位置和结束位置
 | 属性 |
| end_location 选填 string(20)
【服务结束地点】 用户结束使用服务的地点. 不超过20个字符。 |
order_id 选填 string(64)
【微信支付服务订单号】 支付分订单在微信侧的唯一标识,31位数字,开头由1000000000+年月日组成。
need_collection 选填 boolean
【是否需要收款】 订单是否需要收款,固定返回true需收款。
应答示例
200 OK

1{
2 "appid" : "wxd678efh567hg6787",
3 "mchid" : "1230000109",
4 "out_order_no" : "1234323JKHDFE1243252",
5 "service_id" : "2002000000000558128851361561536",
6 "service_introduction" : "某某酒店",
7 "state" : "DOING",
8 "state_description" : "MCH_COMPLETE",
9 "total_amount" : 40000,
10 "post_payments" : [
11 {
12 "name" : "就餐费用",
13 "amount" : 40000,
14 "description" : "就餐人均100元",
15 "count" : 4
16 }
17 ],
18 "post_discounts" : [
19 {
20 "name" : "满20减1元",
21 "description" : "不与其他优惠叠加",
22 "amount" : 100,
23 "count" : 2
24 }
25 ],
26 "risk_fund" : {
27 "name" : "DEPOSIT",
28 "amount" : 10000,
29 "description" : "就餐的预估费用"
30 },
31 "time_range" : {
32 "start_time" : "20091225091010",
33 "end_time" : "20091225121010",
34 "start_time_remark" : "备注1",
35 "end_time_remark" : "备注2"
36 },
37 "location" : {
38 "end_location" : "嗨客时尚主题展餐厅"
39 },
40 "order_id" : "15646546545165651651",
41 "need_collection" : true
42}
错误码
公共错误码
|
400 | PARAM_ERROR | 参数错误 | 请根据错误提示正确传入参数 |
400 | INVALID_REQUEST | HTTP 请求不符合微信支付 APIv3 接口规则 | 请参阅 接口规则 |
401 | SIGN_ERROR | 验证不通过 | 请参阅 签名常见问题 |
500 | SYSTEM_ERROR | 系统异常,请稍后重试 | 请稍后重试 |
业务错误码
|
400 | INVALID_ORDER_STATE | 单据状态错误 | 确认操作是否符合流程 |
400 | INVALID_REQUEST | 请求参数符合参数格式,但不符合业务规则 | 请确认相同单号是否使用了不同的参数 |
400 | ORDER_CANCELED | 单据已取消 | 当前状态无需操作 |
400 | ORDER_DONE | 订单已完成 | 当前状态无需操作 |
403 | NO_AUTH | 商户信息不合法 | 登录商户平台核对,传入正确信息 |
404 | ORDER_NOT_ EXIST | 订单不存在 | 确认入参,传入正确单据 |
429 | FREQUENCY_LIMITED | 频率超限 | 请求量不要超过接口调用频率限制 |
500 | SYSTEM_ERROR | 系统错误 | 5开头的状态码都为系统问题,请使用相同参数稍后重新调用 |