# 微信直连支付代理

基础字段参数说明见: index.md

统一前缀:/open/v1/ 完整的Path:/open/v1/generalpay/unifiedorder

# 8.1 微信支付下单

  • 接口说明 本接口用于微信支付下单,业务侧发起支付时调用,返回微信支付参数。
  • 请求地址 /openpay/unifiedorder
  • 请求方式 POST
  • 请求参数 通用参数 + 业务参数
参数名称 类型 最大长度 必选 说明
user_code string 32 用户标识(同插件跳转的 openId 参数、车机小程序的openId)
app_id string 32 同插件跳转的 appId 参数(下单小程序的微信appId,小程序支付必填)
biz_order_id string 32 业务订单ID
user_id string 32 用户出行的用户userId
total_fee int 11 订单支付金额,单位分
description string 100 商品描述
client_ip string 45 用户的客户端IP,IPv4格式IP地址
trade_type int 11 交易类型 1:标识小程序支付,2:标识native支付
pay_channel int 11 来源渠道 1:小程序,2:车机
scense string 32 场景值,扩展用
wecar_id string 32 腾讯车联wecarId
expired_time long 20 订单过期时间,毫秒
goods_tag string 32 订单优惠标记,(微信代金券场景)
profit_sharing int 11 是否指定分账,枚举值1:分账,0:不分账
  • 返回数据
参数名称 类型 最大长度 必选 说明
code int 11 服务响应状态,参见错误码表
message string 64 服务响应状态说明,参见错误码表
data object - -
data.trade_no string 32 交易订单号
  • 请求数据示例
{
  "api_key":"7ec26deb685c40249ffd",
  "seq_id":"136164a8-8939-437c-8fe3-1264c7ef488d",
  "timestamp":1633005812,
  "nonce":"157234207",
  "sign":"54C17EB339CE13E3A8D434EEE744225B",
  "scense":"scense",
  "user_code":"ou8xs5ftxmNOC9VzJf17xnXaoEkI",
  "app_id":"wx65cc950f42e8fff1",
  "biz_order_id":"1000000102",
  "user_id":"144802",
  "total_fee":10,
  "description":"C1111101",
  "client_ip":"111.206.145.56",
  "expired_time":1633004121000,
  "trade_type":2,
  "goods_tag":"",
  "profit_sharing":0,
  "pay_channel":2
}
  • 返回数据示例
{
  "code": 0,
  "message": "successful"
  "data":{
      "trade_no":""
  }
}

# 8.2 查询支付订单信息

  • 接口说明 本接口用于查询支付订单信息
  • 请求地址 /generalpay/orderquery
  • 请求方式 POST
  • 请求参数 通用参数 + 业务参数
参数名称 类型 最大长度 必选 说明
user_code string 32 用户标识(同插件跳转的 openId 参数、车机小程序的openId)
app_id string 32 同插件跳转的 appId 参数(下单小程序的微信appId,小程序支付必填)
biz_order_id string 32 业务订单ID
user_id string 32 用户出行的用户userId
pay_channel int 11 来源渠道 1:小程序,2:车机
  • 返回数据
参数名称 类型 最大长度 必选 说明
code int 11 服务响应状态,参见错误码表
message string 64 服务响应状态说明,参见错误码表
data object - -
data.trade_status int 11 支付状态
data.trade_type int 11 交易类型, 1:标识小程序支付,2:标识native支付
data.total_fee int 11 订单总金额,单位为分
data.biz_order_id string 32 业务侧订单id
data.trade_no string 32 交易侧订单id
data.transaction_id string 64 微信支付订单号
data.cash_fee int 11 现金支付金额订单现金支付金额
data.payed_time long 20 订单支付时间,单位毫秒
data.trade_state_desc string 256 对当前查询订单状态的描述和下一步操作的指引
data.coupon_fee int 11 “代金券”金额<=订单金额,订单金额-“代金券”金额=现金支付金额,
data.coupon_info array - 代金券信息
data.coupon_info.coupon_type string - CASH:充值代金券NO_CASH:非充值优惠券
data.coupon_info.coupon_id string 20 代金券ID
data.coupon_info.coupon_fee int 11 代金券支付金额
 trade_status说明:
    PS_DEFAULT=0,//默认
    PS_SUCCESS=1,//支付成功
    PS_REFUND=2,//转入退款
    PS_NOTPAY=3,//未支付
    PS_CLOSED=4,//已关闭
    PS_REVOKED=5,//已撤销(付款码支付)
    PS_USERPAYING=6,//用户支付中(付款码支付)
    PS_PAYERROR=7,//支付失败
    PS_ACCEPT=8,//已接收,等待扣款
  • 请求数据示例
{
    "api_key":"7ec26deb685c40249ffd",
    "seq_id":"136164a8-8939-437c-8fe3-1264c7ef488d",
    "timestamp":1633245377,
    "nonce":"157234207",
    "sign":"6C9AE8972E55B1341D94167843629A11",
    "user_code":"ou8xs5ftxmNOC9VzJf17xnXaoEkI",
    "app_id":"wx65cc950f42e8fff1",
    "biz_order_id":"1000000101",
    "user_id":"144802",
    "pay_channel":1
}
  • 返回数据示例
{
  "code": 0,
  "message": "successful"
  "data":{ 
    "cash_fee": 1400, 
    "coupon_fee": 0,  
    "biz_order_id": "854309568367386632",
    "trade_status": 1,
    "payed_time": 1623727067000,
    "total_fee": 1400,
    "trade_state_desc": "支付成功",
    "trade_type": 1,
    "transactionId": "4200001228202106155230856416",
    "vCouponInfo": [
        {
            "coupon_fee": 3000,
            "coupon_id": "24498233520",
            "coupon_type": "NO_CASH"
        }
    ]
}
}

# 8.3 关闭订单

  • 接口说明 以下情况需要调用关单接口:商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付;系统下单后,用户支付超时,系统退出不再受理,避免用户继续,请调用关单接口。

注意:订单生成后不能马上调用关单接口,最短调用时间间隔为5分钟。

  • 请求地址 /generalpay/closeorder
  • 请求方式 POST
  • 请求参数 通用参数 + 业务参数
参数名称 类型 最大长度 必选 说明
user_code string 32 用户标识(同插件跳转的 openId 参数、车机小程序的openId)
app_id string 32 同插件跳转的 appId 参数(下单小程序的微信appId,小程序支付必填)
biz_order_id string 32 业务订单ID
user_id string 32 用户出行的用户userId
pay_channel int 11 来源渠道 1:小程序,2:车机
reason string 50 关闭原因
  • 返回数据
参数名称 类型 最大长度 必选 说明
code int 11 服务响应状态,参见错误码表
message string 64 服务响应状态说明,参见错误码表
data object - -
  • 请求数据示例
{
    "api_key":"7ec26deb685c40249ffd",
    "seq_id":"136164a8-8939-437c-8fe3-1264c7ef488d",
    "timestamp":1633010512,
    "nonce":"157234207",
    "sign":"E5687D9056264437C4B77273B4A0E010",
    "user_code":"ou8xs5ftxmNOC9VzJf17xnXaoEkI",
    "app_id":"wx65cc950f42e8fff1",
    "biz_order_id":"1000000101",
    "user_id":"144802",
    "pay_channel":1,
    "reason":"test"
}
  • 返回数据示例
{
  "code": 0,
  "message": "successful"
}

# 8.4 申请退款

  • 接口说明 当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,微信支付将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家账号上。 1、交易时间超过一年的订单无法提交退款 2、微信支付退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。申请退款总金额不能超过订单金额。 一笔退款失败后重新提交,请不要更换退款单号,请使用原商户退款单号
  • 请求地址 /generalpay/refund
  • 请求方式 POST
  • 请求参数 通用参数 + 业务参数
参数名称 类型 最大长度 必选 说明
user_code string 32 用户标识(同插件跳转的 openId 参数、车机小程序的openId)
app_id string 32 同插件跳转的 appId 参数(下单小程序的微信appId,小程序支付必填)
biz_order_id string 32 业务订单ID
user_id string 32 用户出行的用户userId
pay_channel int 11 来源渠道 1:小程序,2:车机
biz_order_id string 32 业务侧订单id
trade_no string 32 交易侧订单id
biz_refund_id string 64 商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔。
total_fee int 11 订单金额
refund_fee int 11 申请退款金额,单位为分
refund_desc string 100 退款原因
client_ip string 45 用户的客户端IP,IPv4格式IP地址
  • 返回数据
参数名称 类型 最大长度 必选 说明
code int 11 服务响应状态,参见错误码表
message string 64 服务响应状态说明,参见错误码表
data object - -
data.trade_no string 32 交易侧订单id
data.refund_id string 32 微信退款单号
data.refund_no string 32 交易侧退款单号
  • 请求数据示例
{
  "api_key": "PSUBZLHOKUO6HV52A5CAUSSE5KSB6Y",
  "seq_id": "38d42bd9-9f5a-415e-89d9-ea4ff9cffdf2",
  "timestamp": "1572342076",
  "nonce": "157234207",
  "sign": "8A983278E5366EB93FEB0D4143E1C522",
  "user_code": "udxbxd",
  "biz_order_id": "193839494",
  "transaction_id": "2",
  "refund_no": "2",
  "total_fee": 2,
  "refund_fee": 2,
  "refund_desc": "退款原因",
}
  • 返回数据示例
{
  "code": 0,
  "message": "successful",
  "data": {
      "refund_id","50301108462021061509759819015"
  }
}

# 8.5查询退款

  • 接口说明 提交退款申请后,通过调用该接口查询退款状态。退款有一定延时,用零钱支付的退款20分钟内到账,银行卡支付的退款3个工作日后重新查询退款状态。

注意:如果单个支付订单部分退款次数超过20次请使用退款单号查询

  • 请求地址 /generalpay/refundquery
  • 请求方式 POST
  • 请求参数 通用参数 + 业务参数
参数名称 类型 最大长度 必选 说明
user_code string 32 用户标识(同插件跳转的 openId 参数、车机小程序的openId)
app_id string 32 同插件跳转的 appId 参数(下单小程序的微信appId,小程序支付必填)
biz_order_id string 32 业务订单ID
user_id string 32 用户出行的用户userId
pay_channel int 11 来源渠道 1:小程序,2:车机
trade_no string 32 交易侧订单id
biz_refund_id string 64 商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔。
refund_no string 64 交易侧退款单号
  • 返回数据
参数名称 类型 最大长度 必选 说明
code int 11 服务响应状态,参见错误码表
message string 64 服务响应状态说明,参见错误码表
data object - -
data.refund_status int 11 退款状态
data.biz_order_id string 32 商户侧订单id
data.transaction_id string 32 微信支付订单号
data.total_fee int 11 订单总金额,单位为分
data.cash_fee int 11 现金支付金额,单位为分
data.refund_fee int 11 申请退款金额,单位分
data.settlement_refund_fee int 11 退款金额=申请退款金额-非充值代金券退款金额,退款金额<=申请退款金额
data.refunded_time long 20 订单退款完成时间,单位毫秒
data.refund_account string 30 退款资金来源
data.refund_recv_accout string 64 退款入账账户
data.coupon_info Array - 代金券信息
data.coupon_info.coupon_type string - CASH:充值代金券、NO_CASH:非充值优惠券
data.coupon_info.coupon_id string 20 代金券ID
data.coupon_info.coupon_fee int 11 代金券支付金额
 退款状态
        RS_DEFAULT=0,//默认
        RS_SUCCESS=1,//退款成功
        RS_REFUNDCLOSE=2,//退款关闭
        RS_PROCESSING=3,//退款处理中
        RS_CHANGE=4//退款异常
 退款资金来源
REFUND_SOURCE_RECHARGE_FUNDS---可用余额退款/基本账户
REFUND_SOURCE_UNSETTLED_FUNDS---未结算资金退款
  • 请求数据示例
{
  "api_key": "PSUBZLHOKUO6HV52A5CAUSSE5KSB6Y",
  "seq_id": "38d42bd9-9f5a-415e-89d9-ea4ff9cffdf2",
  "timestamp": "1572342076",
  "nonce": "157234207",
  "sign": "8A983278E5366EB93FEB0D4143E1C522",
  "user_code": "udxbxd",
  "biz_order_id": "193839494",
  "refund_no": "2",
  "refund_id": "2"
}
  • 返回数据示例
{
  "code": 0,
  "message": "successful",
  "data":{

  }
}

# 8.6 支付成功通知

  • 接口说明 通过支付通知接口将用户支付成功消息通知给商户

  • 请求地址 接入商提供

  • 请求方式 POST

  • 请求参数 通用参数 + 业务参数

参数名称 类型 最大长度 必选 说明
biz_order_id string 32 业务订单ID
trade_no string 32 交易侧订单id
transaction_id string 32 微信支付订单号
trade_type int 11 交易类型
trade_state int 11 交易状态
trade_state_desc string 256 交易状态描述
bank_type string 16 银行类型
payed_time long 20 支付完成时间
total int 11 总金额
payer_total int 11 用户支付金额
  • 返回数据
参数名称 类型 最大长度 必选 说明
code int 11 服务响应状态,参见错误码表
message string 64 服务响应状态说明,参见错误码表
data object - -
  • 请求数据示例
{
  "api_key": "PSUBZLHOKUO6HV52A5CAUSSE5KSB6Y",
  "seq_id": "38d42bd9-9f5a-415e-89d9-ea4ff9cffdf2",
  "timestamp": "1572342076",
  "nonce": "157234207",
  "sign": "8A983278E5366EB93FEB0D4143E1C522",
  "user_code": "udxbxd",
  "biz_order_id": "193839494",
  "refund_no": "2",
  "refund_id": "2"
}
  • 返回数据示例
{
  "code": 0,
  "message": "successful",
  "data":{

  }
}

# 8.7 退款成功通知

  • 接口说明 退款状态改变后,微信会把相关退款结果发送给商户

  • 请求地址 接入商提供

  • 请求方式 POST

  • 请求参数 通用参数 + 业务参数

参数名称 类型 最大长度 必选 说明
biz_order_id string 32 业务订单ID
trade_no string 32 交易侧订单id
biz_refund_id string 64 微信支付退款单号
refund_id string 32 微信退款单号
refund_status int 11 退款状态
user_received_account string 64 退款入账账户
refunded_time long 20 完成时间
total int 11 总金额
payer_total int 11 用户支付金额
refund int 11 退款金额
payer_refund int 11 用户退款金额,退款给用户的金额,不包含所有优惠券金额
  • 返回数据
参数名称 类型 最大长度 必选 说明
code int 11 服务响应状态,参见错误码表
message string 64 服务响应状态说明,参见错误码表
data object - -
  • 请求数据示例
{
  "api_key": "PSUBZLHOKUO6HV52A5CAUSSE5KSB6Y",
  "seq_id": "38d42bd9-9f5a-415e-89d9-ea4ff9cffdf2",
  "timestamp": "1572342076",
  "nonce": "157234207",
  "sign": "8A983278E5366EB93FEB0D4143E1C522",
  "user_code": "udxbxd",
  "biz_order_id": "193839494",
  "refund_no": "2",
  "refund_id": "2"
}
  • 返回数据示例
{
  "code": 0,
  "message": "successful",
  "data":{

  }
}

附录一、code错误码

UNKNOWN_EXCEPTION(-2, "未知异常"),
SERVER_ERROR(-1, "服务端异常"),
SUCCESS(0, "成功"),
HTTP_NOT_FOUND(404, "请求路径错误"),
HTTP_BAD_METHOD(405, "不支持该请求方法"),
PARAMETER_ERROR(1001, "参数错误"),
AUTH_FAILED(1002, "鉴权错误"),
ILLEGAL_API_KEY(1003, "api_key不合法"),

USER_CODE_FORMAT_ERROR(1209, "userCode格式错误"),
APP_ID_FORMAT_ERROR(1210, "appId格式错误"),
MCH_ID_FORMAT_ERROR(1211, "mchId格式错误"),
MCH_ID_MUST_NOT_BLANK(1212, "mchId不能为空"),
OPEN_ID_FORMAT_ERROR(1213, "openId格式错误"),
OPEN_ID_MUST_NOT_BLANK(1214, "openId不能为空"),
DESC_MUST_NOT_BLANK(1215, "description不能为空或者超长"),
CLIENT_IP_MUST_NOT_BLANK(1216, "client_ip不能为空或者超长"),
BUFF_TIME_MUST_NOT_BLANK(1217, "支付参数有效期,不能为空或者超2小时或小于1分钟"),
PROFIT_SHARING_MUST_NOT_BLANK(1218, "分账标识格式错误.{0,1}"),
TRANSACTION_ID_FORMAT_ERROR(1219, "transaction_id格式错误"),
TRANSACTION_ID_MUST_NOT_BLANK(1220, "transaction_id不能为空"),
REFUND_NO_MUST_NOT_BLANK(1221, "refund_no不能为空或者超长"),
REFUND_ID_MUST_NOT_BLANK(1222, "refund_id不能为空或者超长"),

PAY_CLOSE_FAILED(90001, "支付关闭失败"),
PAY_UNIFIED_FAILED(90002, "支付下单失败"),
PAY_QUERY_FAILED(90003, "支付查询失败"),
PAY_REFUND_FAILED(90004, "支付申请退款失败"),
PAY_REFUND_QUERY_FAILED(90005, "支付查询退款失败"),
PAY_API_KEY_AUTH_FAILED(90006, "api_key没有相应权限"),
PAY_INVALID_USER_ID(91000, "userid 为空"),
PAY_INVALID_MCH_ID(91001, "mchid 为空"),
PAY_INVALID_APP_ID(91004, "appid 为空"),
PAY_INVALID_CLIENT_IP(91005, "clientIp 为空"),
PAY_INVALID_ORDER_ID(91006, "orderId 为空"),
PAY_ERR_ORDER_NOT_EXIST(91050, "orderId 为空"),
PAY_ERR_WX_SYSTEM_FAIL(91051, "微信支付系统异常"),
PAY_ERR_INVALID_REQUEST(91052, "订单重入时,要求参数值与原请求一致,请确认参数问题"),
PAY_ERR_NOT_ENOUGH(91053, "余额不足"),
PAY_ERR_ORDER_PAID(91054, "订单已支付"),
PAY_ERR_ORDER_CLOSED(91055, "订单已关闭"),
PAY_ERR_SYSTEM_ERROR(91056, "系统错误"),
PAY_ERR_APPID_NOT_EXIST(91057, "APPID不存在"),
PAY_ERR_MCHID_NOT_EXIST(91058, "MCHID不存在"),
PAY_ERR_APPID_MCHID_NOT_MATCH(91059, "appid和mch_id不匹配"),
PAY_ERR_LACK_PARAMS(91060, "缺少参数"),
PAY_ERR_OUT_TRADE_NO_USED(91061, "商户订单号重复"),
PAY_ERR_BIZERR_NEED_RETRY(91062, "退款业务流程错误,需要商户触发重试来解决"),
PAY_ERR_TRADE_OVERDUE(91063, "订单已经超过退款期限"),
PAY_ERR_ERROR(91064, "业务错误"),
PAY_ERR_USER_ACCOUNT_ABNORMAL(91065, "退款请求失败"),
PAY_ERR_INVALID_REQ_TOO_MUCH(91066, "无效请求过多"),
PAY_ERR_INVALID_TRANSACTIONID(91068, "无效transaction_id"),
PAY_ERR_REFUND_NOTEXIST(91069, "退款订单查询失败"),
PAY_ERR_FREQUENCY_LIMITED(91070, "2个月之前的订单申请退款有频率限制 "),
PAY_ERR_NOAUTH(91071, "商户未开通此接口权限"),