Advertisement
MChaos

Untitled

Apr 4th, 2025
397
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.46 KB | None | 0 0
  1.     public function ReversePayment($payment, $amount)
  2.     {
  3.  
  4.         $uuid = $payment['transaction_id'];
  5.         // Дата и время формирования запроса на проверку статуса
  6.         $dateTime = date('Y-m-d\TH:i:s');
  7.  
  8.         // Секретный ключ для подписи
  9.         $secretKey = $this->signature;
  10.  
  11.         // Формируем строку для подписи
  12.         $signature_string = $uuid . $dateTime . $this->merchant_id;
  13.  
  14.         // Генерируем подпись
  15.         $signature = $this->generate_signature($signature_string, $secretKey);
  16.  
  17.         // Формируем параметры GET-запроса
  18.         $params = [
  19.             'uuid' => $uuid,
  20.             'datetime' => $dateTime,
  21.             'merchantId' => $this->merchant_id
  22.         ];
  23.  
  24.         // Формируем URL для запроса
  25. //        $url = 'https://qr-test.bpay.md/api/Qr/GetQrStatus?' . http_build_query($params);
  26.         $url = 'https://qr-merchant.bpay.md/api/Qr/GetQrStatus?' . http_build_query($params);
  27.  
  28.         // Заголовки для запроса
  29.         $headers = [
  30.             'X-TraceReference: ' . $this->generate_trace_reference(),
  31.             'X-HMAC-Signature: ' . $signature
  32.         ];
  33.  
  34.         // Отправляем GET-запрос
  35.         $response = $this->send_get_request($url, $headers);
  36.  
  37.  
  38.         if ($response['isPaid'] && $response['paymentDetails']['state'] == 100) {
  39.             $receiptNr = $response['paymentDetails']['receipt'];
  40.             $postData = [
  41.                 "datetime" => $dateTime,
  42.                 "merchantId" => $this->merchant_id,
  43.                 "receiptNr" => $receiptNr,
  44.                 "amount" => $amount,
  45.                 "description" => 'Reverse Payment'
  46.             ];
  47.  
  48.             // Формирование строки для подписи
  49.             $signatureString = $dateTime . $this->merchant_id . $receiptNr . $amount . $postData['description'];
  50.  
  51.             // Генерация подписи HMAC SHA256
  52.             $hmacSignature = $this->generate_signature($signatureString, $secretKey);
  53.  
  54.             // Заголовки для запроса
  55.             $headers = [
  56.                 'X-TraceReference: ' . $this->generate_trace_reference(),
  57.                 'X-HMAC-Signature: ' . $hmacSignature,
  58.                 'Content-Type: application/json'
  59.             ];
  60.  
  61.             $url = 'https://qr-merchant.bpay.md/api/Qr/ReversePayment?' . http_build_query($postData);
  62.  
  63.  
  64.             $curl = curl_init();
  65.  
  66.             curl_setopt_array($curl, array(
  67.                 CURLOPT_URL => $url,
  68.                 CURLOPT_RETURNTRANSFER => true,
  69.                 CURLOPT_ENCODING => '',
  70.                 CURLOPT_MAXREDIRS => 10,
  71.                 CURLOPT_TIMEOUT => 0,
  72.                 CURLOPT_FOLLOWLOCATION => true,
  73.                 CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  74.                 CURLOPT_CUSTOMREQUEST => 'POST',
  75.                 CURLOPT_POSTFIELDS => array(),
  76.                 CURLOPT_HTTPHEADER => $headers,
  77.             ));
  78.  
  79.             $responseInfo = curl_exec($curl);
  80.  
  81.  
  82.             $trans_data_array = [
  83.                 'contact_id' => $payment['contact_id'],
  84.                 'create_datetime' => date("Y-m-d H:i:s"),
  85.                 'type' => 'reduce',
  86.                 'amount' => $amount,
  87.                 'method' => $payment['method'],
  88.                 'transaction_id' => $payment['transaction_id'],
  89.                 'comment' => 'MIA возврат средств',
  90.                 'status' => 'completed',
  91.                 'email_send' => $payment['email_send'],
  92.                 'trans_meterstop' => $payment['trans_meterstop'],
  93.                 'trans_duration' => $payment['trans_duration'],
  94.                 'trans_station' => $payment['trans_station'],
  95.                 'trans_connector' => $payment['trans_connector'],
  96.                 'trans_tarif' => $payment['trans_tarif'],
  97.                 'locale' => $payment['locale'],
  98.                 'currency' => $payment['currency'],
  99.                 'user_type' => $payment['user_type'],
  100.                 'info' => json_encode($responseInfo),
  101.             ];
  102.  
  103.             if (!$this->websocket->insert('payments', $trans_data_array)) {
  104.  
  105.                 $this->CI->db->insert('mia_logs', array('log'=>'error insert', 'pay_id'=>$payment['id']));
  106.                 return false;
  107.             }
  108.  
  109.             return 1;
  110.  
  111.  
  112.         }
  113.  
  114.  
  115.         return $response;
  116.  
  117.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement