Вход Регистрация
Файл: vendor/razorpay/razorpay/src/Utility.php
Строк: 89
<?php

namespace RazorpayApi;

class 
Utility
{
    const 
SHA256 'sha256';

    public function 
verifyPaymentSignature($attributes)
    {
        
$actualSignature $attributes['razorpay_signature'];

        
$paymentId $attributes['razorpay_payment_id'];

        if (isset(
$attributes['razorpay_order_id']) === true)
        {
            
$orderId $attributes['razorpay_order_id'];

            
$payload $orderId '|' $paymentId;
        }
        else if (isset(
$attributes['razorpay_subscription_id']) === true)
        {
            
$subscriptionId $attributes['razorpay_subscription_id'];

            
$payload $paymentId '|' $subscriptionId;
        }
        else if (isset(
$attributes['razorpay_payment_link_id']) === true)
        {
            
$paymentLinkId     $attributes['razorpay_payment_link_id'];

            
$paymentLinkRefId  $attributes['razorpay_payment_link_reference_id'];

            
$paymentLinkStatus $attributes['razorpay_payment_link_status'];

            
$payload $paymentLinkId '|'$paymentLinkRefId '|' $paymentLinkStatus '|' $paymentId;
        }
        else
        {
            throw new 
ErrorsSignatureVerificationError(
                
'Either razorpay_order_id or razorpay_subscription_id or razorpay_payment_link_id must be present.');
        }

        
$secret Api::getSecret();

        
self::verifySignature($payload$actualSignature$secret);
    }

    public function 
verifyWebhookSignature($payload$actualSignature$secret)
    {
        
self::verifySignature($payload$actualSignature$secret);
    }

    public function 
verifySignature($payload$actualSignature$secret)
    {
        
$expectedSignature hash_hmac(self::SHA256$payload$secret);

        
// Use lang's built-in hash_equals if exists to mitigate timing attacks
        
if (function_exists('hash_equals'))
        {
            
$verified hash_equals($expectedSignature$actualSignature);
        }
        else
        {
            
$verified $this->hashEquals($expectedSignature$actualSignature);
        }

        if (
$verified === false)
        {
            throw new 
ErrorsSignatureVerificationError(
                
'Invalid signature passed');
        }
    }

    private function 
hashEquals($expectedSignature$actualSignature)
    {
        if (
strlen($expectedSignature) === strlen($actualSignature))
        {
            
$res $expectedSignature $actualSignature;
            
$return 0;

            for (
$i strlen($res) - 1$i >= 0$i--)
            {
                
$return |= ord($res[$i]);
            }

            return (
$return === 0);
        }

        return 
false;
    }
}
Онлайн: 1
Реклама