商户用户实名认证同步

#
注意:本接口不进行真实的KYC实名校验,仅做数据留存,请在调用该接口时确认信息是否正确。对接时请注意对于本接口签名方法有变更,请参考下述代码示例(仅限本接口)。

# 请求地址

  • POST https://test2-openapi.91fafafa.com/api/customerAccount/addCustomerRealInfo

# 请求参数

参数 类型 必填 描述 示例
customerMerchantsId string Y 用户商户唯一标识(商户侧的用户id,最大长度不可超过64个字符) 28398190
merchantsId string Y 商户id CH10001165
name string Y 用户KYC姓名 Pual KaYa
idCardType Integer Y 证件类型
1.身份证
2.护照
1
idCard string Y 证件号 1092923790210293
platSign string Y 签名 wKiDE42Ed/osErh1GrVtCTtwqBfjO6TJmbN7fWo1nKGF0M7QE
woEGsZzNCF20Ks6q7MTpL2TwaQrYfjwxQ4nzvYNHG8GfjkUMo
n15ouVddEL8G2Ajq77NfZ8Vm/SXwore02kU9wMoJKucU7MBER
m2RIfy1vc2gkHwlGBftLR/fuf4ucdmYKWl5ATdH44w5vUxq5L
8tfEf6pVBEDOS5ragisBODABHRrxkRg++i14rMc+9SgEa80Um
zdQi6YTtCLIWUKm5PjtkxGZbXYbST0EWo5NqrGPYwZHhyFST7
7Ze0vSRvVy9C7UWnihrqNgTMrFin/94qYnam2lYYRaeSwkEg==

# 请求报文示例

{
  "customerMerchantsId": "28398190",
  "merchantsId": "CH10001165",
  "name": "Pual KaYa",
  "idCardType": 1,
  "idCard": "1092923790210293",
  "platSign": "wKiDE42Ed/osErh1GrVtCTtwqBfjO6TJmbN7fWo1nKGF0M7QEwoEGsZzNCF20Ks6q7MTpL2TwaQrYfjwxQ4nzvYNHG8GfjkUMon15ouVddEL8G2Ajq77NfZ8Vm/SXwore02kU9wMoJKucU7MBERm2RIfy1vc2gkHwlGBftLR/fuf4ucdmYKWl5ATdH44w5vUxq5L8tfEf6pVBEDOS5ragisBODABHRrxkRg++i14rMc+9SgEa80UmzdQi6YTtCLIWUKm5PjtkxGZbXYbST0EWo5NqrGPYwZHhyFST77Ze0vSRvVy9C7UWnihrqNgTMrFin/94qYnam2lYYRaeSwkEg=="
}

# 响应参数

参数 类型 必填 描述 示例
success Boolean Y 是否成功 true
code String Y 响应码
000000为成功,
其它为失败
000000
msg String Y 响应描述
success:成功
success
data Object Y 默认为null null
platSign String Y 签名 GfpNwHrHeTYnidB9bHgdTgvsnbN8GIoo1NgYHmBp
NiucCSAKdjSKRnPs8bcnP/RcQZ8RZPuvh8ayBRBZ
OtgJo4pxG89hT7MaXGUAhjMU+gkns6EvN+RsNF+W
KuqyWDrhXYVCZzDud7sKFeEqmyCSFNsViuBPCG56
60z+euTi35Q5O0J046FlMJi0+fn1fCb+mHgauq7j
kyuzXtAkRgIW1gKxa9YoBUYxdV26izIW4bgnCLF3
b2w8ksXbs6F7Bu7PjPGHRvZK9SjrrrYOmmIfCt8c
wQFyaY3cWAuD8M/3yl5+iSQQxD9rN+Y/Bdmps4v8
zdTuniHy3gIzn2t8o9saFQ==

# 成功响应报文示例

  • 成功响应报文示例
{
  "success": true,
  "code": "000000",
  "msg": "success",
  "data": null,
  "platSign": "GfpNwHrHeTYnidB9bHgdTgvsnbN8GIoo1NgYHmBpNiucCSAKdjSKRnPs8bcnP/RcQZ8RZPuvh8ayBRBZOtgJo4pxG89hT7MaXGUAhjMU+gkns6EvN+RsNF+WKuqyWDrhXYVCZzDud7sKFeEqmyCSFNsViuBPCG5660z+euTi35Q5O0J046FlMJi0+fn1fCb+mHgauq7jkyuzXtAkRgIW1gKxa9YoBUYxdV26izIW4bgnCLF3b2w8ksXbs6F7Bu7PjPGHRvZK9SjrrrYOmmIfCt8cwQFyaY3cWAuD8M/3yl5+iSQQxD9rN+Y/Bdmps4v8zdTuniHy3gIzn2t8o9saFQ=="
}
  • 失败响应报文示例
{
  "success": false,
  "code": "A0340",
  "msg": "sign error! (A0340)",
  "data": null
}

# 代码实现Demo

  • 代码示例仅供参考,具体参数说明请参考请求参数说明
import com.google.gson.Gson;
import okhttp3.*;

import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;

public class MerchantUserRealInfoSyncDemo {

    /**
     * 平台公钥
     */
    private static final String PLAT_PUBLIC_KEY ="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1dad35S74jfLPbHJh8P0jDHiTvkxwrtITK97ovVu19B24UdiHyHoEZgtNlS6alFQj1ULQ71d6EPh2rWCNkS2b5HGQXwDYBtwvesVQ8h4Sf3eVPTTLGw3BS7Os4vtDEN6BezMdv3sUG2N5i6JF+5H4CQTq3MD2Cx6u/Cv7oFOdFqeDT0AH+TR7uyZxn69OtkJaHHr834EUcdShJKKMQtbC11WCcut7ilDUgdvZnThiVTq7cfl8mcC9FDKcQ9bMWamScWIB5cJQdUW23Kr0c1NvZlpgPS8U5VODM4Uc4muHJPD2cJmquuJ+4AGP36rEk27lUB3h7B6JI1QGiuh1yyPDwIDAQAB";

    /**
     * 商户私钥
     */
    private static final String MCH_PRIVATE_KEY  ="MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC/wgJqa2WHUTrJwdrtOig8lwuKPaL462/1rF45p+xi25uoGUEyiOtB0OC6HLePUfkGYzPULPH/O0yF5GmWkhSuz3lKK/XtXSeRdQIwAQ7lYlhfdJjTLVC7mwkDRZeFePwbnAX5pC0h6Yxf0ibjAglkW2d45AscouZt91xIxgf0VLNZ9dHe8R7j8hPKOGpNi+709ThmRZQVHQLN+6w+mrID7JyWBSbbf2bVWc7UBlHCkudwjEiW/r96CefTukb0SigaS0XpqWEKYHeNWS0DP/a5OUDzXMi6fqHEzMPa6uNYbLpOW1rxMhMhU97W8pLYBba0T9BI7F/xusozxVDVeQbDAgMBAAECggEAdZ4EaU3yemuCiZoUNIoFgBSNiX+A5PlUNPZC3U54mbJl6VeEPADre/Uowj82//uhqR9T/QKMdKbkqwONGEQF16t+k9YfBDatPHTuoI8lmeEWn4Ye7vjOmiPgBVe8NqwcxrqOl67x1+kupt955qerJxlBgE8v2aK5gB3HRwPggSYZgSZJ3X2zQMJ+XN4qe49Un+utqFuGtVRwPQvs/Kazp5GL7WlR0OnpQ2KZ+ur9T58VfTKmIeqBckey7nIrb/fdodJ7IqcykWjSLmy8p84W78iiRDfPn81Ujb231EWW+AbuV399aXBZ4oaR4q8wwkhe9xHUADWLvcfCnMrB40LkEQKBgQD2TEeBEB5Gwj/zpriq23xKJyzfo0hOxzGY/Ol2EykGeEYhny/YiTlMYtOMy37RiGKr4lN7G/pKl2fI5kRjgQM1QXgx6dxd11D0rORXj+SAy6+zAq3NVY4c3zDKmrQQ8x3f2QFffo+TmLtw/BH0Frp+a2lzKzIcXtZ4/akJdVIihwKBgQDHT7xvOaNyAPnnYwpROMI9eUVgFc9pMRAmQ18at8ggZ8M+Ww1nhr00loufzkovCb9MvGR4HSedWHfgmtDu1hUFtl7PItNItsB347yWPxR/lVLs44NVXt7jkFisoBoEBXaNVVt6uOSvBiqINmX3gm4FoisI2SRZsH7nMr07OXO85QKBgCkXdN6Nh9+aTP0jla+7yrK8cnolTc0G4rl5iKHQdInFyz2Ux3DDBDJAUrcsxE3FCWFP80mY01tag1A7SrGnNpfOAnWhZMirQbBwn/AT67WpRfkBu2mEmp8qhYNn6B7j0Nol5FrATMf9NViWVZB5skehOAik7klZcULiXy9ayYdFAoGAA+0bLim5gYZpZdh6nIz8ro9UAYeMdWsFAWv0VKdoJtNEclcC1ZY+5elNSNGcfn63qQBRDlisrhnPCrqiAQJwmZM1HOl3tgf7lKEE1wTZF4ZOguIcdTMQOvVd+dCRkqC07CXRToKT5qq9bb98lLqaBjxikqMMZ0PlzBIgzijckc0CgYAH16CziStEZVvKbiR8b0ftF9mf6V8I0KHianMgV8X6Y51aE0Ig1eQhIvqSjqtBac7gEppiu3OQVrp39uLdgyvDSVta1Hq9QYYTDNt8crt69aD/Th1h5esYvApYyZIhHbFDR5meE4Y3nHpfY7J8zhmfyaVW/6cuwPaToTtrEjQmWQ==";

    /**
     * apiUrl
     */
    private static final String API_URL = "https://test2-openapi.91fafafa.com/api/customerAccount/addCustomerRealInfo";

    public static void main(String[] args) throws Exception {
        syncCustomerRealInfo();
    }

    private static void syncCustomerRealInfo() throws Exception {
        Map<String, Object> requestParams = new HashMap<>();
        requestParams.put("customerMerchantsId", "28398190");
        requestParams.put("merchantsId", "CH10001165");
        requestParams.put("name", "Pual KaYa");
        requestParams.put("idCardType", 1);
        requestParams.put("idCard", "1092923790210293");

        // 私钥加密
        String platSign = CheeseTradeRSAUtil.getRealNameSign(requestParams, MCH_PRIVATE_KEY);
        requestParams.put("platSign", platSign);

        // 接口请求
        Gson gson = new Gson();
        String requestBody = gson.toJson(requestParams);
        System.out.println("Post Json Params:" + requestBody);

        // 发送请求并获取响应
        OkHttpClient client = new OkHttpClient();
        MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
        RequestBody body = RequestBody.create(mediaType, requestBody);
        Request request = new Request.Builder()
            .url(API_URL)
            .post(body)
            .addHeader("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36")
            .build();
        Response response = client.newCall(request).execute();
        if (!response.isSuccessful()) {
            System.out.println("Request failed: " + response.code() + " - " + response.message());
        }

        // 验签处理
        String responseBody = response.body().string();
        System.out.println("Response: " + responseBody);
        Type type = new com.google.gson.reflect.TypeToken<Map<String, Object>>() {}.getType();
        Map<String, Object> map = gson.fromJson(responseBody, type);
        boolean verifyResult = CheeseTradeRSAUtil.verifyRealNameSign(map, PLAT_PUBLIC_KEY);
        if (verifyResult) {
            System.out.println("签名验证成功");
        } else {
            System.out.println("签名验证失败");
        }
        response.close();
    }
}
<?php

    // 平台公钥,从密钥配置中获取
    $platPublicKey = '-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1dad35S74jfLPbHJh8P0jDHiTvkxwrtITK97ovVu19B24UdiHyHoEZgtNlS6alFQj1ULQ71d6EPh2rWCNkS2b5HGQXwDYBtwvesVQ8h4Sf3eVPTTLGw3BS7Os4vtDEN6BezMdv3sUG2N5i6JF+5H4CQTq3MD2Cx6u/Cv7oFOdFqeDT0AH+TR7uyZxn69OtkJaHHr834EUcdShJKKMQtbC11WCcut7ilDUgdvZnThiVTq7cfl8mcC9FDKcQ9bMWamScWIB5cJQdUW23Kr0c1NvZlpgPS8U5VODM4Uc4muHJPD2cJmquuJ+4AGP36rEk27lUB3h7B6JI1QGiuh1yyPDwIDAQAB
-----END PUBLIC KEY-----';

    // 商户私钥,商户自己生成
    $mchPrivateKey = '-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC/wgJqa2WHUTrJwdrtOig8lwuKPaL462/1rF45p+xi25uoGUEyiOtB0OC6HLePUfkGYzPULPH/O0yF5GmWkhSuz3lKK/XtXSeRdQIwAQ7lYlhfdJjTLVC7mwkDRZeFePwbnAX5pC0h6Yxf0ibjAglkW2d45AscouZt91xIxgf0VLNZ9dHe8R7j8hPKOGpNi+709ThmRZQVHQLN+6w+mrID7JyWBSbbf2bVWc7UBlHCkudwjEiW/r96CefTukb0SigaS0XpqWEKYHeNWS0DP/a5OUDzXMi6fqHEzMPa6uNYbLpOW1rxMhMhU97W8pLYBba0T9BI7F/xusozxVDVeQbDAgMBAAECggEAdZ4EaU3yemuCiZoUNIoFgBSNiX+A5PlUNPZC3U54mbJl6VeEPADre/Uowj82//uhqR9T/QKMdKbkqwONGEQF16t+k9YfBDatPHTuoI8lmeEWn4Ye7vjOmiPgBVe8NqwcxrqOl67x1+kupt955qerJxlBgE8v2aK5gB3HRwPggSYZgSZJ3X2zQMJ+XN4qe49Un+utqFuGtVRwPQvs/Kazp5GL7WlR0OnpQ2KZ+ur9T58VfTKmIeqBckey7nIrb/fdodJ7IqcykWjSLmy8p84W78iiRDfPn81Ujb231EWW+AbuV399aXBZ4oaR4q8wwkhe9xHUADWLvcfCnMrB40LkEQKBgQD2TEeBEB5Gwj/zpriq23xKJyzfo0hOxzGY/Ol2EykGeEYhny/YiTlMYtOMy37RiGKr4lN7G/pKl2fI5kRjgQM1QXgx6dxd11D0rORXj+SAy6+zAq3NVY4c3zDKmrQQ8x3f2QFffo+TmLtw/BH0Frp+a2lzKzIcXtZ4/akJdVIihwKBgQDHT7xvOaNyAPnnYwpROMI9eUVgFc9pMRAmQ18at8ggZ8M+Ww1nhr00loufzkovCb9MvGR4HSedWHfgmtDu1hUFtl7PItNItsB347yWPxR/lVLs44NVXt7jkFisoBoEBXaNVVt6uOSvBiqINmX3gm4FoisI2SRZsH7nMr07OXO85QKBgCkXdN6Nh9+aTP0jla+7yrK8cnolTc0G4rl5iKHQdInFyz2Ux3DDBDJAUrcsxE3FCWFP80mY01tag1A7SrGnNpfOAnWhZMirQbBwn/AT67WpRfkBu2mEmp8qhYNn6B7j0Nol5FrATMf9NViWVZB5skehOAik7klZcULiXy9ayYdFAoGAA+0bLim5gYZpZdh6nIz8ro9UAYeMdWsFAWv0VKdoJtNEclcC1ZY+5elNSNGcfn63qQBRDlisrhnPCrqiAQJwmZM1HOl3tgf7lKEE1wTZF4ZOguIcdTMQOvVd+dCRkqC07CXRToKT5qq9bb98lLqaBjxikqMMZ0PlzBIgzijckc0CgYAH16CziStEZVvKbiR8b0ftF9mf6V8I0KHianMgV8X6Y51aE0Ig1eQhIvqSjqtBac7gEppiu3OQVrp39uLdgyvDSVta1Hq9QYYTDNt8crt69aD/Th1h5esYvApYyZIhHbFDR5meE4Y3nHpfY7J8zhmfyaVW/6cuwPaToTtrEjQmWQ==
-----END PRIVATE KEY-----';

    $params = array(
        'customerMerchantsId' => '28398190',
        'merchantsId' => 'CH10001165',
        'name' => 'Pual KaYa',
        'idCardType' => 1,
        'idCard' => '1092923790210293'
    );

    //拼接参数
    $str = getContentRealName($params);
    echo $str;

    // 生成签名
    $platSign = genSign($str, $mchPrivateKey);
    echo $platSign;
    $params['platSign'] = $platSign;

    $params_string = json_encode($params);
    $url = 'https://test2-openapi.91fafafa.com/api/customerAccount/addCustomerRealInfo';
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $params_string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36',
        'Content-Type: application/json',
        'Content-Length: ' . strlen($params_string))
    );
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

    //execute post
    $request = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    if($httpCode == 200)
    {
        $result = json_decode($request, true);
        if($result['msg']=='success'){
            echo "success :". $result['success'] . "\n";
            echo "code :". $result['code'] . "\n";
            echo "msg :". $result['msg'] . "\n";
            echo "data :". "null" . "\n";
            echo "platSign :". $result['platSign'] . "\n";
        }
        else{
            echo "success :". $result['success'] . "\n";
            echo "code :". $result['code'] . "\n";
            echo "msg :". $result['msg'] . "\n";
            echo "data :". "null" . "\n";
        }

        $platSign = $result['platSign'];
        unset($result['platSign']);
        $string = getContentRealName($result);
        $decryptStr = verifySign($string, $platSign, $platPublicKey);
        echo "verifyResult :". $decryptStr . "\n";
    }
    else {
        echo $httpCode;
    }

// 拼接待签名的字符串-专用于商户用户实名认证同步使用
function getContentRealName($params) {
    ksort($params);
    $str = '';
    foreach ($params as $name => $value) {
        if ($value === null || $value === '') {
            continue;
        }
        if ($name === 'data') {
            if (is_array($value)) {
                $str .= getContentRealName($value);
            } else {
                $str .= $value;
            }
        } elseif ($name === 'payeeAccountInfos') {
            // payeeAccountInfos是string参与签名 是数组不参与签名
            if (is_string($value)) {
                $str .= $value;
            }
        } else {
            $str .= $value;
        }
    }
    return $str;
}

//生成签名
function genSign($toSign, $privateKey){
    $key = openssl_get_privatekey($privateKey);
    openssl_sign($toSign, $signature, $key, OPENSSL_ALGO_SHA256);
    openssl_free_key($key);
    $sign = base64_encode($signature);
    return $sign;
}

//校验签名
function verifySign($data, $sign, $pubKey){
    $sign = base64_decode($sign);
    $key = openssl_pkey_get_public($pubKey);
    $result = openssl_verify($data, $sign, $key, OPENSSL_ALGO_SHA256) === 1;
    return $result;
}

?>
const AXIOS= require('axios');
//引入的签名工具类(CheeseTradeRSAUtil)的函数,签名工具类可以参照"签名&验签算法"里的DEMO
const  { getRealNameSign, verifyRealNameSign }= require('./CheeseTradeRSAUtil');

// 平台公钥
const platPublicKey = `-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1dad35S74jfLPbHJh8P0jDHiTvkxwrtITK97ovVu19B24UdiHyHoEZgtNlS6alFQj1ULQ71d6EPh2rWCNkS2b5HGQXwDYBtwvesVQ8h4Sf3eVPTTLGw3BS7Os4vtDEN6BezMdv3sUG2N5i6JF+5H4CQTq3MD2Cx6u/Cv7oFOdFqeDT0AH+TR7uyZxn69OtkJaHHr834EUcdShJKKMQtbC11WCcut7ilDUgdvZnThiVTq7cfl8mcC9FDKcQ9bMWamScWIB5cJQdUW23Kr0c1NvZlpgPS8U5VODM4Uc4muHJPD2cJmquuJ+4AGP36rEk27lUB3h7B6JI1QGiuh1yyPDwIDAQAB
-----END PUBLIC KEY-----`;

// 商户私钥
const mchPrivateKey = `-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC/wgJqa2WHUTrJwdrtOig8lwuKPaL462/1rF45p+xi25uoGUEyiOtB0OC6HLePUfkGYzPULPH/O0yF5GmWkhSuz3lKK/XtXSeRdQIwAQ7lYlhfdJjTLVC7mwkDRZeFePwbnAX5pC0h6Yxf0ibjAglkW2d45AscouZt91xIxgf0VLNZ9dHe8R7j8hPKOGpNi+709ThmRZQVHQLN+6w+mrID7JyWBSbbf2bVWc7UBlHCkudwjEiW/r96CefTukb0SigaS0XpqWEKYHeNWS0DP/a5OUDzXMi6fqHEzMPa6uNYbLpOW1rxMhMhU97W8pLYBba0T9BI7F/xusozxVDVeQbDAgMBAAECggEAdZ4EaU3yemuCiZoUNIoFgBSNiX+A5PlUNPZC3U54mbJl6VeEPADre/Uowj82//uhqR9T/QKMdKbkqwONGEQF16t+k9YfBDatPHTuoI8lmeEWn4Ye7vjOmiPgBVe8NqwcxrqOl67x1+kupt955qerJxlBgE8v2aK5gB3HRwPggSYZgSZJ3X2zQMJ+XN4qe49Un+utqFuGtVRwPQvs/Kazp5GL7WlR0OnpQ2KZ+ur9T58VfTKmIeqBckey7nIrb/fdodJ7IqcykWjSLmy8p84W78iiRDfPn81Ujb231EWW+AbuV399aXBZ4oaR4q8wwkhe9xHUADWLvcfCnMrB40LkEQKBgQD2TEeBEB5Gwj/zpriq23xKJyzfo0hOxzGY/Ol2EykGeEYhny/YiTlMYtOMy37RiGKr4lN7G/pKl2fI5kRjgQM1QXgx6dxd11D0rORXj+SAy6+zAq3NVY4c3zDKmrQQ8x3f2QFffo+TmLtw/BH0Frp+a2lzKzIcXtZ4/akJdVIihwKBgQDHT7xvOaNyAPnnYwpROMI9eUVgFc9pMRAmQ18at8ggZ8M+Ww1nhr00loufzkovCb9MvGR4HSedWHfgmtDu1hUFtl7PItNItsB347yWPxR/lVLs44NVXt7jkFisoBoEBXaNVVt6uOSvBiqINmX3gm4FoisI2SRZsH7nMr07OXO85QKBgCkXdN6Nh9+aTP0jla+7yrK8cnolTc0G4rl5iKHQdInFyz2Ux3DDBDJAUrcsxE3FCWFP80mY01tag1A7SrGnNpfOAnWhZMirQbBwn/AT67WpRfkBu2mEmp8qhYNn6B7j0Nol5FrATMf9NViWVZB5skehOAik7klZcULiXy9ayYdFAoGAA+0bLim5gYZpZdh6nIz8ro9UAYeMdWsFAWv0VKdoJtNEclcC1ZY+5elNSNGcfn63qQBRDlisrhnPCrqiAQJwmZM1HOl3tgf7lKEE1wTZF4ZOguIcdTMQOvVd+dCRkqC07CXRToKT5qq9bb98lLqaBjxikqMMZ0PlzBIgzijckc0CgYAH16CziStEZVvKbiR8b0ftF9mf6V8I0KHianMgV8X6Y51aE0Ig1eQhIvqSjqtBac7gEppiu3OQVrp39uLdgyvDSVta1Hq9QYYTDNt8crt69aD/Th1h5esYvApYyZIhHbFDR5meE4Y3nHpfY7J8zhmfyaVW/6cuwPaToTtrEjQmWQ==
-----END PRIVATE KEY-----`;

// 请求参数
const params =
    {
        customerMerchantsId: '28398190',
        merchantsId: 'CH10001165',
        name: 'Pual KaYa',
        idCardType: 1,
        idCard: '1092923790210293'
    };

//------------- MAIN -------
const url = 'https://test2-openapi.91fafafa.com/api/customerAccount/addCustomerRealInfo';

const platSign = getRealNameSign(params, mchPrivateKey);
console.log('Generated signature:', platSign);
params.platSign = platSign;
sendRequestAndVerify(url, params);

//POST 请求
async function sendRequestAndVerify(apiUrl, requestBody) {
    try {
        const response = await AXIOS.post(apiUrl, requestBody, {
            headers: {
                'Content-Type': 'application/json; charset=utf-8',
                'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36',
            },
        });

        if (response.status !== 200) {
            console.error(`Request failed: ${response.status} - ${response.statusText}`);
            return;
        }

        const responseBody = response.data;
        console.log('Response:', responseBody);

        const verifyResult = verifyRealNameSign(responseBody, platPublicKey);
        if (verifyResult) {
            console.log('成功验签');
        } else {
            console.error('签名验证错误');
        }
    } catch (error) {
        console.error('请求失败:', error.message);
    }
}