· 6 months ago · Apr 04, 2025, 01:35 PM
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 }