Переменные, поставляемые Payfast, не соответствуют спецификации, использующей laravel - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь интегрировать Payfast как платежный шлюз, и по какой-то причине он не работает.Все было хорошо, но сейчас в производстве все не работает.

Я начинаю с того, что получаю желаемую сумму, которую хотел бы заплатить:

<form class="reservation-form" method="post" action="{{route('photography.store')}}">
    @csrf
        <div class="form-group">
            <input id="datetimepicker1" placeholder="Date and Time" type="text" name="date_and_time" class="form-control">          
        </div>
        <div class="form-group">
            <input placeholder="Enter Amount" type="number" name="deposit_amount" min="250" class="form-control">
        </div>
        <div class="form-group">
            <textarea placeholder="Leave a message" class="form-control" name="message"></textarea>  
        </div>
        <div class="form-group">
            <button class="btn1 btn1-primary" type="submit">Book</button>
        </div>
</form>

После отправки формы яменя перенаправляют на эту страницу:

https://myurl.co.za/payfast

, которая показывает мне кнопку «Оплатить здесь».

Затем после нажатия на эту кнопку я перенаправляюсь на страницу Payfast и вижу следующую ошибку:

Error   The supplied variables are not according to specification:

signature : Generated signature does not match submitted signature

На изображении ниже следует отметить, что сумма, которую я набираю в форме, была пройдена.

enter image description here

Ниже приведены мои маршруты:

Route::get('payfast', 'PaymentsController@confirmPayment')->name('payfast.confirm');

Route::get('Success', 'PaymentsController@success')->name('payfast.success')->middleware('listing.details');

Route::get('Cancel', 'PaymentsController@cancel')->name('payfast.cancel')->middleware('listing.details');

Все записи, касающиеся бронирования, должны храниться в таблице, называемой бронированиями.

И ниже приведены все необходимые методы:

public function cancel(){
    $payment_success = session('payment_success');
    Booking::whereId($payment_success)->delete();
    session()->flush();

    return "Your payment failed";
}

public function success(){

    $payment_success = session('payment_success');

    Booking::whereId($payment_success)->update(['status'=> 1]);

    $booking = Booking::whereId($payment_success)->where(['status'=> 1])->first();

    $personal = session('personal');
    $property = session('property');

}

public function confirmPayment(PaymentProcessor $payfast)
{
    $nada = session('nada');
    $order = Booking::create([
        'deposit_amount' => $nada['deposit_amount'],   
        'date_and_time' => $nada['date_and_time'],
        'message' => $nada['message'],
        'status' => 0
    ]);

    $payment_success = $order->id;

    Session::put('payment_success', $payment_success);

    $payfast->setBuyer('first name', 'last name', 'email');
    $payfast->setAmount($order->deposit_amount);
    $payfast->setItem('Photography Booking', 'item-description');
    $payfast->setMerchantReference($order->id);

    return $payfast->paymentForm('Pay Here');
}

В случае необходимости, у меня есть файл payfast.php внутри папки конфигурации в соответствии с инструкциями по документации, в которых я размещаю данные продавца и сайта:

return
[
    'testing' => false, 
    'merchant' => [
        'merchant_id' => '13192354', 
        'merchant_key' => 'vg0qcw17c5sxd',
        'return_url' => 'https://mydomain.co.za/Success',
        'cancel_url' => 'https://mydomain.co.za/Cancel',
        'notify_url' => 'https://mydomain.co.za/itn',
    ],

    'hosts' => [
        'www.payfast.co.za',
        'sandbox.payfast.co.za',
        'w1w.payfast.co.za',
        'w2w.payfast.co.za',
    ]

];

Это единственный пакет, который я нашел.

...