Fiat Currency Payout

# Request URL

POST https://test2-openapi.91fafafa.com/api/payout/brazil/order/create/v1

# Request parameters

Note: Do not fill in Chinese characters in all parameters! ! !

Parameters Type Required Description Example
appId string Y Merchant appId B2iwKFIM4tvo
merchantId string Y Merchant id CH10001165
mchOrderNo string Y Merchant order number(Length is limited to 32 digits) 20240506180450
paymentMethod string Y Payment method
PIX
PIX
amount string Y Amount 900
name string Y User name CheezeePayTest
notifyUrl string Y Notification callback address https://host:port/notifyUrl
payeeAccountInfos string Y Payment information json string {"pixType":"CPF",
"pixAccount":"32562523890",
"taxNumber":"Banco inter"}
timestamp long Y Submit time (timestamp: milliseconds) 1714989890250
sign string Y Sign MJK+SZR1YOPaJar67nYtAHJXGBKugk+WK2qH
tIuif0Aqplk+2xrZk0q4RkPfRgViD2AFAGRyZTc
Wr49OL3v5GJJojkppo3HGAZQ+CuA10BdEaVd
85GoOJXZzE+pJbxgI5YJA9tzYV1a88vomrbTo
bs8829of4Wsop7srXMXCb1FQqRYf8VwLCFW
umkpPs3Ra5O2IswjEeiwulLA8GPy7PKRS7c7o
5/3aplr20SYIbaqQpqwBlyrjkEuMq1sxc9tuOexD
UZK+oRRkq0+1Kk1iHucFEkBkComk1Wowil5NN
fW48OyZmM0B4kLUpEv7YZFSBIv6EkMLC86j
93D2aefcWg==

# payeeAccountInfosParameter Description

Parameters Type Required Description Example
pixType string Y PIX type
CPF(11 digits)
CNPJ(14 digits)
PHONE(Starting with +55, the number is 10-11 digits)
EMAIL(Email format)
EVP(Virtual payment address, 32-bit length - numbers or letters)
CPF
pixAccount string Y PIX account
Based on pixType, just pass the corresponding account number
pixType is CPF, then pixAccount passes CPF
pixType is PHONE, then pixAccount passes PHONE
and so on...
32562523890
taxNumber string Y Tax ID number
CPF/CNPJ Tax ID number
Banco inter

# Request Message Example

{
  "appId": "B2iwKFIM4tvo",
  "merchantId": "CH10001165",
  "mchOrderNo": "20240506180450",
  "paymentMethod": "PIX",
  "amount": "900",
  "name": "CheezeePayTest",
  "notifyUrl": "https://yourdomain/notifyUrl",
  "payeeAccountInfos": "{\"pixType\":\"CPF\",\"pixAccount\":\"32562523890\",\"taxNumber\":\"Banco inter\"}",
  "timestamp": 1714989890250,
  "sign": "MJK+SZR1YOPaJar67nYtAHJXGBKugk+WK2qHtIuif0Aqplk+2xrZk0q4RkPfRgViD2AFAGRyZTcWr49OL3v5GJJojkppo3HGAZQ+CuA10BdEaVd85GoOJXZzE+pJbxgI5YJA9tzYV1a88vomrbTobs8829of4Wsop7srXMXCb1FQqRYf8VwLCFWumkpPs3Ra5O2IswjEeiwulLA8GPy7PKRS7c7o5/3aplr20SYIbaqQpqwBlyrjkEuMq1sxc9tuOexDUZK+oRRkq0+1Kk1iHucFEkBkComk1Wowil5NNfW48OyZmM0B4kLUpEv7YZFSBIv6EkMLC86j93D2aefcWg=="
}

# Response parameters

Parameter Type Required Description Example
code String Y Response Code
000000 indicates success, others indicate failure.
000000
msg String Y Response Description
success: Successful
success
tradeNo String Y Platform Order Number 1746108644859187200
sign String Y Signature HcMyGbT+yHStKP/axYRPmWtYku2TPr1zyxA2Uv+i
Vt+5LPgIARTJuZ/DbndC9wUEaFZT0cm7OV8yfHFi
pniN2dSwnTc3TI93tnrtXGkZ9I6WYhNpZh6H2dwp
aaKSzUul/8BB4Q441ZS9Nk9Kz8oIg8ztOvWzzoML
dOqnDOlG8Hb6iIudDZWi4t5Ut5SzUIX+LcEGe7lI
N3i1WFflgRw2Zm1CfZ+N7Xw5/Ox/JxGjaBqW1CZI
naN66uGWd3qlKxPen5GkTY2zRqm0PbzoaXuouOKO
yAvrkOcgp07sxfVWukZ9H7Gcs9iyK8vtz4ICIXGl
zUVNwjalC8rPEXr8J3U7FQ==

# Payout Response Message Example

  • Successful Order Submission Response Message Example
{
  "code": "000000",
  "msg": "success",
  "tradeNo": "1746108644859187200",
  "sign": "HcMyGbT+yHStKP/axYRPmWtYku2TPr1zyxA2Uv+iVt+5LPgIARTJuZ/DbndC9wUEaFZT0cm7OV8yfHFipniN2dSwnTc3TI93tnrtXGkZ9I6WYhNpZh6H2dwpaaKSzUul/8BB4Q441ZS9Nk9Kz8oIg8ztOvWzzoMLdOqnDOlG8Hb6iIudDZWi4t5Ut5SzUIX+LcEGe7lIN3i1WFflgRw2Zm1CfZ+N7Xw5/Ox/JxGjaBqW1CZInaN66uGWd3qlKxPen5GkTY2zRqm0PbzoaXuouOKOyAvrkOcgp07sxfVWukZ9H7Gcs9iyK8vtz4ICIXGlzUVNwjalC8rPEXr8J3U7FQ=="
}
  • Failed Order Submission Response Message Example
{
  "code": "A0497",
  "msg": "Unable to trade, contact customer service  (A0497)",
  "sign": "QujGMEBgK5g+ne8drbKu74rpYC99gU/8noDZ/1o/7gTFpx5xNmppclbpw6aGy97nLxDSsJq1m0ZHYz4TU24XgtnTLZwdgf8ievl1Tmj61dts2rR2hcsYFc63lub+V2p3AhJ6H2dmfaqY9deWZeSl6DD5zb2xYcp8QitVqAze/j0g7EDAPHG/ShC+r8FyqFYy0KQddP/s+kzusKrFyCTilRNQXSLUT5Ompy82IkpghDLPLRxEJbCRmnUZ/sD8KENsdmqhcJrmAq+WbCz5tWnxbvAsFTMI/dgnm91ZhelfoKceErJaePxzZrsHvgkmPehAgyb/CKb1345r1ckG7gnPKg=="
}

# Code Implementation Demo

  • The code example is for reference only, please refer to the request parameter description for specific parameter explanations.
package com.cheesepay;

import com.google.gson.Gson;
import com.cheesepay.CheeseTradeRSAUtil;
import okhttp3.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;

public class PayoutDemo {
    // 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==";
    // Payment interface URL
    private static final String apiUrl = "https://test2-openapi.91fafafa.com/api/payout/brazil/order/create/v1";
    // Callback URL
    private static final String cashNotify = "https://yourdomain/notifyUrl";

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

    private static String getCurrentTime(){
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
        return now.format(formatter);
    }

    private static void payout() throws Exception {
        Map<String, Object> requestParams = new HashMap<>();
        requestParams.put("appId", "B2iwKFIM4tvo");
        requestParams.put("merchantId", "CH10001165");
        // Order number cannot be duplicated
        String currentTime = getCurrentTime();
        requestParams.put("mchOrderNo", currentTime);
        requestParams.put("paymentMethod", "PIX");
        requestParams.put("amount", "900");
        requestParams.put("name", "CheezeePayTest");
        requestParams.put("notifyUrl", cashNotify);
        requestParams.put("payeeAccountInfos", "{\"pixType\":\"CPF\",\"pixAccount\":\"32562523890\",\"taxNumber\":\"Banco inter\"}");
        Long timestamp = System.currentTimeMillis();
        requestParams.put("timestamp", timestamp);

        // Private key encryption
        String platSign = CheeseTradeRSAUtil.getSign(requestParams, MCH_PRIVATE_KEY);
        requestParams.put("sign", platSign);
        System.out.println("requestParams Msg:" + requestParams);

        // 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(apiUrl)
                .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()) {
            // Failure handling...
            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.verifySign(map, PLAT_PUBLIC_KEY);
        if (verifyResult) {
            // ... If signature verification is successful, process normal business logic.
        } else {
            // ... Signature verification error
        }
        response.close();
    }
}

<?php
   // Platform public key, obtained from key configuration
    $platPublicKey = '-----BEGIN RSA PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1dad35S74jfLPbHJh8P0jDHiTvkxwrtITK97ovVu19B24UdiHyHoEZgtNlS6alFQj1ULQ71d6EPh2rWCNkS2b5HGQXwDYBtwvesVQ8h4Sf3eVPTTLGw3BS7Os4vtDEN6BezMdv3sUG2N5i6JF+5H4CQTq3MD2Cx6u/Cv7oFOdFqeDT0AH+TR7uyZxn69OtkJaHHr834EUcdShJKKMQtbC11WCcut7ilDUgdvZnThiVTq7cfl8mcC9FDKcQ9bMWamScWIB5cJQdUW23Kr0c1NvZlpgPS8U5VODM4Uc4muHJPD2cJmquuJ+4AGP36rEk27lUB3h7B6JI1QGiuh1yyPDwIDAQAB
-----END RSA PUBLIC KEY-----';
    // Merchant private key, generated by the merchant himself
    $mchPrivateKey = '-----BEGIN RSA 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 RSA PRIVATE KEY-----';

    // parameter
    $appId = 'B2iwKFIM4tvo';
    $merchantId = 'CH10001165';
    // The order number cannot be repeated
    $mchOrderNo = 'T'.date("YmdHis",time());
    $paymentMethod = 'PIX';
    $amount = '900';
    $name = 'CheezeePayTest';
    $notifyUrl = 'https://yourdomain/notifyUrl';
    $payeeAccountInfos = '{"pixType":"CPF","pixAccount":"32562523890","taxNumber":"Banco inter"}';
    $timestamp = floor(microtime(true) * 1000);
   
    $params = array(
        'appId' => $appId,
        'merchantId' => $merchantId,
        'mchOrderNo' => $mchOrderNo,
        'paymentMethod' => $paymentMethod,
        'amount' => $amount,
        'name' => $name,
        'notifyUrl' => $notifyUrl,
        'payeeAccountInfos' => $payeeAccountInfos,
        'timestamp' => $timestamp
    );

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

     // Generate signature
    $sign = genSign($str, $mchPrivateKey);
    echo $sign;
    $params['sign'] = $sign;

    $params_string = json_encode($params);
    $url = 'https://test2-openapi.91fafafa.com/api/payout/brazil/order/create/v1';
    $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);
        echo "code :". $result['code'] . "\n";
        echo "msg :". $result['msg'] . "\n";
        echo "tradeNo :". $result['tradeNo'] . "\n";
        echo "sign :". $result['sign'] . "\n";
       
        $sign = $result['sign'];
        unset($result['sign']);
        $string = ConnectStrings($result);
        //Visa Signature
        $decryptStr = verifySign($string, $sign, $platPublicKey);
        echo "decryptStr :". $sign, $platPublicKey . "\n";
    }
    else {
        echo $httpCode;
    }

//Concatenating strings
 function ConnectStrings($params)
{
    // Get all the keys of the map and sort them
    $keys = array_keys($params);
    sort($keys);

    // Traverse the key list, get the corresponding value, and concatenate it into a string
    $str = '';

    foreach ($keys as $key) {
        $str .=  $key . '=' . $params[$key] . '&';
    }
    $str = rtrim($str, '&');
    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  { getSign, verifySign }= 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 =
    {
        appId:'B2iwKFIM4tvo',
        merchantId : 'CH10001165',
        mchOrderNo : parseInt(Math.random()*99999999999),
        paymentMethod : 'PIX',
        amount : '800',
        name : 'CheezeePayTest',
        payeeAccountInfos : '{\"pixType\":\"CPF\",\"pixAccount\":\"32562523890\",\"taxNumber\":\"Banco inter\"}',
        language : 'en',
        notifyUrl : 'https://yourdomain/notifyUrl',
        timestamp : Date.now()
    };

//------------- MAIN -------
// Request payout order interface URL
const url = 'https://test2-openapi.91fafafa.com/api/payout/brazil/order/create/v1';

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

//POST Request
async function sendRequestAndVerify(apiUrl, requestBody) {
    try {
        // send POST Request
        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',
            },
        });

        // Check if the request was successful
        if (response.status !== 200) {
            console.error(`Request failed: ${response.status} - ${response.statusText}`);
            return;
        }

        // Get the response body
        const responseBody = response.data;
        console.log('Response:', responseBody);

        // Signature verification
        const verifyResult = verifySign(responseBody,platPublicKey);
        if (verifyResult) {
            console.log('Successful signature verification');
            // Signature verification passed, processing normal business logic
        } else {
            console.error('Signature verification error');
        }
    } catch (error) {
        console.error('Request failed:', error.message);
    }
}