# CloudPay.queryOrder()

> 支持端：[云函数 2.0.2](/minigame/dev/wxcloud/reference/changelog-server-sdk)

查询订单

## 说明

该接口提供所有微信支付订单的查询，商户可以通过该接口主动查询订单状态，完成下一步的业务逻辑。

需要调用查询接口的情况：

◆ 当商户后台、网络、服务器等出现异常，商户系统最终未接收到支付通知；
◆ 调用支付接口后，返回系统错误或未知交易状态情况；
◆ 调用被扫支付API，返回USERPAYING的状态；
◆ 调用关单或撤销接口API之前，需确认支付状态；

此接口与微信支付原接口（[文档](https://pay.weixin.qq.com/doc/v2/merchant/4011935215)）的不同点在于：
- 私有安全链路，免证书管理，免签名计算
- 商户号填入 sub_mch_id 字段，小程序/公众号 appid 填入 sub_appid 字段
- 免填写以下字段：mch_id、appid、sign、sign_type
- 接口入参和返回值都为 JSON 而不是 XML

### 参数说明

| 字段名        | 变量名         | 必填       | 类型       | 示例值                           | 描述                                          |
|---------------|----------------|------------|------------|----------------------------------|-----------------------------------------------|
| 子商户号      | sub_mch_id     | 是         | String(32) | 1900000109                       | 微信支付分配的子商户号                        |
| 微信订单号    | transaction_id | 二选一     | String(32) | 1009660380201506130728806387     | 微信的订单号，优先使用                        |
| 商户订单号    | out_trade_no   | 二选一     | String(32) | 1217752501201407033233368018     | 商户系统内部订单号，要求32个字符内，只能是数字、大小写字母_-|*@ ，且在同一个商户号下唯一。 |
| 随机字符串    | nonce_str      | 是         | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 随机字符串，不长于32位。推荐随机数生成算法    |

### 返回值说明

| 字段名     | 变量名      | 必填 | 类型        | 示例值   | 描述                                                                             |
|------------|-------------|------|-------------|----------|----------------------------------------------------------------------------------|
| 返回状态码 | returnCode | 是   | String(16)  | SUCCESS  | SUCCESS/FAIL 此字段是通信标识，非交易标识，交易是否成功需要查看trade_state来判断 |
| 返回信息   | returnMsg  | 否   | String(128) | 签名失败 | 返回信息，如非空，为错误原因。如 签名失败、参数格式校验错误                      |

以下字段在returnCode为SUCCESS的时候有返回

| 字段名        | 变量名       | 必填 | 类型        | 示例值                           | 描述                                       |
|---------------|--------------|------|-------------|----------------------------------|--------------------------------------------|
| 服务商的APPID | appid        | 是   | String(32)  | wxd678efh567hg6787               | 服务商商户的APPID                          |
| 商户号        | mch_id       | 是   | String(32)  | 1230000109                       | 微信支付分配的商户号                       |
| 小程序的APPID | sub_appid    | 是   | String(32)  | wx8888888888888888               | 微信分配的小程序ID                         |
| 子商户号      | sub_mch_id   | 是   | String(32)  | 1900000109                       | 微信支付分配的子商户号                     |
| 随机字符串    | nonce_str    | 是   | String(32)  | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS | 随机字符串，不长于32位。推荐[随机数生成算法](https://pay.weixin.qq.com/doc/v2/partner/4011985884#2%E3%80%81%E7%94%9F%E6%88%90%E9%9A%8F%E6%9C%BA%E6%95%B0%E7%AE%97%E6%B3%95) |
| 签名          | sign         | 是   | String(32)  | C380BEC2BFD727A4B6845133519F3AD6 | 签名，详见[签名生成算法](https://pay.weixin.qq.com/doc/v2/partner/4011985884#1%E3%80%81%E7%AD%BE%E5%90%8D%E7%AE%97%E6%B3%95)                     |
| 业务结果      | result_code  | 是   | String(16)  | SUCCESS                          | SUCCESS/FAIL                               |
| 错误代码      | err_code     | 否   | String(32)  | SYSTEMERROR                      | 错误码                                     |
| 错误代码描述  | err_code_des | 否   | String(128) | 系统错误                         | 结果信息描述                               |

以下字段在returnCode 和result_code都为SUCCESS的时候有返回

| 字段名             | 变量名               | 必填 | 类型        | 示例值                       | 描述                                                                                                                                                                                       |
|--------------------|----------------------|------|-------------|------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 设备号             | device_info          | 否   | String(32)  | 013467007045764                   | 微信支付分配的终端设备号，                                                                                                                                                                 |
| 用户标识           | openid               | 是   | String(128) | oUpF8uMuAJO_M2pxb1Q9zNjWeS6o | 用户在商户appid下的唯一标识                                                                                                                                                                |
| 是否关注公众账号   | is_subscribe         | 是   | String(1)   | Y                            | 用户是否关注公众账号，Y-关注，N-未关注                                                                                                                                                     |
| 用户子标识         | sub_openid           | 否   | String(128) | wxd930ea5d5a258f4f           | 用户在子商户appid下的唯一标识                                                                                                                                                              |
| 是否关注子公众账号 | sub_is_subscribe     | 否   | String(1)   | Y                            | 用户是否关注子公众账号，Y-关注，N-未关注                                                                                                                                                   |
| 交易类型           | trade_type           | 是   | String(16)  | JSAPI                        | 调用接口提交的交易类型，取值如下：JSAPI，NATIVE，APP，MICROPAY，详细说明见[参数规定](https://pay.weixin.qq.com/doc/v2/partner/4011941200)                                                                                                         |
| 交易状态           | trade_state          | 是   | String(32)  | SUCCESS                      | SUCCESS—支付成功 
 REFUND—转入退款 
  NOTPAY—未支付 
 CLOSED—已关闭 
 REVOKED—已撤销（刷卡支付） 
 USERPAYING--用户支付中 
 PAYERROR--支付失败(其他原因，如银行返回失败) |
| 付款银行           | bank_type            | 是   | String(16)  | CMC                          | 银行类型，采用字符串类型的银行标识                                                                                                                                                         |
| 订单金额           | total_fee            | 是   | Int         | 100                          | 订单总金额，单位为分                                                                                                                                                                       |
| 标价币种           | fee_type             | 否   | String(8)   | CNY                          | 货币类型，符合ISO 4217标准的三位字母代码，默认人民币：CNY，其他值列表详见[货币类型](https://pay.weixin.qq.com/doc/v2/partner/4011941200#3%E3%80%81%E8%B4%A7%E5%B8%81%E7%B1%BB%E5%9E%8B)                                                                                                          |
| 应结订单金额       | settlement_total_fee | 否   | Int         | 100                          | 当订单使用了免充值型优惠券后返回该参数，应结订单金额=订单金额-免充值优惠券金额。                                                                                                           |
| 现金支付金额       | cash_fee             | 是   | Int         | 100                          | 现金支付金额订单现金支付金额，详见[支付金额](https://pay.weixin.qq.com/doc/v2/partner/4011941200#1%E3%80%81%E4%BA%A4%E6%98%93%E9%87%91%E9%A2%9D)                                                                                                                                                 |
| 现金支付货币类型   | cash_fee_type        | 否   | String(16)  | CNY                          | 货币类型，符合ISO 4217标准的三位字母代码，默认人民币：CNY，其他值列表详见[货币类型](https://pay.weixin.qq.com/doc/v2/partner/4011941200#3%E3%80%81%E8%B4%A7%E5%B8%81%E7%B1%BB%E5%9E%8B)                                                                                                          |
| 代金券金额         | coupon_fee           | 否   | Int         | 100                          | “代金券或立减优惠”金额<=订单总金额，订单总金额-“代金券或立减优惠”金额=现金支付金额，详见[支付金额](https://pay.weixin.qq.com/doc/v2/partner/4011941200#1%E3%80%81%E4%BA%A4%E6%98%93%E9%87%91%E9%A2%9D)                                                                                           |
| 代金券使用数量     | coupon_count         | 否   | Int         | 1                            | 代金券或立减优惠使用数量                                                                                                                                                                   |
| 代金券ID           | coupon_id_$n         | 否   | String(20)  | 10000                        | 代金券或立减优惠ID, $n为下标，从0开始编号                                                                                                                                                  |
| 代金券类型         | coupon_type_$n       | 否   | String      | CASH                         | CASH--充值代金券 
 NO_CASH---非充值优惠券 
 开通免充值券功能，并且订单使用了优惠券后有返回（取值：CASH、NO_CASH）。$n为下标,从0开始编号，举例：coupon_type_$0                        |
| 单个代金券金额     | coupon_fee_$n        | 否   | Int         | 100                          | 单个代金券或立减优惠支付金额, $n为下标，从0开始编号                                                                                                                                        |
| 微信支付订单号     | transaction_id       | 是   | String(32)  | 1217752501201407033233368018                  | 微信支付订单号                                                                                                                                                                             |
| 商户订单号         | out_trade_no         | 是   | String(32)  | 1217752501201407033233368018                  | 商户系统内部订单号，要求32个字符内，只能是数字、大小写字母_-|*@ ，且在同一个商户号下唯一。                                                                                                 |
| 商家数据包         | attach               | 否   | String(128) | 123456                       | 商家数据包，原样返回                                                                                                                                                                       |
| 支付完成时间       | time_end             | 是   | String(14)  | 20141030133525                   | 订单支付时间，格式为yyyyMMddHHmmss，如2009年12月25日9点10分10秒表示为20091225091010。其他详见[时间规则](https://pay.weixin.qq.com/doc/v2/partner/4011941200#4%E3%80%81%E6%97%B6%E9%97%B4)                                                                                      |
| 交易状态描述       | trade_state_desc     | 是   | String(256) | 支付失败，请重新下单支付     | 对当前查询订单状态的描述和下一步操作的指引                                                                                                                                                 |

### 错误码

| 名称          | 描述               | 原因                         | 解决方案                                                                  |
|---------------|--------------------|------------------------------|---------------------------------------------------------------------------|
| ORDERNOTEXIST | 此交易订单号不存在 | 查询系统中不存在此交易订单号 | 该API只能查提交支付交易返回成功的订单，请商户检查需要查询的订单号是否正确 |
| SYSTEMERROR   | 系统错误           | 后台系统返回错误             | 系统异常，请再调用发起查询                                                |

## 代码示例

```js
// 云函数代码
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })

exports.main = async (event, context) => {
  const res = await cloud.cloudPay.queryOrder({
    subMchId: '1900000109',
    transactionId: '1217752501201407033233368018',
    nonceStr: '5K8264ILTKCH16CQ2502SI8ZNMTM67VS'
  })
  return res
}
```

如果是共享小程序调用，appid需要按如下方式传入`cloud.cloudPay({ appid: 'xxxxx' }).queryOrder({其他参数...})`，详情参考[环境共享指引文档](/minigame/dev/wxcloud/guide/resource-sharing/index)
