Merchant User Real-name Authentication Sync

#
Note: This API does not perform actual KYC identity verification. It only stores data for record-keeping. Please confirm the information is correct before calling this API.When connecting, please note that the signature method of this interface has changed. Please refer to the following code example (only for this interface).

# Request URL

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

# Request parameters

Parameter Type Required Description Example
customerMerchantsId string Y Unique merchant user identifier (user id on merchant side.The maximum length cannot exceed 64 characters.) 28398190
merchantsId string Y MerchantId CH10001165
name string Y User KYC name Pual KaYa
idCardType Integer Y ID type
1. ID card
2. Passport
1
idCard string Y ID number 1092923790210293
platSign string Y sign wKiDE42Ed/osErh1GrVtCTtwqBfjO6TJmbN7fWo1nK
GF0M7QEwoEGsZzNCF20Ks6q7MTpL2TwaQrYfjwxQ4n
zvYNHG8GfjkUMon15ouVddEL8G2Ajq77NfZ8Vm/SXw
ore02kU9wMoJKucU7MBERm2RIfy1vc2gkHwlGBftLR
/fuf4ucdmYKWl5ATdH44w5vUxq5L8tfEf6pVBEDOS5
ragisBODABHRrxkRg++i14rMc+9SgEa80UmzdQi6YT
tCLIWUKm5PjtkxGZbXYbST0EWo5NqrGPYwZHhyFST7
7Ze0vSRvVy9C7UWnihrqNgTMrFin/94qYnam2lYYRa
eSwkEg==

# Example of request message

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

# Response parameters

Parameter Type Required Description Example
success Boolean Y Whether successful true
code String Y ResponseCode
000000 indicates success,
others indicate failure.
000000
msg String Y ResponseDescription
success: Successful
success
data Object Y Defaults to null null
platSign String Y sign GfpNwHrHeTYnidB9bHgdT
gvsnbN8GIoo1NgYHmBpNi
ucCSAKdjSKRnPs8bcnP/R
cQZ8RZPuvh8ayBRBZOtgJ
o4pxG89hT7MaXGUAhjMU+
gkns6EvN+RsNF+WKuqyWD
rhXYVCZzDud7sKFeEqmyC
SFNsViuBPCG5660z+euTi
35Q5O0J046FlMJi0+fn1f
Cb+mHgauq7jkyuzXtAkRg
IW1gKxa9YoBUYxdV26izI
W4bgnCLF3b2w8ksXbs6F7
Bu7PjPGHRvZK9SjrrrYOm
mIfCt8cwQFyaY3cWAuD8M
/3yl5+iSQQxD9rN+Y/Bdm
ps4v8zdTuniHy3gIzn2t8
o9saFQ==

# Successful response message example

  • Successful response message example
{
  "success": true,
  "code": "000000",
  "msg": "success",
  "data": null,
  "platSign": "GfpNwHrHeTYnidB9bHgdTgvsnbN8GIoo1NgYHmBpNiucCSAKdjSKRnPs8bcnP/RcQZ8RZPuvh8ayBRBZOtgJo4pxG89hT7MaXGUAhjMU+gkns6EvN+RsNF+WKuqyWDrhXYVCZzDud7sKFeEqmyCSFNsViuBPCG5660z+euTi35Q5O0J046FlMJi0+fn1fCb+mHgauq7jkyuzXtAkRgIW1gKxa9YoBUYxdV26izIW4bgnCLF3b2w8ksXbs6F7Bu7PjPGHRvZK9SjrrrYOmmIfCt8cwQFyaY3cWAuD8M/3yl5+iSQQxD9rN+Y/Bdmps4v8zdTuniHy3gIzn2t8o9saFQ=="
}
  • Failed response message example
{
  "success": false,
  "code": "A0340",
  "msg": "sign error! (A0340)",
  "data": null
}

# Code implementation demo

  • Code examples are for reference only, please refer to the request parameter description for specific parameters.
import com.google.gson.Gson;
import okhttp3.*;

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

public class MerchantUserRealInfoSyncDemo {

    /**
     * Platform public key
     */
    private static final String PLAT_PUBLIC_KEY ="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1dad35S74jfLPbHJh8P0jDHiTvkxwrtITK97ovVu19B24UdiHyHoEZgtNlS6alFQj1ULQ71d6EPh2rWCNkS2b5HGQXwDYBtwvesVQ8h4Sf3eVPTTLGw3BS7Os4vtDEN6BezMdv3sUG2N5i6JF+5H4CQTq3MD2Cx6u/Cv7oFOdFqeDT0AH+TR7uyZxn69OtkJaHHr834EUcdShJKKMQtbC11WCcut7ilDUgdvZnThiVTq7cfl8mcC9FDKcQ9bMWamScWIB5cJQdUW23Kr0c1NvZlpgPS8U5VODM4Uc4muHJPD2cJmquuJ+4AGP36rEk27lUB3h7B6JI1QGiuh1yyPDwIDAQAB";

    /**
     * Merchant's private key
     */
    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");

        // Private key encryption
        String platSign = CheeseTradeRSAUtil.getRealNameSign(requestParams, MCH_PRIVATE_KEY);
        requestParams.put("platSign", platSign);

        // Interface request
        Gson gson = new Gson();
        String requestBody = gson.toJson(requestParams);
        System.out.println("Post Json Params:" + requestBody);

        // Send a request and get a response
        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());
        }

        // Signature verification processing
        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("Successful signature verification");
        } else {
            System.out.println("Signature verification failed");
        }
        response.close();
    }
}
<?php

    // Platform public key, obtained from key configuration
    $platPublicKey = '-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1dad35S74jfLPbHJh8P0jDHiTvkxwrtITK97ovVu19B24UdiHyHoEZgtNlS6alFQj1ULQ71d6EPh2rWCNkS2b5HGQXwDYBtwvesVQ8h4Sf3eVPTTLGw3BS7Os4vtDEN6BezMdv3sUG2N5i6JF+5H4CQTq3MD2Cx6u/Cv7oFOdFqeDT0AH+TR7uyZxn69OtkJaHHr834EUcdShJKKMQtbC11WCcut7ilDUgdvZnThiVTq7cfl8mcC9FDKcQ9bMWamScWIB5cJQdUW23Kr0c1NvZlpgPS8U5VODM4Uc4muHJPD2cJmquuJ+4AGP36rEk27lUB3h7B6JI1QGiuh1yyPDwIDAQAB
-----END PUBLIC KEY-----';

    // Merchant private key, generated by the merchant himself
    $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'
    );

    // Splicing parameters
    $str = getContentRealName($params);
    echo $str;

    // Generate signature
    $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;
    }

// Concatenate string for signing - specifically for merchant user real-name authentication sync
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 participates in signing as string, not as array
            if (is_string($value)) {
                $str .= $value;
            }
        } else {
            $str .= $value;
        }
    }
    return $str;
}

//Generate signature
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;
}

//Verify signature
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');
//The functions of the introduced signature tool class (CheeseTradeRSAUtil).
//The signature tool class can refer to the DEMO in "Signature & Verification Algorithm"
const  { getRealNameSign, verifyRealNameSign }= require('./CheeseTradeRSAUtil');

// Platform public key
const platPublicKey = `-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1dad35S74jfLPbHJh8P0jDHiTvkxwrtITK97ovVu19B24UdiHyHoEZgtNlS6alFQj1ULQ71d6EPh2rWCNkS2b5HGQXwDYBtwvesVQ8h4Sf3eVPTTLGw3BS7Os4vtDEN6BezMdv3sUG2N5i6JF+5H4CQTq3MD2Cx6u/Cv7oFOdFqeDT0AH+TR7uyZxn69OtkJaHHr834EUcdShJKKMQtbC11WCcut7ilDUgdvZnThiVTq7cfl8mcC9FDKcQ9bMWamScWIB5cJQdUW23Kr0c1NvZlpgPS8U5VODM4Uc4muHJPD2cJmquuJ+4AGP36rEk27lUB3h7B6JI1QGiuh1yyPDwIDAQAB
-----END PUBLIC KEY-----`;

// Merchant private 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-----`;

// Request Parameters
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 Request
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('Successful signature verification');
        } else {
            console.error('Signature verification error');
        }
    } catch (error) {
        console.error('Request failed:', error.message);
    }
}