完结支付分订单
更新时间:2024.12.06服务完成后,商户调用本接口,通知微信支付服务已结束(collection.state参数变为USER_PAYING状态,即用户待支付状态)。
|
接口说明
支持商户:【普通服务商】
请求方式:【POST】/v3/payscore/partner/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(32)
【商户服务订单号】 商户系统内部服务订单号,要求32个字符内,只能是数字、大小写字母_-|* 且在同一个商户号下唯一。需要开发者特别注意,该参数不可用于申请退款接口中的 out_trade_no 参数。
body 包体参数
service_id 必填 string(32)
【服务ID】 商户支付分服务的唯一标识,由32位数字组成。支付分产品权限审核通过后,微信支付运营会向商户提供该ID。
sub_mchid 必填 string(32)
【子商户号】 服务商下的子商户商户号,普通服务商使用特约商户进件生成,平台收付通服务商使用二级商户进件生成。
post_payments 必填 array[Payment]
【后付费项目】 用于展示订单后付费项目明细,最多100条,商户需要按照所属行业规程传参,详见post_payments(后付费项目)字段传参说明。
属性 | |
name 选填 string(20) 【付费名称】 不能超过20个字符,需严格按照post_payments(后付费项目)字段传参说明传参。 amount 选填 integer 【付费金额】 付费项目金额,整型,大于等于0(等于0时表示不需要扣费),单位为分,需严格按照post_payments(后付费项目)字段传参说明传参。 description 选填 string(30) 【付费说明】 对付费项目的详细说明,不超过30个字符,需严格按照post_payments(后付费项目)字段传参说明传参。 count 选填 integer 【付费数量】 后付费项目的数量,为整型,数量范围为[1,100]。相同的后付费项目建议合并计算amount和count。 |
post_discounts 选填 array[ServiceOrderCoupon]
【商户优惠】 用于展示订单优惠项目明细,最多30条,完结订单时传的收款总金额需满足计算条件(收款总金额=后付费项目amount和-优惠项目amount和)
属性 | |
name 选填 string(20) 【优惠名称】 用于描述优惠项目,不超过20个字符,同一单多个优惠项目名称不可重复。 description 选填 string(30) 【优惠说明】 用于描述优惠项目使用条件,不超过30个字符。 amount 选填 integer 【优惠金额】 整型,单位为分,用于描述优惠项目金额。 count 选填 integer 【优惠数量】 整型,数量范围为[1,100],用于描述优惠项目使用数量,例如用户使用了两张同一活动优惠券,则count填2。 |
total_amount 必填 integer
【总金额】
订单最终收款总金额,整型,单位为分,商户调用完结订单接口和修改订单金额接口传入,受服务ID风险金额上限影响,服务ID风险金额上限具体请与BD确认。
先免模式:total_amount<=创单risk_fund.amount(押金金额)<=服务ID风险金额上限。
先享模式:total_amount<=服务ID风险金额上限。
需满足计算条件:total_amount = 后付费项目金额(post_payments.amount总和) - 优惠项目金额(post_discounts.amount总和),例如商户后付费项目金额总和为10元,优惠项目金额总和为2元,则订单收款总金额为8元。
time_range 选填 object
【服务时间段】 用于描述订单的服务开始和结束时间。
属性 | |
start_time 选填 string(14) 【服务开始时间】 1、商户提供服务的开始时间。例如,用户今天下单,商户明天提供服务,这里的时间指的是明天。 end_time 选填 string(14) 【服务结束时间】 1、商户提供服务的结束时间。例如,商户明天提供服务,3天后结束服务,这里的时间指的是3天后的时间。 start_time_remark 选填 string(20) 【服务开始时间备注】 当有传入服务开始时间时,可添加备注说明,不超过20个字符。 end_time_remark 选填 string(20) 【服务结束时间备注】 当有传入服务结束时间时,可添加备注说明,不超过20个字符。 |
location 选填 object
【服务位置】 用于描述用户使用服务的地理位置
属性 | |
start_location 选填 string(20) 【服务开始地点】 用户开始使用服务的地点,不超过20个字符。 end_location 选填 string(20) 【服务结束地点】用户结束使用服务的地点,不超过20个字符。 |
profit_sharing 选填 boolean
【微信支付服务分账标记】 支付分订单的分账标识,完结订单时传入true表示需要进行分账。订单收款成功后,资金将被冻结。商户可请求分账,将订单收款资金分配给其他商户或用户。调用完结分账接口后,剩余资金将解冻;若未进行分账且距离支付完成时间超过30天,资金也会自动解冻。
true:需分账
false:不需分账
注:不传默认false,不需分账。
complete_time 选填 string(64)
【完结服务时间】 支付分订单完结时间,使用ISO 8601所定义的格式,需要晚于或等于end_time,且早于或等于调接口当前时间。
格式示例:
YYYY-MM-DDTHH:mm:ss.SSSZ
YYYY-MM-DDTHH:mm:ssZ
YYYY-MM-DDTHH:mm:ss.SSS+08:00
YYYY-MM-DDTHH:mm:ss+08:00
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链接。 |
请求示例
POST
1curl -X POST \ 2 https://api.mch.weixin.qq.com/v3/payscore/partner/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 "service_id" : "2002000000000558128851361561536", 8 "sub_mchid" : "1900000109", 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 "start_location" : "嗨客时尚主题展餐厅", 34 "end_location" : "嗨客时尚主题展餐厅" 35 }, 36 "profit_sharing" : false, 37 "complete_time" : "2019-11-11T16:24:05+08:00", 38 "goods_tag" : "goods_tag", 39 "device" : { 40 "start_device_id" : "HG123456", 41 "end_device_id" : "HG123456", 42 "materiel_no" : "example_materiel_no" 43 } 44 }' 45
需配合微信支付工具库 WXPayUtility 使用,请参考Java
1package com.java.demo; 2 3import com.java.utils.WXPayUtility; // 引用微信支付工具库,参考:https://pay.weixin.qq.com/doc/v3/partner/4014985777 4 5import com.google.gson.annotations.SerializedName; 6import com.google.gson.annotations.Expose; 7import okhttp3.MediaType; 8import okhttp3.OkHttpClient; 9import okhttp3.Request; 10import okhttp3.RequestBody; 11import okhttp3.Response; 12 13import java.io.IOException; 14import java.io.UncheckedIOException; 15import java.security.PrivateKey; 16import java.security.PublicKey; 17import java.util.ArrayList; 18import java.util.HashMap; 19import java.util.List; 20import java.util.Map; 21 22/** 23 * 完结订单 24 */ 25public class CompletePartnerServiceOrder { 26 private static String HOST = "https://api.mch.weixin.qq.com"; 27 private static String METHOD = "POST"; 28 private static String PATH = "/v3/payscore/partner/serviceorder/{out_order_no}/complete"; 29 30 public static void main(String[] args) { 31 // TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/partner/4013080340 32 CompletePartnerServiceOrder client = new CompletePartnerServiceOrder( 33 "19xxxxxxxx", // 商户号,是由微信支付系统生成并分配给每个商户的唯一标识符,商户号获取方式参考 https://pay.weixin.qq.com/doc/v3/partner/4013080340 34 "1DDE55AD98Exxxxxxxxxx", // 商户API证书序列号,如何获取请参考 https://pay.weixin.qq.com/doc/v3/partner/4013058924 35 "/path/to/apiclient_key.pem", // 商户API证书私钥文件路径,本地文件路径 36 "PUB_KEY_ID_xxxxxxxxxxxxx", // 微信支付公钥ID,如何获取请参考 https://pay.weixin.qq.com/doc/v3/partner/4013038589 37 "/path/to/wxp_pub.pem" // 微信支付公钥文件路径,本地文件路径 38 ); 39 40 CompletePartnerServiceOrderRequest request = new CompletePartnerServiceOrderRequest(); 41 request.outOrderNo = "1234323JKHDFE1243252"; 42 request.serviceId = "2002000000000558128851361561536"; 43 request.subMchid = "1900000109"; 44 request.postPayments = new ArrayList<>(); 45 { 46 Payment postPaymentsItem = new Payment(); 47 postPaymentsItem.name = "就餐费用"; 48 postPaymentsItem.amount = 40000L; 49 postPaymentsItem.description = "就餐人均100元"; 50 postPaymentsItem.count = 4L; 51 request.postPayments.add(postPaymentsItem); 52 }; 53 request.postDiscounts = new ArrayList<>(); 54 { 55 ServiceOrderCoupon postDiscountsItem = new ServiceOrderCoupon(); 56 postDiscountsItem.name = "满20减1元"; 57 postDiscountsItem.description = "不与其他优惠叠加"; 58 postDiscountsItem.amount = 100L; 59 postDiscountsItem.count = 2L; 60 request.postDiscounts.add(postDiscountsItem); 61 }; 62 request.totalAmount = 50000L; 63 request.timeRange = new TimeRange(); 64 request.timeRange.startTime = "20091225091010"; 65 request.timeRange.endTime = "20091225121010"; 66 request.timeRange.startTimeRemark = "备注1"; 67 request.timeRange.endTimeRemark = "备注2"; 68 request.location = new Location(); 69 request.location.startLocation = "嗨客时尚主题展餐厅"; 70 request.location.endLocation = "嗨客时尚主题展餐厅"; 71 request.profitSharing = false; 72 request.completeTime = "2019-11-11T16:24:05+08:00"; 73 request.goodsTag = "goods_tag"; 74 request.device = new Device(); 75 request.device.startDeviceId = "HG123456"; 76 request.device.endDeviceId = "HG123456"; 77 request.device.materielNo = "example_materiel_no"; 78 try { 79 client.run(request); 80 } catch (WXPayUtility.ApiException e) { 81 // TODO: 请求失败,根据状态码执行不同的逻辑 82 e.printStackTrace(); 83 } 84 } 85 86 public void run(CompletePartnerServiceOrderRequest request) { 87 String uri = PATH; 88 uri = uri.replace("{out_order_no}", WXPayUtility.urlEncode(request.outOrderNo)); 89 String reqBody = WXPayUtility.toJson(request); 90 91 Request.Builder reqBuilder = new Request.Builder().url(HOST + uri); 92 reqBuilder.addHeader("Accept", "application/json"); 93 reqBuilder.addHeader("Wechatpay-Serial", wechatPayPublicKeyId); 94 reqBuilder.addHeader("Authorization", WXPayUtility.buildAuthorization(mchid, certificateSerialNo,privateKey, METHOD, uri, reqBody)); 95 reqBuilder.addHeader("Content-Type", "application/json"); 96 RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), reqBody); 97 reqBuilder.method(METHOD, requestBody); 98 Request httpRequest = reqBuilder.build(); 99 100 // 发送HTTP请求 101 OkHttpClient client = new OkHttpClient.Builder().build(); 102 try (Response httpResponse = client.newCall(httpRequest).execute()) { 103 String respBody = WXPayUtility.extractBody(httpResponse); 104 if (httpResponse.code() >= 200 && httpResponse.code() < 300) { 105 // 2XX 成功,验证应答签名 106 WXPayUtility.validateResponse(this.wechatPayPublicKeyId, this.wechatPayPublicKey, 107 httpResponse.headers(), respBody); 108 109 return; 110 } else { 111 throw new WXPayUtility.ApiException(httpResponse.code(), respBody, httpResponse.headers()); 112 } 113 } catch (IOException e) { 114 throw new UncheckedIOException("Sending request to " + uri + " failed.", e); 115 } 116 } 117 118 private final String mchid; 119 private final String certificateSerialNo; 120 private final PrivateKey privateKey; 121 private final String wechatPayPublicKeyId; 122 private final PublicKey wechatPayPublicKey; 123 124 public CompletePartnerServiceOrder(String mchid, String certificateSerialNo, String privateKeyFilePath, String wechatPayPublicKeyId, String wechatPayPublicKeyFilePath) { 125 this.mchid = mchid; 126 this.certificateSerialNo = certificateSerialNo; 127 this.privateKey = WXPayUtility.loadPrivateKeyFromPath(privateKeyFilePath); 128 this.wechatPayPublicKeyId = wechatPayPublicKeyId; 129 this.wechatPayPublicKey = WXPayUtility.loadPublicKeyFromPath(wechatPayPublicKeyFilePath); 130 } 131 132 public static class CompletePartnerServiceOrderRequest { 133 @SerializedName("service_id") 134 public String serviceId; 135 136 @SerializedName("sub_mchid") 137 public String subMchid; 138 139 @SerializedName("out_order_no") 140 @Expose(serialize = false) 141 public String outOrderNo; 142 143 @SerializedName("post_payments") 144 public List<Payment> postPayments = new ArrayList<Payment>(); 145 146 @SerializedName("post_discounts") 147 public List<ServiceOrderCoupon> postDiscounts; 148 149 @SerializedName("total_amount") 150 public Long totalAmount; 151 152 @SerializedName("time_range") 153 public TimeRange timeRange; 154 155 @SerializedName("location") 156 public Location location; 157 158 @SerializedName("profit_sharing") 159 public Boolean profitSharing; 160 161 @SerializedName("complete_time") 162 public String completeTime; 163 164 @SerializedName("goods_tag") 165 public String goodsTag; 166 167 @SerializedName("device") 168 public Device device; 169 } 170 171 public static class Payment { 172 @SerializedName("name") 173 public String name; 174 175 @SerializedName("amount") 176 public Long amount; 177 178 @SerializedName("description") 179 public String description; 180 181 @SerializedName("count") 182 public Long count; 183 } 184 185 public static class ServiceOrderCoupon { 186 @SerializedName("name") 187 public String name; 188 189 @SerializedName("description") 190 public String description; 191 192 @SerializedName("amount") 193 public Long amount; 194 195 @SerializedName("count") 196 public Long count; 197 } 198 199 public static class TimeRange { 200 @SerializedName("start_time") 201 public String startTime; 202 203 @SerializedName("end_time") 204 public String endTime; 205 206 @SerializedName("start_time_remark") 207 public String startTimeRemark; 208 209 @SerializedName("end_time_remark") 210 public String endTimeRemark; 211 } 212 213 public static class Location { 214 @SerializedName("start_location") 215 public String startLocation; 216 217 @SerializedName("end_location") 218 public String endLocation; 219 } 220 221 public static class Device { 222 @SerializedName("start_device_id") 223 public String startDeviceId; 224 225 @SerializedName("end_device_id") 226 public String endDeviceId; 227 228 @SerializedName("materiel_no") 229 public String materielNo; 230 } 231 232} 233
需配合微信支付工具库 wxpay_utility 使用,请参考Go
1package main 2 3import ( 4 "bytes" 5 "demo/wxpay_utility" // 引用微信支付工具库,参考 https://pay.weixin.qq.com/doc/v3/partner/4015119446 6 "encoding/json" 7 "fmt" 8 "net/http" 9 "net/url" 10 "strings" 11 "time" 12) 13 14func main() { 15 // TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/partner/4013080340 16 config, err := wxpay_utility.CreateMchConfig( 17 "19xxxxxxxx", // 商户号,是由微信支付系统生成并分配给每个商户的唯一标识符,商户号获取方式参考 https://pay.weixin.qq.com/doc/v3/partner/4013080340 18 "1DDE55AD98Exxxxxxxxxx", // 商户API证书序列号,如何获取请参考 https://pay.weixin.qq.com/doc/v3/partner/4013058924 19 "/path/to/apiclient_key.pem", // 商户API证书私钥文件路径,本地文件路径 20 "PUB_KEY_ID_xxxxxxxxxxxxx", // 微信支付公钥ID,如何获取请参考 https://pay.weixin.qq.com/doc/v3/partner/4013038589 21 "/path/to/wxp_pub.pem", // 微信支付公钥文件路径,本地文件路径 22 ) 23 if err != nil { 24 fmt.Println(err) 25 return 26 } 27 28 request := &CompletePartnerServiceOrderRequest{ 29 OutOrderNo: wxpay_utility.String("1234323JKHDFE1243252"), 30 ServiceId: wxpay_utility.String("2002000000000558128851361561536"), 31 SubMchid: wxpay_utility.String("1900000109"), 32 PostPayments: []Payment{Payment{ 33 Name: wxpay_utility.String("就餐费用"), 34 Amount: wxpay_utility.Int64(40000), 35 Description: wxpay_utility.String("就餐人均100元"), 36 Count: wxpay_utility.Int64(4), 37 }}, 38 PostDiscounts: []ServiceOrderCoupon{ServiceOrderCoupon{ 39 Name: wxpay_utility.String("满20减1元"), 40 Description: wxpay_utility.String("不与其他优惠叠加"), 41 Amount: wxpay_utility.Int64(100), 42 Count: wxpay_utility.Int64(2), 43 }}, 44 TotalAmount: wxpay_utility.Int64(50000), 45 TimeRange: &TimeRange{ 46 StartTime: wxpay_utility.String("20091225091010"), 47 EndTime: wxpay_utility.String("20091225121010"), 48 StartTimeRemark: wxpay_utility.String("备注1"), 49 EndTimeRemark: wxpay_utility.String("备注2"), 50 }, 51 Location: &Location{ 52 StartLocation: wxpay_utility.String("嗨客时尚主题展餐厅"), 53 EndLocation: wxpay_utility.String("嗨客时尚主题展餐厅"), 54 }, 55 ProfitSharing: wxpay_utility.Bool(false), 56 CompleteTime: wxpay_utility.Time(time.Now()), 57 GoodsTag: wxpay_utility.String("goods_tag"), 58 Device: &Device{ 59 StartDeviceId: wxpay_utility.String("HG123456"), 60 EndDeviceId: wxpay_utility.String("HG123456"), 61 MaterielNo: wxpay_utility.String("example_materiel_no"), 62 }, 63 } 64 65 err = CompletePartnerServiceOrder(config, request) 66 if err != nil { 67 fmt.Printf("请求失败: %+v\n", err) 68 // TODO: 请求失败,根据状态码执行不同的处理 69 return 70 } 71 72 // TODO: 请求成功,继续业务逻辑 73 fmt.Println("请求成功") 74} 75 76func CompletePartnerServiceOrder(config *wxpay_utility.MchConfig, request *CompletePartnerServiceOrderRequest) (err error) { 77 const ( 78 host = "https://api.mch.weixin.qq.com" 79 method = "POST" 80 path = "/v3/payscore/partner/serviceorder/{out_order_no}/complete" 81 ) 82 83 reqUrl, err := url.Parse(fmt.Sprintf("%s%s", host, path)) 84 if err != nil { 85 return err 86 } 87 reqUrl.Path = strings.Replace(reqUrl.Path, "{out_order_no}", url.PathEscape(*request.OutOrderNo), -1) 88 reqBody, err := json.Marshal(request) 89 if err != nil { 90 return err 91 } 92 httpRequest, err := http.NewRequest(method, reqUrl.String(), bytes.NewReader(reqBody)) 93 if err != nil { 94 return err 95 } 96 httpRequest.Header.Set("Accept", "application/json") 97 httpRequest.Header.Set("Wechatpay-Serial", config.WechatPayPublicKeyId()) 98 httpRequest.Header.Set("Content-Type", "application/json") 99 authorization, err := wxpay_utility.BuildAuthorization(config.MchId(), config.CertificateSerialNo(), config.PrivateKey(), method, reqUrl.RequestURI(), reqBody) 100 if err != nil { 101 return err 102 } 103 httpRequest.Header.Set("Authorization", authorization) 104 105 client := &http.Client{} 106 httpResponse, err := client.Do(httpRequest) 107 if err != nil { 108 return err 109 } 110 respBody, err := wxpay_utility.ExtractResponseBody(httpResponse) 111 if err != nil { 112 return err 113 } 114 if httpResponse.StatusCode >= 200 && httpResponse.StatusCode < 300 { 115 // 2XX 成功,验证应答签名 116 err = wxpay_utility.ValidateResponse( 117 config.WechatPayPublicKeyId(), 118 config.WechatPayPublicKey(), 119 &httpResponse.Header, 120 respBody, 121 ) 122 if err != nil { 123 return err 124 } 125 return nil 126 } else { 127 return wxpay_utility.NewApiException( 128 httpResponse.StatusCode, 129 httpResponse.Header, 130 respBody, 131 ) 132 } 133} 134 135type CompletePartnerServiceOrderRequest struct { 136 ServiceId *string `json:"service_id,omitempty"` 137 SubMchid *string `json:"sub_mchid,omitempty"` 138 OutOrderNo *string `json:"out_order_no,omitempty"` 139 PostPayments []Payment `json:"post_payments,omitempty"` 140 PostDiscounts []ServiceOrderCoupon `json:"post_discounts,omitempty"` 141 TotalAmount *int64 `json:"total_amount,omitempty"` 142 TimeRange *TimeRange `json:"time_range,omitempty"` 143 Location *Location `json:"location,omitempty"` 144 ProfitSharing *bool `json:"profit_sharing,omitempty"` 145 CompleteTime *time.Time `json:"complete_time,omitempty"` 146 GoodsTag *string `json:"goods_tag,omitempty"` 147 Device *Device `json:"device,omitempty"` 148} 149 150func (o *CompletePartnerServiceOrderRequest) MarshalJSON() ([]byte, error) { 151 type Alias CompletePartnerServiceOrderRequest 152 a := &struct { 153 OutOrderNo *string `json:"out_order_no,omitempty"` 154 *Alias 155 }{ 156 // 序列化时移除非 Body 字段 157 OutOrderNo: nil, 158 Alias: (*Alias)(o), 159 } 160 return json.Marshal(a) 161} 162 163type Payment struct { 164 Name *string `json:"name,omitempty"` 165 Amount *int64 `json:"amount,omitempty"` 166 Description *string `json:"description,omitempty"` 167 Count *int64 `json:"count,omitempty"` 168} 169 170type ServiceOrderCoupon struct { 171 Name *string `json:"name,omitempty"` 172 Description *string `json:"description,omitempty"` 173 Amount *int64 `json:"amount,omitempty"` 174 Count *int64 `json:"count,omitempty"` 175} 176 177type TimeRange struct { 178 StartTime *string `json:"start_time,omitempty"` 179 EndTime *string `json:"end_time,omitempty"` 180 StartTimeRemark *string `json:"start_time_remark,omitempty"` 181 EndTimeRemark *string `json:"end_time_remark,omitempty"` 182} 183 184type Location struct { 185 StartLocation *string `json:"start_location,omitempty"` 186 EndLocation *string `json:"end_location,omitempty"` 187} 188 189type Device struct { 190 StartDeviceId *string `json:"start_device_id,omitempty"` 191 EndDeviceId *string `json:"end_device_id,omitempty"` 192 MaterielNo *string `json:"materiel_no,omitempty"` 193} 194
应答参数
204 No Content
无应答包体
应答示例
204 No Content
1'无应答包体' 2
错误码
公共错误码
状态码 | 错误码 | 描述 | 解决方案 |
---|---|---|---|
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开头的状态码都为系统问题,请使用相同参数稍后重新调用 |