Untitled
unknown
plain_text
2 years ago
2.1 kB
10
Indexable
<?php
namespace App\Services\Payments\Webhooks;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
use App\Models\Invoice;
class RaiffaisenWebhook
{
public function dispatch(Request $request)
{
// Extract all data from the POST request
$MerchantID = $request['MerchantID'];
$TerminalID = $request['TerminalID'];
$OrderID = $request['OrderID'];
$Delay = $request['Delay'];
$PurchaseTime = $request['PurchaseTime'];
$TotalAmount = $request['TotalAmount'];
$AltTotalAmount = $request["AltTotalAmount"];
$CurrencyID = $request['Currency'];
$AltCurrencyID = $request['AltCurrency'];
$XID = $request['XID'];
$SD = $request['SD'];
$TranCode = $request['TranCode'];
$ApprovalCode = $request['ApprovalCode'];
$signature = $request["Signature"];
// Reconstruct the data string as per UPC's format
$dataString = "$MerchantID;$TerminalID;$PurchaseTime;$OrderID;$CurrencyID;$TotalAmount;$SD;";
$dataString = $MerchantID . ";" . $TerminalID . ";" . $PurchaseTime . ";" . $OrderID . ";" . $XID . ";" . $CurrencyID . ";" . $TotalAmount . ";" . $SD . ";" . $TranCode . ";" . $ApprovalCode . ";";
if ($this->verifySignature($dataString, $signature)) {
$this->updatePaymentStatus($OrderID);
} else {
Log::error('UPC Webhook: Signature Verification Failed');
}
}
protected function verifySignature($data, $signature)
{
$decodedSignature = base64_decode($signature);
Log::info($data);
$publicKey = openssl_pkey_get_public(file_get_contents(Storage::path('1758006.pub')));
return openssl_verify($data, $decodedSignature, $publicKey, OPENSSL_ALGO_SHA256) == 1;
}
protected function updatePaymentStatus($data)
{
$invoice = Invoice::where('gateway_data->order_id', $data)->first();
if ($invoice) {
$invoice->assignStatus('PAID');
}
}
}
Editor is loading...
Leave a Comment