商户可以通过查询订单接口主动查询订单状态,并根据支付的结果来执行下一步的业务逻辑。查询订单状态可通过微信支付订单号或商户订单号两种方式进行查询,两种查询方式返回结果相同。需要调用查询接口的情况有:
支付订单查询接口通过HTTP的GET方法调用,并提供了通过微信订单号以及商户订单号两种方式来查询支付订单。
1)通过服务商微信订单号查询支付订单
接口的格式为:
https://api.mch.weixin.qq.com/v3/pay/partner/transactions/id/{transaction_id}?sp_mchid={sp_mchid}&sub_mchid={sub_mchid}
接口中的请求参数说明如下:
2)通过服务商商户订单号查询支付订单
接口的格式为:
https://api.mch.weixin.qq.com/v3/pay/partner/transactions/out-trade-no/{out-trade-no}?sp_mchid={sp_mchid}&sub_mchid={sub_mchid}
接口中的请求参数说明如下:
两种查询方式返回结果相同,返回结果的数据结构如下所示:
参数名 | 变量 | 描述 |
---|---|---|
服务商应用ID | sp_appid | 服务商申请的公众号或移动应用appid。 |
服务商户号 | sp_mchid | 服务商户号,由微信支付生成并下发 |
子商户应用ID | sub_appid | 子商户申请的公众号或移动应用appid。 |
子商户号 | sub_mchid | 子商户的商户号,由微信支付生成并下发。 |
商户订单号 | out_trade_no | 商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一。 |
微信支付订单号 | transaction_id | 微信支付系统生成的订单号。 |
交易类型 | trade_type | 交易类型,枚举值: |
交易状态 | trade_state | 交易状态,枚举值: |
交易状态描述 | trade_state_desc | 交易状态描述 |
付款银行 | bank_type | 银行类型,采用字符串类型的银行标识。 |
附加数据 | attach | 附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用 |
支付完成时间 | success_time | 支付完成时间。 |
+支付者 | payer | 支付者信息 |
+订单金额 | amount | 订单金额信息,当支付成功时返回该字段。 |
+场景信息 | scene_info | 支付场景描述 |
+优惠功能 | promotion_detail | 优惠功能,享受优惠时返回该字段。 |
通过商户订单号以及微信订单号查询支付订单的相关代码如下:
//支付订单查询
//transaction_id:微信支付订单号
//mchid:子商户号
func queryByTransactionIdX(ent *MchParam, transaction_id string, mchid string) (WxPayInfo, error) {
var par_info WxPayInfo
url := fmt.Sprintf("https://api.mch.weixin.qq.com/v3/pay/partner/transactions/id/%s?sp_mchid=%s&sub_mchid=%s",
transaction_id, ent.Mchid, mchid)
result, err := WxPayGetV3(ent, url)
if err != nil {
fmt.Println(err)
return par_info, err
}
err = json.Unmarshal([]byte(result), &par_info)
if err != nil {
fmt.Println(err)
return par_info, err
}
return par_info, nil
}
//支付订单查询
//out_trade_no:业务订单号
//mchid:子商户号
func queryByOutTradeNoX(ent *MchParam, out_trade_no string, mchid string) (WxPayInfo, error) {
var par_info WxPayInfo
url := fmt.Sprintf("https://api.mch.weixin.qq.com/v3/pay/partner/transactions/out-trade-no/%s?sp_mchid=%s&sub_mchid=%s",
out_trade_no, ent.Mchid, mchid)
result, err := WxPayGetV3(ent, url)
if err != nil {
fmt.Println(err)
return par_info, err
}
err = json.Unmarshal([]byte(result), &par_info)
if err != nil {
fmt.Println(err)
return par_info, err
}
return par_info, nil
}
直连商户订单查询与服务商订单查询基本一致,也可以通过微信支付订单号或商户订单号两种方式查询订单:
1)通过直连商户微信订单号查询支付订单
接口的格式为:
https://api.mch.weixin.qq.com/v3/pay/transactions/id/{transaction_id}?mchid={mchid}
接口中的请求参数说明如下:
2)通过直连商户微信订单号查询支付订单
接口的格式为:
https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/{out-trade-no}?mchid={mchid}
接口中的请求参数说明如下:
通过商户订单号以及微信订单号查询支付订单的相关代码如下:
//支付订单查询
//transaction_id:微信支付订单号
//mchid:商户号
func queryByTransactionId(ent *MchParam, transaction_id string, mchid string) (WxPayInfo, error) {
var par_info WxPayInfo
url := fmt.Sprintf("https://api.mch.weixin.qq.com/v3/pay/transactions/id/%s?mchid=%s", transaction_id, mchid)
result, err := WxPayGetV3(ent, url)
if err != nil {
fmt.Println(err)
return par_info, err
}
err = json.Unmarshal([]byte(result), &par_info)
if err != nil {
fmt.Println(err)
return par_info, err
}
return par_info, nil
}
//支付订单查询
//out_trade_no:业务订单号
//mchid:商户号
func queryByOutTradeNo(ent *MchParam, out_trade_no string, mchid string) (WxPayInfo, error) {
var par_info WxPayInfo
url := fmt.Sprintf("https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/%s?mchid=%s", out_trade_no, mchid)
result, err := WxPayGetV3(ent, url)
if err != nil {
return par_info, err
}
err = json.Unmarshal([]byte(result), &par_info)
if err != nil {
return par_info, err
}
return par_info, nil
}