<?php

namespace App\Utils\API;

use GuzzleHttp\Client;
use support\Log;

/**
 * 第三方api转账
 */
class PaymentNew
{
    public static function generate_encrypt_value($data, $secret_key)
    {
         // 1. 过滤掉 EncryptValue 和值为 null 的参数
        $filtered_data = array_filter($data, function($value, $key) {
            return $key !== 'EncryptValue' && $value !== null;
        }, ARRAY_FILTER_USE_BOTH);

        // 2. 按照 A~Z 顺序排序 key
        ksort($filtered_data);

        // 3. 拼接 key=value 形式的字符串,并加上 HashKey=密钥
        $param_str = '';
        foreach ($filtered_data as $key => $value) {
            // 确保键名和值没有多余的空格
            $key = trim($key);
            // 处理布尔值
            if (is_bool($value)) {
                $value = $value ? 'true' : 'false';
            } else {
                $value = trim($value);
            }
            $param_str .= "$key=$value&";
        }
        // 移除最后一个多余的 &
        $param_str = rtrim($param_str, '&');
        // 添加 HashKey
        $param_str .= "&HashKey=" . trim($secret_key);

        // 输出拼接后的字符串以供调试(可选)
        echo "Lowercase string: $param_str\n";

        // 4. 转换为小写
        $param_str = strtolower($param_str);

        // 5. 计算 sha256 哈希
        $hash_value = hash('sha256', $param_str);

        // 6. 转换为大写返回
        return strtoupper($hash_value);
    }

    /**
     * 转账
     */
    public static function pushMoney($money, $payeeAccountName, $payeeAccountNumber, $payeeBankName,$orderId)
    {
        $secret_key = "sZ2wAfh1lMkxBVrlY4uZY8Fj92E4scFf";
        $url = "https://mdf.hr5688.com/api/createPaymentOrder";
        $PaymentChannelId = 0;
        if($payeeBankName == "bKash"){
            $PaymentChannelId = 34;
        }else{
            $PaymentChannelId = 35;
        }

        // Guzzle HTTP client
        $client = new Client();
        var_dump(11111111111);
        var_dump($orderId);
        // 请求数据
        $payload = [
            "Amount" => $money,
            "CurrencyId" => 11,
            "IsTest" => false,
            "PayeeAccountName" => $payeeAccountName,
            "PayeeAccountNumber" => $payeeAccountNumber,
            "PayeeBankName" => $payeeBankName,
            "PayeeIFSCCode" => "",
            "PaymentChannelId" => $PaymentChannelId,
            "ShopInformUrl" => "http://149.129.107.38",
            "ShopOrderId" => $orderId."",
            "ShopUserLongId" => "776ae472-d4fc-435c-9639-be5763138d95"
        ];
        var_dump($payload);
        // 生成加密值
        $encrypt_value = self::generate_encrypt_value($payload, $secret_key);
        var_dump($encrypt_value);
        $payload["EncryptValue"] = $encrypt_value;
        var_dump($encrypt_value);
        try {
            // 发送 POST 请求
            $response = $client->post($url, [
                'json' => $payload,
                'headers' => [
                    'Accept' => 'application/json',
                    'Content-Type' => 'application/json',
                ]
            ]);
            var_dump($response);
            // 获取响应内容
            $responseBody = $response->getBody()->getContents();
            $httpCode = $response->getStatusCode();

            if ($httpCode == 200) {
                echo $responseBody;
            } else {
                echo "Error: HTTP Code $httpCode\n";
                echo $responseBody;
            }

            return $responseBody;
        } catch (\GuzzleHttp\Exception\RequestException $e) {
            echo "Request failed: " . $e->getMessage();
        }
    }
}