HTTPS API 说明

最近更新时间:2019-04-30 17:53:38

说明

通讯说明

  • 所有接口均使用 HTTPS 通信,数据包格式为 json(HTTP 请求的 content-type 字段必须使用 application/json)。
  • 请求必须传认证或签名信息。其中退款请求,可以传签名和签名算法,也可以传认证码和认证算法,二选一,其他请求传认证码和认证算法。
  • 对响应要验证认证码。
  • 所有接口参数名使用的字母均为小写。

发送请求举例(使用 libcurl 实现)

/*
用于接受响应数据的回调函数
*/
size_t recv_data(char *ptr, size_t size, size_t nmemb, void *parm)
{
    size_t length = size * nmemb;
    std::string *data = (std::string*)parm;
    data->append(ptr, length);
    return length;
}
/*
将 request 用 POST 方式发送到 url,响应包填充到 response 指向的 string 中
返回是否 POST 请求是否成功
*/
bool post(const std::string &request, const std::string &url, std::string *response)
{
    CURL *hnd = curl_easy_init();

    curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
    curl_easy_setopt(hnd, CURLOPT_URL, url);

    struct curl_slist *headers = curl_slist_append(NULL, "content-type: application/json");
    curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);

    curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, request);

    // 设置云支付根证书
    curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 1);
    curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 2);
    curl_easy_setopt(hnd, CURLOPT_CAINFO, "./cloudpayrootca.pem");

    curl_easy_setopt(hnd, CURLOPT_WRITEFUNCTION, recv_data);
    std::string rc;
    curl_easy_setopt(hnd, CURLOPT_WRITEDATA, (void *)&rc);

    CURLcode ret = curl_easy_perform(hnd);
    if (CURLE_OK != ret) {
        curl_slist_free_all(headers);
        curl_easy_cleanup(hnd);
        return false;
    }
    *response = rc;

    curl_slist_free_all(headers);
    curl_easy_cleanup(hnd);
    return true;
}

数据包格式说明

  • 请求包含两个字段:authen_info和request_content,前者表示签名或认证信息,后者表示请求具体内容,均为 json 结构。
  • 响应包含两个字段:authen_info和response_content,前者表示认证信息,后者表示响应具体内容,均为 json 结构。
  • 签名生成算法:RSASSA-PSS-2048-SHA256,私钥为服务商在云支付录入商户时,在网页上生成的签名私钥(该私钥只有服务商知道,云支付不知道,请妥善保存)。
  • 认证码生成算法:HMAC-SHA256,认证密钥为服务商在云支付录入商户时,在网页上生成的认证密钥。
  • 如果不填非必填字段,则不要设置该字段,如需清空该字段,需上传内容为空的该字段。

计算认证码举例(使用 OpenSSL 实现)

/*
返回是否成功,成功时认证码存放于 hmac 指向的 string
*/
bool calc_HMAC_SHA256(const std::string &key, const std::string &input, std::string *hmac)
{
    unsigned char md[SHA256_DIGEST_LENGTH] = {0};//32 bytes
    char format_md[65] = {0};

    unsigned int md_len = sizeof(md);

    HMAC_CTX ctx;
    HMAC_CTX_init(&ctx);
    if (!HMAC_Init_ex(&ctx, key.data(), (int)key.length(), EVP_sha256(), NULL)  ||
        !HMAC_Update(&ctx, (const unsigned char *)input.data(), input.length()) ||
        !HMAC_Final(&ctx, md, &md_len)) {

        HMAC_CTX_cleanup(&ctx);
        return false;
    }
    HMAC_CTX_cleanup(&ctx);

    for (int i = 0; i < 32; i++) {
        snprintf(&format_md[i * 2], 3, "%02x", md[i]); //二进制转为十六进制大写
    }
    hmac->assign(format_md);

    // 转大写
    transform(hmac->begin(), hmac->end(), hmac->begin(), ::toupper);
    return true;
}

计算签名举例(使用 OpenSSL 实现)

/*
对计算得到的签名进行 base64 编码之后输出
返回是否成功,成功时签名存放于sign_base64encode指向的string
*/
bool calc_RSASSA_PSS_2048_SHA256(const std::string &key,
                                 const std::string &content,
                                 std::string *sign_base64encode)
{
    unsigned char digest[SHA256_DIGEST_LENGTH] = {0}; //32 bytes
    int digest_len = sizeof(digest);

    std::shared_ptr<BIO> bio(BIO_new_mem_buf((void *)key.c_str(), (int)key.length()), BIO_free);
    if (!bio) {
        return false;
    }

    std::shared_ptr<RSA> rsa(PEM_read_bio_RSAPrivateKey(bio.get(), NULL, NULL, NULL);, RSA_free);
    if (!rsa) {
        return false;
    }

    EVP_MD_CTX md_ctx; //当前使用 1.0.2e 版本
    EVP_MD_CTX_init   (&md_ctx);

    if (!EVP_DigestInit(&md_ctx, EVP_sha256())                                     ||
        !EVP_DigestUpdate(&md_ctx, (const void*)content.c_str(), content.length()) ||
        !EVP_DigestFinal(&md_ctx, digest, (unsigned int *)&digest_len)) {

        EVP_MD_CTX_cleanup(&md_ctx);
        return false;
    }

    EVP_MD_CTX_cleanup(&md_ctx);

    unsigned char em[256] = {0};
    unsigned char sign[256] = {0};
    int status = RSA_padding_add_PKCS1_PSS(rsa.get(), em, digest, EVP_sha256(), -2 /* maximum salt length*/);
    if (!status) {
        return false;
    }

    status = RSA_private_encrypt(sizeof(em), em, sign, rsa.get(), RSA_NO_PADDING);
    if (-1 == status) {
        return false;
    }

    *sign_base64encode = base64_encode(sign, sizeof(sign));
    return true;
}

构造请求举例(以刷卡支付为例)

{
        Json::Value pay_mch_key;      // 构造pay_mch_key
        pay_mch_key["pay_platform"]   = 1;
        pay_mch_key["out_mch_id"]     = "sz013NzuonO6CMJd0rCB";
        pay_mch_key["out_sub_mch_id"] = "sz01ELTR281OFpmdAp6J";
        pay_mch_key["out_shop_id"]    = "sz01qyoPJmd3j1hWmul4";

        Json::Value pay_content;      // 构造pay_content
        pay_content["out_trade_no"]   = "sz0100lmnx20171228151031";
        pay_content["author_code"]    = "134680423163089456";
        pay_content["total_fee"]      = 1;
        pay_content["fee_type"]       = "CNY";
        pay_content["attach"]         = "attach";

        Json::Value order_client;        // 构造order_client
        order_client["machine_no"]       = "32-62-A8-14-B3-C0";
        order_client["sdk_version"]      = "1.0";
        order_client["device_id"]        = 1;
        order_client["spbill_create_ip"] = "192.168.100.75";
        order_client["staff_id"]         = "1003";
        order_client["terminal_type"]    = 2;

        Json::Value request_content;     // 构造request_content
        request_content["pay_mch_key"]   = pay_mch_key;
        request_content["pay_content"]   = pay_content;
        request_content["order_client"]  = order_client;
        request_content["nonce_str"]     = "416492026bc84091bcaf7e74ea90ceba";

        Json::FastWriter w;
        std::string request_content_str = w.write(request_content);

        Json::Value authen;
        authen["authen_code"] = hmac_sha256(authen_key, request_content_str); //计算认证码
        authen["authen_type"] = 1; //hmac_sha256 为1

        Json::Value authen_info;
        authen_info["a"] = authen;  //认证码,签名是s

        Json::Value request;       //构造最终发给服务器的请求
        request["request_content"] = request_content_str;
        request["authen_info"]     = authen_info;

        std::string request_str = w.write(request);

        return request_str;
    }

响应举例(以刷卡支付为例)

  • 把响应包从 string 转成 json,取出 json 里面的 response_content 和 authen_info,具体如下:
{
    "response_content":"{
        "status":0,
        "description":"",
        "log_id":18654852,
        "internal_status":0,
        "micro_pay":{
            "pay_mch_key":{
                "pay_platform":2,
                "mch_id":"1900007941",
                "sub_mch_id":"1900008341",
                "out_mch_id":"1234mcWYS3iM5TjKLorAZ",
                "out_sub_mch_id":"12343ycHpBDv8GX]fmSvT7,
                "out_shop_id":"1234ruQCleTa9w30AaAH"
            },
            "order_content":{
                "out_trade_no":"12341008b320170802191960015",
                "transaction_id":"2017080221001004620281091091",
                "trade_type":1,
                "author_code":"282129340414399818",
                "time_expire":1501676124,
                "time_end":1501676005,
                "nonce_str":"542AB309ECA042FE92355BDEC4E2D733",
                "create_time":1501676004,
                "last_update_time":1501676005,
                "is_transforming":false,
                "total_fee":1,
                "fee_type":"CNY",
                "cash_fee":1,
                "settlement_total_fee":1,
                "body":"生活用品套餐",
                "alipay_order_content_ext":{
                    "current_trade_state":2,
                    "fund_bill_list":[
                        {"fund_channel": "ALIPAYACCOUNT","amount": 1}
                    ],
                    "point_amount":0,
                    "invoice_amount":1
                }
            },
            "nonce_str":"SmM10CXPlZLalY9PIYdVGVgxcs58wDRG"
        }
    }",
    "authen_info":{
        "a":{
            "authen_type":1,
            "authen_code":"ACD4C1920A6C8646B395D0CBB4AF9B395AC0601D1883D8EF2D7BD7238C2991A5"
        }
    }
}
  • 对 response_content 计算认证码,并将该认证码与 authen_info 的 authen_code 进行比较。

接口调用说明

  • 交易接口中的门店信息,必须和子商户在云支付手机端商户管理系统设置的一致。

订单和退款单号说明

  • 为了保护不同商户的订单号不重复,云支付为每个服务商录入的子商户分配了 “云支付订单前缀”,在云支付后台的商户详情中可以看到,该商户的订单和退款单必须以云支付子商户号做前缀。

交易接口

刷卡支付

接口地址

https://pay.qcloud.com/cpay/micro_pay

content_type:application/json

输入参数

参数名 必填 类型 说明
request_content RequestContent 请求内容,详见本节 RequestContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

RequestContent 结构

参数名 必填 类型 说明
pay_mch_key PayMchKey 支付商户信息,详见 PayMchKey
pay_content PayContent 订单信息,详见 PayContent
order_client OrderClient 客户端信息,详见 OrderClient
nonce_str String(32) 随机字符串

返回参数

参数名 必填 类型 说明
response_content ResponseContent 请求内容,详见本节 ResponseContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

ResponseContent 结构

参数名 必填 类型 说明
status Status 错误码,详见 Status。0 :成功;非0:失败或者需要重试,具体见实际返回的错误码
description String(255) 错误描述
log_id Number(32) 消息id
internal_status Number(32) 错误码为407时,说明客户端发生异常,支付时单号重复,但金额等其他信息不重复,被云支付的防重入挡住,此时,请一定不要撤单,否则会造成已支付的订单退款,给商户造成损失。其余错误码不用关注。
micro_pay MicroPayResponse authen_info 存在时必填。详见 MicroPayResponse

MicroPayResponse 结构

参数名 必填 类型 说明
nonce_str String(32) 随机字符串
pay_mch_key PayMchKey 支付商户信息,status 为 0 时必填。详见 PayMchKey
order_content OrderContent 订单信息,status 为0时必填。详见 OrderContent

构造刷卡支付请求例子

/*
构造请求字符串
*/
std::string gen_cloud_pay_micropay(
    const int         &pay_platform,
    const std::string &out_mch_id,
    const std::string &out_sub_mch_id,
    const std::string &out_shop_id,
    const std::string &out_trade_no,
    const std::string &author_code,
    const int64_t     &total_fee,
    const std::string &fee_type,
    const std::string &device_id,
    const std::string &staff_id,
    const int         &terminal_type,
    const std::string &machine_no,
    const std::string &sdk_version,
    const std::string &spbill_create_ip,
    const std::string &authen_key
)
{
    Json::Value request_content;
    request_content["nonce_str"] = generate_random_nonce_str();

    Json::Value pay_mch_key, pay_content, order_client;

    pay_mch_key["pay_platform"]    = pay_platform;
    pay_mch_key["out_mch_id"]      = out_mch_id;
    pay_mch_key["out_sub_mch_id"]  = out_sub_mch_id;
    pay_mch_key["out_shop_id"]     = out_shop_id;
    request_content["pay_mch_key"] = pay_mch_key;

    pay_content["out_trade_no"]    = out_trade_no;
    pay_content["author_code"]     = author_code;
    pay_content["total_fee"]       = total_fee;
    pay_content["fee_type"]        = fee_type;
    request_content["pay_content"] = pay_content;

    order_client["device_id"]        = device_id;
    order_client["staff_id"]         = staff_id;
    order_client["terminal_type"]    = terminal_type;
    order_client["machine_no"]       = machine_no;
    order_client["sdk_version"]      = sdk_version;
    order_client["spbill_create_ip"] = spbill_create_ip;
    request_content["order_client"]  = order_client;

    Json::FastWriter w;
    const std::string &rc = w.write(request_content);

    Json::Value authen_info, a;
    a["authen_type"] = 1;
    // 使用计算认证码举例(使用OpenSSL实现)中的函数计算认证码
    std::string authen_code;
    if (!calc_HMAC_SHA256(authen_key, rc, &authen_code)) {
        // 计算失败
        return "";
    }
    a["authen_code"] = authen_code;
    authen_info["a"] = a;

    Json::Value request;
    request["request_content"] = rc;
    request["authen_info"] = authen_info;

    return w.write(request);
}
/*
构造请求完毕之后,将请求通过POST方法发送到云支付接口对应的URL
使用了发送请求举例(使用libcurl实现)中的post函数
*/
std::string response;
post(request, "https://pay.qcloud.com/cpay/micro_pay", &response);

扫码支付

接口地址

https://pay.qcloud.com/cpay/scan_code_pay

content_type:application/json

输入参数

参数名 必填 类型 说明
request_content RequestContent 请求内容,详见本节 RequestContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

RequestContent结构

参数名 必填 类型 说明
pay_mch_key PayMchKey 支付商户信息,详见 PayMchKey
pay_content PayContent 订单信息,详见 PayContent
order_client OrderClient 客户端信息,详见 OrderClient
nonce_str String(32) 随机字符串

返回参数

参数名 必填 类型 说明
response_content ResponseContent 请求内容,详见本节 ResponseContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

ResponseContent 结构

参数名 必填 类型 说明
status Status 错误码,详见 Status。0 :成功;非 0:失败或者需要重试,具体见实际返回的错误码
description String(255) 错误描述
log_id Number(32) 消息id
internal_status Number(32) 调试使用,调用者可以不予理会
scan_code_pay ScanCodePayResponse authen_info 存在时必填。详见 ScanCodePayResponse

ScanCodePayResponse 结构

参数名 必填 类型 说明
nonce_str String(32) 随机字符串
code_url String(64) status为0时必填。用于扫码支付时转换成支付二维码

构造扫码支付请求例子

/*
构造请求字符串
*/
std::string gen_cloud_pay_scan_code_pay(
    const int         &pay_platform,
    const std::string &out_mch_id,
    const std::string &out_sub_mch_id,
    const std::string &out_shop_id,
    const std::string &out_trade_no,
    const int64_t     &total_fee,
    const std::string &fee_type,
    const std::string &device_id,
    const std::string &staff_id,
    const int         &terminal_type,
    const std::string &machine_no,
    const std::string &sdk_version,
    const std::string &spbill_create_ip,
    const std::string &authen_key
)
{
    Json::Value request_content;
    request_content["nonce_str"] = generate_random_nonce_str();

    Json::Value pay_mch_key, pay_content, order_client;

    pay_mch_key["pay_platform"]    = pay_platform;
    pay_mch_key["out_mch_id"]      = out_mch_id;
    pay_mch_key["out_sub_mch_id"]  = out_sub_mch_id;
    pay_mch_key["out_shop_id"]     = out_shop_id;
    request_content["pay_mch_key"] = pay_mch_key;

    pay_content["out_trade_no"]    = out_trade_no;
    pay_content["total_fee"]       = total_fee;
    pay_content["fee_type"]        = fee_type;
    request_content["pay_content"] = pay_content;

    order_client["device_id"]        = device_id;
    order_client["staff_id"]         = staff_id;
    order_client["terminal_type"]    = terminal_type;
    order_client["machine_no"]       = machine_no;
    order_client["sdk_version"]      = sdk_version;
    order_client["spbill_create_ip"] = spbill_create_ip;
    request_content["order_client"]  = order_client;

    Json::FastWriter w;
    const std::string &rc = w.write(request_content);

    Json::Value authen_info, a;
    a["authen_type"] = 1;
    // 使用计算认证码举例(使用OpenSSL实现)中的函数计算认证码
    std::string authen_code;
    if (!calc_HMAC_SHA256(authen_key, rc, &authen_code)) {
        // 计算失败
        return "";
    }
    a["authen_code"] = authen_code;
    authen_info["a"] = a;

    Json::Value request;
    request["request_content"] = rc;
    request["authen_info"] = authen_info;

    return w.write(request);
}
/*
构造请求完毕之后,将请求通过 POST 方法发送到云支付接口对应的 URL
使用了发送请求举例(使用libcurl实现)中的 post 函数
*/
std::string response;
post(request, "https://pay.qcloud.com/cpay/scan_code_pay", &response);

申请退款

接口地址

https://pay.qcloud.com/cpay/refund

content_type:application/json

输入参数

参数名 必填 类型 说明
request_content RequestContent 请求内容,详见本节 RequestContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

RequestContent 结构

参数名 必填 类型 说明
pay_mch_key PayMchKey 支付商户信息,详见 PayMchKey
refund_content RefundContent 订单信息,详见 RefundContent
order_client OrderClient 客户端信息,详见 OrderClient
nonce_str String(32) 随机字符串

返回参数

参数名 必填 类型 说明
response_content ResponseContent 请求内容,详见本节 ResponseContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

ResponseContent结构

参数名 必填 类型 说明
status Status 错误码,详见 Status。0 :成功;非 0:失败或者需要重试,具体见实际返回的错误码
description String(255) 错误描述
log_id Number(32) 消息id
internal_status Number(32) 调试使用,调用者可以不予理会
refund RefundResponse authen_info 存在时必填。详见 RefundResponse

RefundResponse 结构

参数名 必填 类型 说明
nonce_str String(32) 随机字符串
pay_mch_key PayMchKey 支付商户信息,status 为0时必填。详见 PayMchKey
refund_order_content RefundOrderContent 订单信息,status 为0时必填。详见 RefundOrderContent

构造申请退款请求例子

/*
构造请求字符串
*/
std::string gen_cloud_pay_refund(
    const int         &pay_platform,
    const std::string &out_mch_id,
    const std::string &out_sub_mch_id,
    const std::string &out_shop_id,
    const std::string &out_trade_no,
    const std::string &out_refund_no,
    const int64_t     &total_fee,
    const int64_t     &refund_fee,
    const std::string &refund_fee_type,
    const std::string &device_id,
    const std::string &staff_id,
    const int         &terminal_type,
    const std::string &machine_no,
    const std::string &sdk_version,
    const std::string &spbill_create_ip,
    const std::string &signing_key
)
{
    Json::Value request_content;
    request_content["nonce_str"] = generate_random_nonce_str();

    Json::Value pay_mch_key, refund_content, order_client;

    pay_mch_key["pay_platform"]    = pay_platform;
    pay_mch_key["out_mch_id"]      = out_mch_id;
    pay_mch_key["out_sub_mch_id"]  = out_sub_mch_id;
    pay_mch_key["out_shop_id"]     = out_shop_id;
    request_content["pay_mch_key"] = pay_mch_key;

    refund_content["out_trade_no"]    = out_trade_no;
    refund_content["out_refund_no"]   = out_refund_no;
    refund_content["total_fee"]       = total_fee;
    refund_content["refund_fee"]      = refund_fee;
    refund_content["refund_fee_type"] = refund_fee_type;
    request_content["refund_content"] = refund_content;

    order_client["device_id"]        = device_id;
    order_client["staff_id"]         = staff_id;
    order_client["terminal_type"]    = terminal_type;
    order_client["machine_no"]       = machine_no;
    order_client["sdk_version"]      = sdk_version;
    order_client["spbill_create_ip"] = spbill_create_ip;
    request_content["order_client"]  = order_client;

    Json::FastWriter w;
    const std::string &rc = w.write(request_content);

    //方式一:计算签名
    Json::Value authen_info, s;
    s["sign_type"] = 1;
    // 使用计算签名举例(使用OpenSSL实现)中的函数计算签名
    std::string sign;
    if (!calc_RSASSA_PSS_2048_SHA256(signing_key, rc, &sign)) {
        // 计算失败
        return "";
    }
    s["sign"] = sign;
    authen_info["s"] = s;

    Json::Value request;
    request["request_content"] = rc;
    request["authen_info"] = authen_info;
    return w.write(request);

/** 方式二:计算认证码,退款也可以按如下计算认证码打包,签名和认证码二选一即可。    
    Json::Value authen_info, a;
    a["authen_type"] = 1;

    std::string authen_code;
    if (!calc_HMAC_SHA256(authen_key, rc, &authen_code)) {
        return "";
    }
    a["authen_code"] = authen_code;
    authen_info["a"] = a;

    Json::Value request;
    request["request_content"] = rc;
    request["authen_info"] = authen_info;
    return w.write(request);
*/    
}
/*
构造请求完毕之后,将请求通过 POST 方法发送到云支付接口对应的 URL
使用了发送请求举例(使用 libcurl 实现)中的 post 函数
*/
std::string response;
post(request, "https://pay.qcloud.com/cpay/refund", &response);

关闭订单

接口地址

https://pay.qcloud.com/cpay/close_order

content_type:application/json

输入参数

参数名 必填 类型 说明
request_content RequestContent 请求内容,详见本节 RequestContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

RequestContent 结构

参数名 必填 类型 说明
pay_mch_key PayMchKey 支付商户信息,详见 PayMchKey
order_client OrderClient 客户端信息,详见 OrderClient
out_trade_no String(32) 由客户端生成的订单号,前缀必须是云支付订单前缀
nonce_str String(32) 随机字符串
trade_type TradeType 交易类型,枚举值详见 TradeType

返回参数

参数名 必填 类型 说明
response_content ResponseContent 请求内容,详见本节 ResponseContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

ResponseContent 结构

参数名 必填 类型 说明
status Status 错误码,详见Status。0 :成功;非 0:失败或者需要重试,具体见实际返回的错误码
description String(255) 错误描述
log_id Number(32) 消息id
internal_status Number(32) 调试使用,调用者可以不予理会
close_order CloseOrderResponse authen_info 存在时必填。详见 CloseOrderResponse

CloseOrderResponse 结构

参数名 必填 类型 说明
nonce_str String(32) 随机字符串

构造关闭订单请求例子

/*
构造请求字符串
*/
std::string gen_cloud_pay_close_order(
    const int         &pay_platform,
    const std::string &out_mch_id,
    const std::string &out_sub_mch_id,
    const std::string &out_shop_id,
    const std::string &out_trade_no,
    const int         &trade_type,
    const std::string &device_id,
    const std::string &staff_id,
    const int         &terminal_type,
    const std::string &machine_no,
    const std::string &sdk_version,
    const std::string &spbill_create_ip,
    const std::string &authen_key
)
{
    Json::Value request_content;
    request_content["nonce_str"] = generate_random_nonce_str();
    request_content["out_trade_no"] = out_trade_no;
    request_content["trade_type"] = trade_type;

    Json::Value pay_mch_key, order_client;

    pay_mch_key["pay_platform"]    = pay_platform;
    pay_mch_key["out_mch_id"]      = out_mch_id;
    pay_mch_key["out_sub_mch_id"]  = out_sub_mch_id;
    pay_mch_key["out_shop_id"]     = out_shop_id;
    request_content["pay_mch_key"] = pay_mch_key;

    order_client["device_id"]        = device_id;
    order_client["staff_id"]         = staff_id;
    order_client["terminal_type"]    = terminal_type;
    order_client["machine_no"]       = machine_no;
    order_client["sdk_version"]      = sdk_version;
    order_client["spbill_create_ip"] = spbill_create_ip;
    request_content["order_client"]  = order_client;

    Json::FastWriter w;
    const std::string &rc = w.write(request_content);

    Json::Value authen_info, s;
    a["authen_type"] = 1;
    // 使用计算认证码举例(使用OpenSSL实现)中的函数计算认证码
    std::string authen_code;
    if (!calc_HMAC_SHA256(authen_key, rc, &authen_code)) {
        // 计算失败
        return "";
    }
    a["authen_code"] = authen_code;
    authen_info["a"] = a;

    Json::Value request;
    request["request_content"] = rc;
    request["authen_info"] = authen_info;

    return w.write(request);
}
/*
构造请求完毕之后,将请求通过 POST 方法发送到云支付接口对应的URL
使用了发送请求举例(使用libcurl实现)中的post函数
*/
std::string response;
post(request, "https://pay.qcloud.com/cpay/reverse", &response);

查询订单

接口地址

https://pay.qcloud.com/cpay/query_order

content_type:application/json

输入参数

参数名 必填 类型 说明
request_content RequestContent 请求内容,详见本节 RequestContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

RequestContent结构

参数名 必填 类型 说明
pay_mch_key PayMchKey 支付商户信息,详见 PayMchKey
order_client OrderClient 客户端信息,详见 OrderClient
out_trade_no String(32) 由客户端生成的订单号,前缀必须是云支付订单前缀
trade_type TradeType 交易类型,枚举值详见 TradeType
nonce_str String(32) 随机字符串

返回参数

参数名 必填 类型 说明
response_content ResponseContent 请求内容,详见本节 ResponseContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

ResponseContent结构

参数名 必填 类型 说明
status Status 错误码,详见Status。0 :成功;非0:失败或者需要重试,具体见实际返回的错误码
description String(255) 错误描述
log_id Number(32) 消息id
internal_status Number(32) 调试使用,调用者可以不予理会
query_order QueryOrderResponse authen_info 存在时必填。详见 QueryOrderResponse

QueryOrderResponse结构

参数名 必填 类型 说明
nonce_str String(32) 随机字符串
pay_mch_key PayMchKey 支付商户信息,status 为0时必填。详见 PayMchKey
order_content OrderContent 订单信息,status 为0时必填。详见 OrderContent

构造查询订单请求例子

/*
构造请求字符串
*/
std::string gen_cloud_pay_query_order(
    const int         &pay_platform,
    const std::string &out_mch_id,
    const std::string &out_sub_mch_id,
    const std::string &out_shop_id,
    const std::string &out_trade_no,
    const int         &trade_type,
    const std::string &device_id,
    const std::string &staff_id,
    const int         &terminal_type,
    const std::string &machine_no,
    const std::string &sdk_version,
    const std::string &spbill_create_ip,
    const std::string &authen_key
)
{
    Json::Value request_content;
    request_content["nonce_str"] = generate_random_nonce_str();
    request_content["out_trade_no"] = out_trade_no;
    request_content["trade_type"] = trade_type;

    Json::Value pay_mch_key, order_client;

    pay_mch_key["pay_platform"]    = pay_platform;
    pay_mch_key["out_mch_id"]      = out_mch_id;
    pay_mch_key["out_sub_mch_id"]  = out_sub_mch_id;
    pay_mch_key["out_shop_id"]     = out_shop_id;
    request_content["pay_mch_key"] = pay_mch_key;

    order_client["device_id"]        = device_id;
    order_client["staff_id"]         = staff_id;
    order_client["terminal_type"]    = terminal_type;
    order_client["machine_no"]       = machine_no;
    order_client["sdk_version"]      = sdk_version;
    order_client["spbill_create_ip"] = spbill_create_ip;
    request_content["order_client"]  = order_client;

    Json::FastWriter w;
    const std::string &rc = w.write(request_content);

    Json::Value authen_info, s;
    a["authen_type"] = 1;
    // 使用计算认证码举例(使用OpenSSL实现)中的函数计算认证码
    std::string authen_code;
    if (!calc_HMAC_SHA256(authen_key, rc, &authen_code)) {
        // 计算失败
        return "";
    }
    a["authen_code"] = authen_code;
    authen_info["a"] = a;

    Json::Value request;
    request["request_content"] = rc;
    request["authen_info"] = authen_info;

    return w.write(request);
}
/*
构造请求完毕之后,将请求通过POST方法发送到云支付接口对应的URL
使用了发送请求举例(使用libcurl实现)中的post函数
*/
std::string response;
post(request, "https://pay.qcloud.com/cpay/query_order", &response);

查询退款单

接口地址

https://pay.qcloud.com/cpay/query_refund_order

content_type:application/json

输入参数

参数名 必填 类型 说明
request_content RequestContent 请求内容,详见本节 RequestContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

RequestContent结构

参数名 必填 类型 说明
pay_mch_key PayMchKey 支付商户信息,详见 PayMchKey
order_client OrderClient 客户端信息,详见 OrderClient
out_trade_no String(32) 由客户端生成的订单号,前缀必须是云支付订单前缀
out_refund_no String(32) 由客户端生成的退款单号,前缀必须是云支付订单前缀
nonce_str String(32) 随机字符串

返回参数

参数名 必填 类型 说明
response_content ResponseContent 请求内容,详见本节 ResponseContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

ResponseContent结构

参数名 必填 类型 说明
status Status 错误码,详见 Status。0 :成功;非0:失败或者需要重试,具体见实际返回的错误码
description String(255) 错误描述
log_id Number(32) 消息id
internal_status Number(32) 调试使用,调用者可以不予理会
query_refund_order QueryRefundOrderResponse authen_info 存在时,必填。详见 QueryRefundOrderResponse

QueryRefundOrderResponse结构

参数名 必填 类型 说明
nonce_str String(32) 随机字符串
pay_mch_key PayMchKey 支付商户信息,status 为0时必填。详见 PayMchKey
refund_order_content RefundOrderContent[] 订单信息,status 为0时必填。详见 RefundOrderContent

构造查询退款单请求例子

/*
构造请求字符串
*/
std::string gen_cloud_pay_query_refund_order(
    const int         &pay_platform,
    const std::string &out_mch_id,
    const std::string &out_sub_mch_id,
    const std::string &out_shop_id,
    const std::string &out_trade_no,
    const std::string &out_refund_no,
    const std::string &device_id,
    const std::string &staff_id,
    const int         &terminal_type,
    const std::string &machine_no,
    const std::string &sdk_version,
    const std::string &spbill_create_ip,
    const std::string &authen_key
)
{
    Json::Value request_content;
    request_content["nonce_str"] = generate_random_nonce_str();
    request_content["out_trade_no"] = out_trade_no;
    request_content["out_refund_no"] = out_refund_no;

    Json::Value pay_mch_key, order_client;

    pay_mch_key["pay_platform"]    = pay_platform;
    pay_mch_key["out_mch_id"]      = out_mch_id;
    pay_mch_key["out_sub_mch_id"]  = out_sub_mch_id;
    pay_mch_key["out_shop_id"]     = out_shop_id;
    request_content["pay_mch_key"] = pay_mch_key;

    order_client["device_id"]        = device_id;
    order_client["staff_id"]         = staff_id;
    order_client["terminal_type"]    = terminal_type;
    order_client["machine_no"]       = machine_no;
    order_client["sdk_version"]      = sdk_version;
    order_client["spbill_create_ip"] = spbill_create_ip;
    request_content["order_client"]  = order_client;

    Json::FastWriter w;
    const std::string &rc = w.write(request_content);

    Json::Value authen_info, s;
    a["authen_type"] = 1;
    // 使用计算认证码举例(使用OpenSSL实现)中的函数计算认证码
    std::string authen_code;
    if (!calc_HMAC_SHA256(authen_key, rc, &authen_code)) {
        // 计算失败
        return "";
    }
    a["authen_code"] = authen_code;
    authen_info["a"] = a;

    Json::Value request;
    request["request_content"] = rc;
    request["authen_info"] = authen_info;

    return w.write(request);
}
/*
构造请求完毕之后,将请求通过POST方法发送到云支付接口对应的URL
使用了发送请求举例(使用libcurl实现)中的post函数
*/
std::string response;
post(request, "https://pay.qcloud.com/cpay/query_refund_order", &response);

支付成功回调

接口地址

服务商在云支付管理后台配置的回调地址(HTTPS),即“交易完成回调 URL”。
content_type:application/json

输入参数

参数名 必填 类型 说明
request_content RequestContent 请求内容,详见本节 RequestContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

RequestContent 结构

参数名 必填 类型 说明
nonce_str String(32) 随机字符串
pay_mch_key PayMchKey 支付商户信息,详见 PayMchKey
order_content OrderContent 订单信息,详见 OrderContent
order_client OrderClient 订单信息,详见 OrderClient

返回参数

参数名 必填 类型 说明
response_content ResponseContent 请求内容,详见本节 ResponseContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

ResponseContent结构

参数名 必填 类型 说明
status Number(32) 错误码。0 :成功;非0:失败或者需要重试,具体见实际返回的错误码
description String(255) 错误描述

多条件查询订单信息

接口地址

  • https://pay.qcloud.com/cpay/client_order_detail
  • content_type:application/json

输入参数

参数名 是否必填 类型 说明
request_content RequestContent 请求内容,详见本节 RequestContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

RequestContent结构

参数名 是否必填 类型 说明
pay_platform Number(32) 第三方支付平台,详见 PayPlatform
out_sub_mch_id String 云支付分配的子商户 ID
out_shop_id String 云支付分配的门店全局 ID
staff_id String 门店内店员的编号
device_id String 子商户自定义的终端设备编号
query_order_type Number(32) 查询订单类型; 详细定义见本节 QueryOrderType;默认为3
start_time Number(64) 查询开始时间;unix 时间戳;默认为0
end_time Number(64) 查询结束时间;unix 时间戳;默认为当前时间
page_num Number(32) 页码 (从1开始计数)
page_size Number(32) 单页条数
nonce_str String(32) 随机字符串

QueryOrderType取值:

  • 1:订单
  • 2:退款单
  • 3:订单和退款单

注意:

  • 如果需要查询子商户的订单,out_shop_id, staff_id, device_id不传
  • 如果需要查询门店的订单,out_shop_id必传;staff_id, device_id不传
  • 如果需要查询店员的订单,out_shop_id, staff_id都必传

返回参数

参数名 是否必填 类型 说明
response_content ResponseContent 请求内容,详见本节 ResponseContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

ResponseContent结构

参数名 是否必填 类型 说明
status Status 错误码,详见 Status
description String(255) 错误描述信息
log_id Number(32) 消息 ID
internal_status Number(32) 调试使用,调用者可以不予理会
order_detail_query OrderDetailQueryResponse 订单信息,详细见本节

OrderDetailQueryResponse结构如下:

参数名 是否必填 类型 说明
total_count Number(32) 符合条件的订单总条数;注意,不是本次返回的订单条数
order_details OrderDetail [] 订单详细信息,详细见本节

OrderDetail结构如下:

参数名 是否必填 类型 说明
shop_info ShopInfo 门店信息,详细见 ShopInfo
shop_staff_info StaffInfo 店员信息,详细见 StaffInfo
receipt Receipt 订单信息,详细结构如下

Receipt结构如下:

参数名 是否必填 类型 说明
order Order 支付订单信息
refund_order RefundOrder 退款单信息

Order结构如下:

参数名 是否必填 类型 说明
order_mch OrderMch 支付商户信息,详细见 OrderMch
order_content OrderContent 订单信息,详细见 OrderContent
order_client OrderClient 客户端信息,详细见 OrderClient
authen_info AuthenInfo 认证信息,详细见 AuthenInfo

RefundOrder结构如下:

参数名 是否必填 类型 说明
refund_order_mch OrderMch 支付商户信息,详细见 OrderMch
refund_order_content RefundOrderContent 订单信息,详细见 OrderContent
order_client OrderClient 客户端信息,详细见 OrderClient
authen_info AuthenInfo 认证信息,详细见 AuthenInfo

门店接口

查询门店信息

接口地址

https://pay.qcloud.com/cpay/query_sub_mch_shop_info

content_type:application/json

输入参数

参数名 必填 类型 说明
request_content RequestContent 请求内容,详见本节 RequestContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

RequestContent 结构

参数名 必填 类型 说明
out_mch_id String(32) 云支付分配给服务商的帐号
out_sub_mch_id String(32) 云支付分配给子商户的帐号
nonce_str String(32) 随即字符串
page_num Number(32) 页码(从1开始)
page_size Number(32) 单页条数

返回参数

参数名 必填 类型 说明
response_content ResponseContent 请求内容,详见本节 ResponseContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

ResponseContent 结构

参数名 必填 类型 说明
status Status 错误码,详见 Status。0 :成功;非0:失败或者需要重试,具体见实际返回的错误码
description String(255) 错误描述
log_id Number(32) 消息id
internal_status Number(32) 调试使用,调用者可以不予理会
query_shop_info QueryShopInfoResponse authen_info存在时必填。详见 QueryShopInfoResponse

QueryShopInfoResponse结构

参数名 必填 类型 说明
nonce_str String(32) 随机字符串
status为0时返回以下参数:
shop_infos ShopInfo [] 子商户信息,详见 ShopInfo
total_count Number(32) 数据总数

构造查询门店信息请求例子

/*
构造请求字符串
*/
std::string gen_cloud_pay_query_sub_mch_shop_info(
    const std::string &out_mch_id,
    const std::string &out_sub_mch_id,
    const int          page_num,
    const int          page_size,
    const std::string &authen_key
)
{
    Json::Value request_content;
    request_content["nonce_str"] = generate_random_nonce_str();
    request_content["out_mch_id"] = out_mch_id;
    request_content["out_sub_mch_id"] = out_sub_mch_id;
    request_content["page_num"] = page_num;
    request_content["page_size"] = page_size;

    Json::FastWriter w;
    const std::string &rc = w.write(request_content);

    Json::Value authen_info, s;
    a["authen_type"] = 1;
    // 使用计算认证码举例(使用OpenSSL实现)中的函数计算认证码
    std::string authen_code;
    if (!calc_HMAC_SHA256(authen_key, rc, &authen_code)) {
        // 计算失败
        return "";
    }
    a["authen_code"] = authen_code;
    authen_info["a"] = a;

    Json::Value request;
    request["request_content"] = rc;
    request["authen_info"] = authen_info;

    return w.write(request);
}
/*
构造请求完毕之后,将请求通过POST方法发送到云支付接口对应的URL
使用了发送请求举例(使用libcurl实现)中的post函数
*/
std::string response;
post(request, "https://pay.qcloud.com/cpay/query_sub_mch_shop_info", &response);

查询子商户信息

接口地址

https://pay.qcloud.com/cpay/sdk_query_sub_mch_info

content_type:application/json

输入参数

参数名 必填 类型 说明
request_content RequestContent 请求内容,详见本节 RequestContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

RequestContent结构

参数名 必填 类型 说明
out_sub_mch_id String(32) 云支付分配给子商户的帐号
nonce_str String(32) 随即字符串
page_num Number(32) 页码, 请填1,当前只支持查询一个子商户信息
page_size Number(32) 单页条数, 请填1,当前只支持查询一个子商户信息

返回参数

参数名 必填 类型 说明
response_content ResponseContent 请求内容,详见本节 ResponseContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

ResponseContent 结构

参数名 必填 类型 说明
status Status 错误码,详见 Status。0:成功;非0:失败或者需要重试,具体见实际返回的错误码
description String(255) 错误描述
log_id Number(32) 消息id
internal_status Number(32) 调试使用,调用者可以不予理会
query_sub_mch_info QuerySubMchInfoResponse authen_info 存在时必填。详见本节 QuerySubMchInfoResponse

QuerySubMchInfoResponse 结构

参数名 必填 类型 说明
nonce_str String(32) 随机字符串
status 为0时返回以下参数:
sub_mch_infos SubMch[] 子商户信息,详见本节 SubMch
total_count Number(32) 数据总数

SubMch结构

参数名 必填 类型 说明
mch_id String(32) 第三方支付平台分配给服务商的帐号
pay_platform PayPlatform 第三方支付类型,详见 PayPlatform
company_name String(255) 服务商在第三方平台登记的公司名称
mch_sub_uin String(32) 子服务商uin
mch_sub_company_name String(255) 子服务商公司名
sub_mch_infos SubMchInfo[] 子商户信息,详见 SubMchInfo
out_mch_id String(32) 服务商 out id

监控上报接口

上报客户端接口监控信息

接口地址

https://pay.qcloud.com/cpay/upload_client_monitor_info

content_type:application/json

输入参数

参数名 必填 类型 说明
request_content RequestContent 请求内容,详见本节 RequestContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

RequestContent 结构

参数名 必填 类型 说明
out_mch_id String(32) 云支付给服务商的帐号
out_sub_mch_id String(32) 云支付分配给子商户的帐号
out_shop_id String(32) 云支付分配给门店的账号
order_client OrderClient 客户端信息,详见 OrderClient
interval Number(32) 上报间隔,单位:s
is_compress bool 客户端根据日志大小判断是否需要压缩
compress_type CompressType 压缩算法类型,is_compress 为 true 时必填,详见 CompressType
compressed_monitor_info

uncompressed_monitor_info
二选一 String

UncompressedMonitorInfo
压缩数据

未压缩数据,详见 UncompressedMonitorInfo
nonce_str String(32) 随机字符串

UncompressedMonitorInfo 结构

参数名 必填 类型 说明
client_int_results ClientIntResult 客户端接口调用结果,详见 ClientIntResult
machine_info String cpu 使用率,内存使用率,磁盘使用情况等,json 结构

ClientIntResult 结构

参数名 必填 类型 说明
interface Number(32) 接口类型,详见 Interface
status Status 错误码,详见 Status。0:成功,非0:失败或者需要重试,具体见实际返回的错误码
description String(255) 错误描述
time_cost Number(32) 接口成功平均时延,单位:ms
start_time Number(64) 接口开始时间,时间戳(秒)
logs String 接口执行过程中产生的日志列表
log_id Number(32) 后台生成的 log_id,方便对齐日志
domain_name String(1024) 服务端域名

返回参数

参数名 必填 类型 说明
response_content ResponseContent 请求内容,详见本节 ResponseContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

ResponseContent 结构

参数名 必填 类型 说明
status Status 错误码,详见 Status。0 :成功;非0:失败或者需要重试,具体见实际返回的错误码
description String(255) 错误描述
log_id Number(32) 消息id
internal_status Number(32) 调试使用,调用者可以不予理会
upload_client_monitor_info UploadClientMonitorInfoResponse authen_info 存在时,必填。详见 UploadClientMonitorInfoResponse

UploadClientMonitorInfoResponse 结构

参数名 必填 类型 说明
nonce_str String(32) 随机字符串
interval Number(32) status 为0时必填。期望上报间隔,单位:s。
0表示不用改变当前上报间隔

构造上报客户端接口监控信息请求例子

/*
构造请求字符串
*/
std::string gen_cloud_pay_upload_client_monitor_info(
    const std::string &out_mch_id,
    const std::string &out_sub_mch_id,
    const std::string &out_shop_id,
    const std::string &device_id,
    const std::string &staff_id,
    const int         &terminal_type,
    const std::string &machine_no,
    const std::string &sdk_version,
    const std::string &spbill_create_ip,
    const int          interval,
    const std::string &machine_info,
    const std::string &authen_key
)
{
    Json::Value request_content;
    request_content["out_mch_id"] = out_mch_id;
    request_content["out_sub_mch_id"] = out_sub_mch_id;
    request_content["out_shop_id"] = out_shop_id;

    request_content["nonce_str"] = generate_random_nonce_str();
    request_content["interval"] = interval;
    request_content["is_compress"] = false;

    Json::Value order_client;
    order_client["device_id"]        = device_id;
    order_client["staff_id"]         = staff_id;
    order_client["terminal_type"]    = terminal_type;
    order_client["machine_no"]       = machine_no;
    order_client["sdk_version"]      = sdk_version;
    order_client["spbill_create_ip"] = spbill_create_ip;
    request_content["order_client"]  = order_client;

    Json::Value uncompressed_monitor_info, client_int_results, client_int_result1;
    client_int_result1["interface"] = "scan_code_pay";
    client_int_result1["status"] = 0;
    client_int_result1["description"] = "description";
    client_int_result1["time_cost"] = 100;
    client_int_result1["start_time"] = 1505805297;
    client_int_result1["log_id"] = 73648593;
    client_int_result1["domain_name"] = "https://pay.qcloud.com/cpay";
    client_int_results.append(client_int_result1);
    uncompressed_monitor_info["machine_info"] = machine_info;
    request_content["uncompressed_monitor_info"]  = uncompressed_monitor_info;

    Json::FastWriter w;
    const std::string &rc = w.write(request_content);

    Json::Value authen_info, s;
    a["authen_type"] = 1;
    // 使用计算认证码举例(使用OpenSSL实现)中的函数计算认证码
    std::string authen_code;
    if (!calc_HMAC_SHA256(authen_key, rc, &authen_code)) {
        // 计算失败
        return "";
    }
    a["authen_code"] = authen_code;
    authen_info["a"] = a;

    Json::Value request;
    request["request_content"] = rc;
    request["authen_info"] = authen_info;

    return w.write(request);
}
/*
构造请求完毕之后,将请求通过POST方法发送到云支付接口对应的URL
使用了发送请求举例(使用libcurl实现)中的post函数
*/
std::string response;
post(request, "https://pay.qcloud.com/cpay/upload_client_monitor_info", &response);

上报客户端机器配置信息

接口地址

https://pay.qcloud.com/cpay/upload_client_conf_info

content_type:application/json

输入参数

参数名 必填 类型 说明
request_content RequestContent 请求内容,详见本节 RequestContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

RequestContent 结构

参数名 必填 类型 说明
out_mch_id String(32) 云支付分配给服务商的帐号
out_sub_mch_id String(32) 云支付分配给子商户的帐号
out_shop_id String(32) 云支付唯一标识门店的账号
order_client OrderClient 客户端信息,详见 OrderClient
machine_info String 主机信息,如主机名,磁盘,CPU,内存信息等,json 结构
nonce_str String(32) 随机字符串

返回参数

参数名 必填 类型 说明
response_content ResponseContent 请求内容,详见本节 ResponseContent
authen_info AuthenInfo 认证信息,详见 AuthenInfo

ResponseContent 结构

参数名 必填 类型 说明
status Status 错误码,详见 Status。0 :成功;非0:失败或者需要重试,具体见实际返回的错误码
description String(255) 错误描述
log_id Number(32) 消息id
internal_status Number(32) 调试使用,调用者可以不予理会
upload_client_conf_info UploadClientConfInfoResponse authen_info 存在时必填。详见 UploadClientConfInfoResponse

UploadClientConfInfoResponse 结构

参数名 必填 类型 说明
nonce_str String(32) 随机字符串

构造上报客户端机器配置信息请求例子

/*
构造请求字符串
*/
std::string gen_cloud_pay_upload_client_conf_info(
    const std::string &out_mch_id,
    const std::string &out_sub_mch_id,
    const std::string &out_shop_id,
    const std::string &device_id,
    const std::string &staff_id,
    const int         &terminal_type,
    const std::string &machine_no,
    const std::string &sdk_version,
    const std::string &spbill_create_ip,
    const std::string &machine_info,
    const std::string &authen_key
)
{
    Json::Value request_content;
    request_content["out_mch_id"] = out_mch_id;
    request_content["out_sub_mch_id"] = out_sub_mch_id;
    request_content["out_shop_id"] = out_shop_id;

    request_content["nonce_str"] = generate_random_nonce_str();

    Json::Value order_client;
    order_client["device_id"]        = device_id;
    order_client["staff_id"]         = staff_id;
    order_client["terminal_type"]    = terminal_type;
    order_client["machine_no"]       = machine_no;
    order_client["sdk_version"]      = sdk_version;
    order_client["spbill_create_ip"] = spbill_create_ip;
    request_content["order_client"]  = order_client;

    request_content["machine_info"]  = machine_info;

    Json::FastWriter w;
    const std::string &rc = w.write(request_content);

    Json::Value authen_info, s;
    a["authen_type"] = 1;
    // 使用计算认证码举例(使用OpenSSL实现)中的函数计算认证码
    std::string authen_code;
    if (!calc_HMAC_SHA256(authen_key, rc, &authen_code)) {
        // 计算失败
        return "";
    }
    a["authen_code"] = authen_code;
    authen_info["a"] = a;

    Json::Value request;
    request["request_content"] = rc;
    request["authen_info"] = authen_info;

    return w.write(request);
}
/*
构造请求完毕之后,将请求通过POST方法发送到云支付接口对应的URL
使用了发送请求举例(使用libcurl实现)中的post函数
*/
std::string response;
post(request, "https://pay.qcloud.com/cpay/upload_client_conf_info", &response);

公共数据结构

认证签名信息

AuthenInfo结构

参数名 必填 类型 说明
a

s
退款接口使用签名,其他接口使用认证码 Authen

Signature
认证信息,详见 Authen

签名信息,详见 Signature

Authen 结构

参数名 必填 类型 说明
authen_type Number(32) 认证算法,详见 AuthenType
authen_code String(2048) 认证码

Signature 结构

参数名 必填 类型 说明
sign_type Number(32) 签名算法,详见 Signature
sign String(2048) 签名内容

订单信息

OrderContent 结构(仅作为返回参数)

参数名 必填 类型 说明
out_trade_no String(32) 子商户订单号
transaction_id String(32) 第三方支付平台的订单号
trade_type TradeType 交易类型,详见 TradeType
author_code String(128) 刷卡支付时的授权码
code_url String(64) 扫码支付时,用于扫码支付时转换成支付二维码
time_expire Number(64) 订单失效时间(刷卡支付不需要该字段),时间戳(秒)
notify_url String(1024) 第三方支付平台回调 url(刷卡支付不需要该字段)
time_end Number(64) 支付完成时间,时间戳(秒)
nonce_str String(32) 随机字符串
create_time Number(64) 订单创建时间,时间戳(秒)
last_update_time Number(64) 订单最近更新时间,时间戳(秒)
is_transforming Bool 系统是否正在处理中
total_fee Number(32) 订单总金额,单位分
fee_type String(3) 货币类型(目前只支持人民币,请填 CNY)
cash_fee Number(32) 现金支付金额,单位分
cash_fee_type String(3) 现金支付货币类型(目前只支持人民币,请填 CNY)
settlement_total_fee Number(32) 应结支付金额,单位分
refunded_fee Number(32) 已退款金额,单位分,只有接口client_order_detail返回这个字段,接口query_order不返回
body String(128) 商品或订单简要描述
detail String(6000) 商品详细列表,详见 Detail
coupon_infos CouponInfo 代金券信息,详见 CouponInfo
wxpay_order_content_ext WxpayOrderContentExt 微信支付扩展信息,详见 WxpayOrderContentExt
alipay_order_content_ext AlipayOrderContentExt 支付宝扩展信息,详见 AlipayOrderContentExt
card_order_content_ext CardOrderContentExt 会员卡扩展信息,详见 CardOrderContentExt

CouponInfo 结构

参数名 必填 类型 说明
coupon_id String(20) 代金券或立减优惠 id
使用微信支付代金券时有返回
coupon_fee Number(64) 单个代金券或立减优惠支付金额
coupon_type String(8) 代金券类型,CASH--充值代金券
NO_CASH---非充值代金券
使用代金券时有返回
contribute_type Number(32) 资金来源,1:商户 2:平台 3:其他

WxpayOrderContentExt 结构

参数名 必填 类型 说明
current_trade_state Number(32) 订单当前状态,详见 WxpayOrderState
attach String(127) 附加数据,记录子商户自定义数据
bank_type String(16) 刷卡支付时特有,付款银行类型,遵守字符型银行编码规范
goods_tag String(32) 商品标记,代金券或立减优惠功能的参数
coupon_fee Number(32) 代金券金额,等于支付总金额减现金支付金额
coupon_count Number(32) 代金券数量
coupon_infos WxpayCouponInfo 已废弃,请使用 OrderContent 下的 coupon_infos 字段
代金券信息,详见 WxpayCouponInfo
product_id String(32) 商品id,子商户自定义,扫码支付时必传
prepare_id String(64) 公众号或APP支付时,下单后用于拉起支付的预支付会话标识
trade_state_desc String(255) 对当前查询订单状态的描述和下一步操作的指引
limit_pay String(32) 非刷卡支付时,指定支付方式,目前只能是:no_credit,指定不能使用信用卡支付

WxpayCouponInfo 结构

参数名 必填 类型 说明
coupon_batch_id String(20) 代金券或立减优惠批次 id
coupon_id String(20) 代金券或立减优惠 id
coupon_fee Number(64) 单个代金券或立减优惠支付金额
coupon_type String(8) 代金券类型,CASH--充值代金券
NO_CASH---非充值代金券
订单使用代金券时有返回

AlipayOrderContentExt 结构

参数名 必填 类型 说明
current_trade_state Number(32) 订单当前状态,详见 AlipayOrderState
voucher_detail_list AlipayVoucherDetail 代金券列表,支付宝回包的内容,详见 AlipayVoucherDetail,示例:
"voucher_detail_list": [
{
  "id": "20151026000",
  "name": "XX超市5折优惠",
  "type": "ALIPAY_FIX_VOUCHER",
  "amount": 10,
  "merchant_contribute": 9,
  "other_contribute": 1,
  "memo":"学生专用优惠",
  "purchase_buyer_contribute": 2.01,
  "purchase_merchant_contribute": 1.03,
  "purchase_ant_contribute": 0.82
}]
fund_bill_list AlipayFundBill 支付渠道,支付宝回包的内容,详见 AlipayFundBill,示例:"fund_bill_list": [
{
  "fund_channel":"ALIPAYACCOUNT",
  "amount": 10,
  "real_amount": 11.21
}]
discountable_amount Number(64) 参与优惠的金额
undiscountable_amount Number(64) 不参与优惠的金额
point_amount Number(64) 积分金额
invoice_amount Number(64) 可以开具发票的金额
product_code String(32) 产品码
royalty_info String(64) json 的分账信息
send_pay_date Number(64) 该订单打款给卖家的时间
extend_params String(1024) 扩展信息,花呗相关的逻辑
enable_pay_channels String(1024) 可用渠道,多个渠道用','分割,如:
pay_channels="credit_group,point"
disable_pay_channels String(1024) 不可用渠道,格式同 enable_pay_channels
discount_goods_detail String(1024) 打折相关信息,示例:[
{
  "goods_id":"STANDARD1026181538",
  "goods_name":"雪碧",
  "discount_amount":"100.00",
  "voucher_id":"2015102600073002039000002D5O" }]
buyer_logon_id String(100) 买家支付宝账号,回包的内容
seller_id String(100) 卖家支付宝用户号,回包的内容
seller_email String(64) 卖家支付宝账号,回包的内容
gmt_refund Number(64) 交易退款时间
gmt_close Number(64) 交易结束时间
refund_fee Number(64) 退款金额
out_biz_no String(64) 商户业务号,回包的内容

AlipayVoucherDetail 结构

参数名 必填 类型 说明
id String(32) 券 id
name String(64) 券名称
type String(32) 代金券类型
amount Number(64) 代金券金额
merchant_amount Number(64) 商户出资
other_amount Number(64) 其它出资
memo String(256) 备注

AlipayFundBill 结构

参数名 必填 类型 说明
fund_channel String(32) 是否发生了资金变化,示例:Y
amount Number(64) 支付金额
real_amount Number(64) 实际支付金额

CardOrderContentExt 结构

参数名 必填 类型 说明
current_trade_state Number(32) 订单当前状态,详见 CardOrderState
membership_number String(32) 会员卡号

退款单信息

RefundOrderContent 结构(仅作为返回参数)

参数名 必填 类型 说明
out_refund_no String (32) 子商户退款单号,云支付系统内全局唯一
refund_id String (32) 第三方支付平台的退款单号
out_trade_no String (32) 退款单对应的订单号
trade_type TradeType 交易类型,详见 TradeType
nonce_str String(32) 随机字符串
create_time Number(64) 退款单创建时间,时间戳(秒)
last_update_time Number(64) 退款单最近更新时间,时间戳(秒)
is_transforming Bool 系统是否正在处理中
total_fee Number(64) 订单总金额,单位:分
refund_fee Number(64) 本次退款总金额,单位:分
refund_fee_type String(3) 本次退款总金额货币类型(目前只支持人民币,请填 CNY)
refund_reason String(255) 退款原因
coupon_infos CouponInfo 退款代金券信息,详见 CouponInfo
wxpay_refund_order_content_ext WxpayRefundOrderContentExt 微信支付扩展信息,详见 WxpayRefundOrderContentExt
alipay_refund_order_content_ext AlipayRefundOrderContentExt 支付宝扩展信息,详见 AlipayRefundOrderContentExt
card_refund_order_content_ext CardRefundOrderContentExt 会员卡扩展信息,详见 CardRefundOrderContentExt

WxpayRefundOrderContentExt结构

参数名 必填 类型 说明
state Number(32) 退款状态,详见 WxpayRefundOrderState
cash_refund_fee Number(32) 现金退款金额,单位:分
settlement_refund_fee Number(32) 去掉非充值代金券退款金额后的退款金额,单位:分。
退款金额=申请退款金额-非充值代金券退款金额,退款金额<=申请退款金额
退款金额=申请退款金额-非充值代金券退款金额 退款金额<=申请退款金额
coupon_refund_fee Number(32) 退款代金券金额,支持多张代金券,单位:分
coupon_refund_count Number(32) 退款代金券数量
coupon_refund_infos WxpayCouponInfo 已废弃,请使用 RefundOrderContent 下的 coupon_infos 字段
退款代金券信息,详见 WxpayCouponInfo
refund_account String(30) 退款资金来源,仅针对老资金流子商户使用
默认使用未结算资金退款
REFUND_SOURCE_UNSETTLED_FUNDS:未结算资金退款
REFUND_SOURCE_RECHARGE_FUNDS:可用余额退款
refund_channel String(16) 退款渠道
ORIGINAL:原路退款
BALANCE:退回到余额
refund_recv_account String(64) 取当前退款单的退款入账方
1、退回银行卡:{银行名称}{卡类型}{卡尾号}
2、退回支付用户零钱:支付用户零钱

AlipayRefundOrderContentExt 结构

参数名 必填 类型 说明
fund_change String(1) 是否发生了资金变化,示例:Y
gmt_refund_pay String(32) 退款时间
refund_detail_item_list AlipayFundBill 退款渠道,详见 AlipayFundBill
refund_status AlipayRefundOrderState(枚举类型) 退款状态,详见 AlipayRefundOrderState

CardRefundOrderContentExt 结构

参数名 必填 类型 说明
state CardRefundOrderState(枚举类型) 退款状态,详见 CardRefundOrderState

查询订单时商户信息

OrderMch结构

参数名 是否必填 类型 说明
pay_platform Number(32) 第三方支付平台;详细见PayPlatform
out_mch_id String 云支付分配的服务商 ID
out_sub_mch_id String 云支付分配的子商户 ID
out_shop_id String 云支付分配的门店全局 ID
out_channel_id String 云支付分配给渠道商的 ID
out_card_id String 会员卡 ID
sub_mch_pay_info String 商户下单时存在订单中的特定信息
mch_uin String 服务商的腾讯云账号 ID
mch_sub_uin String 子服务商的腾讯云账号 ID
using_stream_sub_mch bool 是否使用银行商户
upstream_order_mch_ext UpstreamOrderMchExt 银行渠道相关信息
wxpay_order_mch_ext WxpayOrderMchExt 微信支付服务商扩展信息
alipay_order_mch_ext AlipayOrderMchExt 支付宝服务商扩展信息
card_order_mch_ext CardOrderMchExt 会员卡服务商扩展信息

WxpayOrderMchExt结构

参数名 是否必填 类型 说明
mch_id String 微信支付分配给服务商的账号
sub_mch_id String 微信支付分配给子商户的账号
shop_id String 微信支付分配给门店的编号
app_id String 微信支付分配给服务商的公众号 ID
sub_app_id String 微信支付分配给子商户的公众号 ID
open_id String 顾客在服务商公众号下的唯一标识
sub_open_id String 顾客在子商户公众号下的唯一标识
is_subscribe bool 用户是否关注了服务商公众号
sub_is_subscribe bool 用户是否关注了子商户的公众号
is_bill bool 是否为微信买单商户
use_bill bool 是否走微信买单渠道
bill_channel_id String 微信买单渠道号
bill_shop_id String 微信买单默认门店号
is_macro bool 是否是小微商户

AlipayOrderMchExt结构

参数名 是否必填 类型 说明
app_id String 支付宝分配给服务商的 APP ID
sub_app_id String 支付宝分配给子商户的 APP ID
user_id String 顾客的用户号
sub_mch_id String 支付宝的子商户号, 银行服务商使用

交易请求时的商户信息

PayMchKey 结构

参数名 必填 类型 说明
pay_platform PayPlatform 第三方支付类型,详见 PayPlatform
out_mch_id String(32) 云支付分配给服务商的帐号
out_sub_mch_id String(32) 云支付分配给子商户的帐号
out_shop_id String(32) 云支付唯一标识门店的账号
notify_open_ids String(255)[] 关注本次操作的店员/店长在服务商微信公众号下的 open_id。可选。数组
wxpay_pay_mch_key_ext WxpayPayMchKeyExt 微信支付扩展信息
alipay_pay_mch_key_ext AlipayPayMchKeyExt 支付宝扩展信息

WxpayPayMchKeyExt 结构

参数名 必填 类型 说明
open_id String(255) 用户在服务商微信公众号下的唯一标识

AlipayPayMchKeyExt 结构

参数名 必填 类型 说明
user_id String(255) 用户在支付宝下的唯一标识

交易请求时的支付订单信息

PayContent 结构(仅交易请求使用)

参数名 必填 类型 说明
out_trade_no String(32) 由客户端生成的订单号,前缀必须是云支付订单前缀
author_code String(128) 刷卡支付时的授权码(刷卡支付必填,其他不填);可以使用授权码前缀判断支付平台:微信支付为10~15开头,支付宝为25~30开头,会员卡为99开头
time_expire Number(64) 订单失效时间(刷卡支付不需要该字段),时间戳(秒)
total_fee Number(32) 订单总金额,单位:分
fee_type String(3) 货币类型(目前只支持人民币,请填 CNY)
body String(128) 商品或订单简要描述
商品描述交易字段格式根据不同的应用场景按照以下格式:
(1)PC 网站——传入浏览器打开的网站主页 title 名-实际商品名称,例如:腾讯充值中心-QQ会员充值;
(2) 公众号——传入公众号名称-实际商品名称,例如:腾讯形象店- image-QQ公仔;
(3) H5——应用在浏览器网页上的场景,传入浏览器打开的移动网页的主页title名-实际商品名称,例如:腾讯充值中心-QQ会员充值;
(4) 线下门店——门店品牌名-城市分店名-实际商品名称,例如: image形象店-深圳腾大-QQ公仔)
(5) APP——需传入应用市场上的APP名字-实际商品名称,天天爱消除-游戏充值。
detail String(6000) 商品详细列表,由 json 转化而来,详见 Detail。
wxpay_pay_content_ext WxpayPayContentExt 微信支付扩展信息,详见 WxpayPayContentExt
alipay_pay_content_ext AlipayPayContentExt 支付宝扩展信息,详见 AlipayPayContentExt

Detail 结构

参数名 必填 类型 说明
cost_price 可选 Number(32) 订单原价,商户侧一张小票订单可能被分多次支付,订单原价用于记录整张小票的支付金额。当订单原价与支付金额不相等则被判定为拆单,无法享受优惠。
receipt_id 可选 String(32) 商家小票ID
goods_detail 必填 GoodsDetail[] 商品详情,详见 GoodsDetail

GoodsDetail 结构

参数名 必填 类型 说明
goods_id String(32) 商品的编号
goods_name String(256) 商品名称
quantity Number(32) 商品数量
price Number(32) 商品单价,如果商户有优惠,需传输商户优惠后的单价
单品总金额应 <= 订单总金额total_fee,否则会无法享受优惠

WxpayPayContentExt 结构

参数名 必填 类型 说明
attach String(127) 附加数据,记录子商户自定义数据
goods_tag String(32) 商品标记,代金券或立减优惠功能的参数
product_id String(32) 商品id,子商户自定义(扫码支付必填,刷卡支付不填,其他可选)
limit_pay String(32) 定支付方式,目前只能是:no_credit,指定不能使用信用卡支付

AlipayPayContentExt 结构

参数名 必填 类型 说明
discountable_amount Number(64) 参与优惠的金额
undiscountable_amount Number(64) 不参与优惠的金额
product_code String(128) 产品码
royalty_info String(256) 分账信息,json结构
extend_params String(256) 扩展信息,花呗相关的逻辑
disable_pay_channels String(128) 不可用渠道

退款请求时的退款单信息

RefundContent 结构(仅退款请求使用)

参数名 必填 类型 说明
out_trade_no String(32) 由客户端生成的订单号,前缀必须是云支付订单前缀
out_refund_no String(32) 由客户端生成的退款单号,前缀必须是云支付订单前缀
total_fee Number(32) 订单总金额,单位分
refund_fee Number(32) 本次退款总金额,单位分
refund_fee_type String(3) 本次退款总金额货币类型(目前只支持人民币,请填 CNY)
wxpay_refund_content_ext WxpayRefundOrderContentExt 微信支付扩展信息,详见 WxpayRefundOrderContentExt
alipay_refund_order_content_ext AlipayRefundOrderContentExt 支付宝扩展信息,详见 AlipayRefundOrderContentExt

WxpayRefundOrderContentExt 结构

参数名 必填 类型 说明
state Number(32) 退款状态,详见 WxpayRefundOrderState
cash_refund_fee Number(32) 现金退款金额,单位:分
settlement_refund_fee Number(32) 去掉非充值代金券退款金额后的退款金额,单位:分。
退款金额 = 申请退款金额 - 非充值代金券退款金额,退款金额 <= 申请退款金额
退款金额 = 申请退款金额 - 非充值代金券退款金额 退款金额 <= 申请退款金额
coupon_refund_fee Number(32) 退款代金券金额,支持多张代金券,单位:分
coupon_refund_count Number(32) 退款代金券数量
coupon_refund_infos WxpayCouponInfo 退款代金券信息,详见WxpayCouponInfo
refund_account String(30) 退款资金来源,仅针对老资金流子商户使用
默认使用未结算资金退款
REFUND_SOURCE_UNSETTLED_FUNDS:未结算资金退款
REFUND_SOURCE_RECHARGE_FUNDS:可用余额退款
refund_channel String(16) 退款渠道
ORIGINAL:原路退款
BALANCE:退回到余额
refund_recv_account String(64) 取当前退款单的退款入账方
1、退回银行卡:{银行名称}{卡类型}{卡尾号}
2、退回支付用户零钱:支付用户零钱

AlipayRefundOrderContentExt 结构

参数名 必填 类型 说明
fund_change String(1) 是否发生了资金变化,示例:Y
gmt_refund_pay String(32) 退款时间
refund_detail_item_list AlipayFundBill 退款渠道,详见 AlipayFundBill
refund_status AlipayRefundOrderState(枚举类型) 退款状态,详见 AlipayRefundOrderState

客户端信息

OrderClient 结构

参数名 必填 类型 说明
device_id String(64) 子商户自定义,终端设备号
staff_id String(64) 子商户自定义,店员ID
terminal_type Number(32) 终端类型,1:windows,2:andriod,3:iso,4:linux,100:其他
sub_terminal_type Number(32) 子终端类型,代表一个机具品牌,具体值可以联系云支付分配
machine_no String(32) 刷卡支付特有,每个收银终端的唯一码(刷卡支付必填)
sdk_version String(10) 云支付SDK版本号
spbill_create_ip String(16) 调用云支付 API 的机器 IP
sn_code String(64) 使用云支付机具配置方式的,刷卡支付、查询订单、申请退款、退款查询四个接口需要填机具的sn号

门店信息

ShopInfo 结构

参数名 必填 类型 说明
shop_id Sting(64) 门店编号
shop_name String(32) 门店名称
province String(32) 门店所在省
city String(32) 门店所在市
district String(32) 门店所在区
address String(128) 门店详细地址
coordinate_type Number(32) 门店坐标类型
longitude String(16) 门店经度
latitude String(16) 门店维度
height String(16) 门店海拔
phone String(64) 门店联系电话
out_shop_id String(20) 外部可见的商户门店号,云支付内全局唯一,可用于生成门店固定二维码,仅返回时有该字段
out_shop_id_url 否· String(128) 门店二维码,仅返回时有该字段
device_infos DeviceInfo[] 门店设备信息列表,详见 DeviceInfo
staff_infos StaffInfo[] 门店店员信息列表,详见 StaffInfo
fee_type String(20) 门店支持的币种,如果不填,默认为 CNY

DeviceInfo 结构

参数名 必填 类型 说明
device_id String(64) 门店内终端编号
device_type Number(32) 设备类型
1:刷卡支付;2:扫码支付;3:混合支付,支持刷卡支付+扫码支付;4:固定二维码支付
remark String(64) 子商户自定义备注信息
device_name String 设备名称

StaffInfo结构

参数名 必填 类型 说明
staff_id String(64) 门店内店员编号
staff_name String(64) 店员名称
remark String(64) 子商户自定义备注信息
shop_manager Bool 是否是店长
receive_one_code_pay_notify Bool 是否接收一码支付的成功消息通知

子商户信息

SubMchInfo 结构

参数名 必填 类型 说明
sub_mch_id String(32) 微信支付分配的子商户号
company_name String(255) 子商户在第三方支付平台登记的公司名称
desc String(255) 子商户描述
cloud_cashier_id String(32) 云支付分配的唯一订单前缀,下单时商户的订单号需要以这个 id 开头
out_sub_mch_id String(32) 云支付分配的商户 id
default_order_body String 默认的商品或订单简要描述,固定二维码支付时使用
sub_mch_admin_infos SubMchAdminInfo 商户管理者的信息列表,详见本节 SubMchAdminInfo
out_sub_mch_id_url String(128) 子商户二维码
merchant_name String(256) 子商户在第三方支付平台的商户名
logo String 商户logo
admin_email String(255) 商户管理员邮箱
phone String(255) 商户联系电话
one_code_pay_ad_info OneCodePayAdInfo 一码支付中,顾客完成支付后的广告信息,详见本节 OneCodePayAdInfo
is_use_cpay_shop_system Bool 是否使用云支付门店管理系统
ad_page_url String 支付成功后广告页面url
buslic_id String(32) 营业执照 ID
sub_mch_source UInt 子商户来源
direct Bool false 时使用 upstream_out_channel_id 做转发
upstream_out_channel_id String 将这一商户的支付请求通过这一渠道转发至其他(相关联的)商户
upstream_company_name String 上游服务商的公司名
selectable_upstream_sub_mchs UpstreamSubMchInfo 可选择的上游子商户,不包含各种 key,详见本节 UpstreamSubMchInfo
bank_rate UInt 商户进件后,银行收取的费率 1/1000000
wxpay_sub_mch_info_ext WxpaySubMchInfoExt 微信支付子商户扩展信息,详见本节 WxpaySubMchInfoExt
alipay_sub_mch_info_ext AlipaySubMchInfoExt 支付宝子商户扩展信息,详见本节 AlipaySubMchInfoExt

SubMchAdminInfo 结构

参数名 必填 类型 说明
name String 真实姓名
receive_one_code_pay_notify Bool 是否接收一码支付的成功消息通知

OneCodePayAdInfo 结构

参数名 必填 类型 说明
picture String(64) 广告图片内容
url String(64) 单击广告图片后的跳转链接,如没有,则图片无法单击

UpstreamSubMchInfo 结构

参数名 必填 类型 说明
upstream_out_sub_mch_id String(64) 上游云支付子商户帐号
upstream_out_mch_id String 上游云支付服务商帐号
upstream_out_channel_id String 上游服务商渠道 id
cached_buslic_id String 上游子商户营业执照id
cached_cloud_cashier_id String 上游子商户商户订单号前缀
cached_mch_company_name String 上游服务商的公司名

WxpaySubMchInfoExt 微信支付子商户扩展信息

参数名 必填 类型 说明
sub_app_id String(32) 第三方支付平台分配给子商户的帐号

AlipaySubMchInfoExt 支付宝子商户扩展信息

参数名 必填 类型 说明
sub_mch_user_id String(64) 子商户在支付宝平台的用户 id 即 uid
ali_authorization_url String 子商户支付宝授权二维码

枚举值定义

交易相关信息

PayPlatform 枚举变量

枚举值 说明
1 微信支付
2 支付宝
3 会员卡

TradeType 枚举变量

枚举值 说明
1 刷卡支付
2 扫码支付
3 公众号支付
4 APP支付
5 声波支付
6 手机网站支付
8 一码支付

WxpayOrderState 枚举变量

枚举值 说明
1 订单初始态
2 刷卡支付,成功
3 统一下单,支付成功
4 已转入退款
5 刷卡支付,顾客停止支付
6 统一下单,待顾客支付
7 统一下单,订单已关闭
8 刷卡支付,已撤单
9 刷卡支付,用户支付中
10 刷卡支付,支付错误
11 作废状态,表示本地有,第三方支付平台没有的订单

AlipayOrderState 枚举变量

枚举值 说明
1 订单初始态
2 成功
4 等待用户支付
5 已关闭,或者已退款
6 交易结束,不可退款
7 订单不存在

CardOrderState 枚举变量

枚举值 说明
1 订单初始态
2 成功
3 等待用户支付
4 已退款
5 已关单

WxpayRefundOrderState 枚举变量

枚举值 说明
1 退款单初始态
2 退款成功
3 退款失败
4 退款处理中
5 转入代发,退款到银行发现用户的卡作废或者冻结了,导致原路退款银行卡失败,资金回流到子商户的现金帐号,需要子商户人工干预,通过线下或者财付通转账的方式进行退款
6 作废状态,表示本地有,第三方支付平台没有的订单

AlipayRefundOrderState 枚举变量

枚举值 说明
1 退款单初始态
2 退款单成功态
3 申请退款失败

CardRefundOrderState 枚举变量

枚举值 说明
1 退款单初始态
2 退款单成功态
3 申请退款失败

认证加密信息

AuthenType 枚举变量

枚举值 说明
1 HMAC-SHA256
2 MD5

SignType 枚举变量

枚举值 说明
1 RSASSA-PSS-2048-SHA256

EncrytType 枚举变量

枚举值 说明
1 AES-128-GCM

接口相关信息

Status 枚举变量

枚举值 操作结果 返回内容是否带认证码 原请求是否能重试 用户操作建议
0 成功 -
3 未知 原请求重试
101 失败 根据description字段内容,检查调用逻辑是否有问题,如认证码计算错误
102 失败 换新单号重试,并根据description字段内容,检查调用逻辑是否有问题,如单号重复
103 未知 隔3秒后原请求重试或查询结果
104 失败 根据description字段内容操作,如退款时顾客余额不足

Interface 枚举变量

枚举值 说明
14 查询门店信息
100 刷卡支付
101 扫描支付
103 关单
104 退款
106 查询订单
107 查询退款单
108 撤单
202 接口监控上报
203 客户端机器配置上报

其他信息

CompressType

枚举值 说明
1 kZip
2 kRAR
3 kGZip