В некоторых бронированиях возникают проблемы, когда клиент платит методом кошелька Payone (PayPal) - PullRequest
0 голосов
/ 06 сентября 2018

Я успешно внедрил платежный шлюз Payone (Creditcard, Sofort, Paydirect и Paypal). После успешной оплаты я получаю ответ (назначенный и оплаченный), и все в порядке. Но иногда я не получаю ответ от Payone после того, как клиент заплатил, используя Paypal (я проверил около 60 успешных транзакций. Но при этом 2 или 3 транзакции не получили ответа, и сумма клиента была вычтена из их счета).

После успешной транзакции Payone отправляет данные на этот маршрут

/* Response from payone */
    Route::post('/payment/response', 'PaymentController@response')->name('payment.response');

Я думаю, что запрос laravel не захватывает данные из URL. или же Что-то не так в использовании этого метода Schema::hasColumn.

Любая помощь будет оценена спасибо.

PaymentController.php

public function response(Request $request)
{
  // Here I created to store all request in to table but data is not storing.
  /* Testing purpose begin */

   $payment        = new Payment;

   foreach($_POST as $key => $value) {
     if(Schema::hasColumn($payment->getTable(), $key)){
        if(is_array($value)) {
           $payment->{$key} = $value[1];
        } else {
                $payment->{$key} = $value;
                }
      }
    }
    $payment->save();

  /* Testing purpose end */

  if ($_POST["key"] == hash("md5", env('KEY'))) {

      echo "TSOK"; // If key is valid, TSOK notification is for PAYONE

      $user  = Userlist::where('is_delete', 0)
                ->where('usrActive', '1')
                ->where('userid', $_POST["userid"])
                ->first();
      if($user && $_POST["clearingtype"] && $_POST["txaction"]) {
         $bookings            = Booking::select('_id', 'old_booking_id', 'status', 'payment_status')
                    ->where('user', new \MongoDB\BSON\ObjectID($user->_id))
                    ->whereIn('status', ['5', '8', '10', '11'])  //5=>Waiting for payment, 8=>Cart, 10=> Temporary (This status is using in edit booking section), 11=> On processing
                    ->where('is_delete', 0)
                    ->where('txid', $_POST["txid"])
                    ->where('userid', $_POST["userid"])
                    ->get();

         if($bookings) {
            if ($_POST["txaction"] == "appointed") {
               update booking status and sent email
            }
            else if ($_POST["txaction"] == "paid") {
               update paid status
            }
            else {
               update failed status
            }
         }    
      }
  }
}

Журнал Laravel

[2018-09-11 09:04:14] production.ERROR: Method [error] does not exist on [App\Http\Controllers\PaymentController]. {"userId":"5afa790212236cc4660ed509","exception":"[object] (BadMethodCallException(code: 0): Method [error] does not exist on [App\\Http\\Controllers\\PaymentController]. at /var/www/vhosts/cabin-holiday.frontend/vendor/laravel/framework/src/Illuminate/Routing/Controller.php:68)

Ответы [ 3 ]

0 голосов
/ 16 сентября 2018

Решением этой проблемы является изменение метода, который должен быть методом get. Потому что мы получаем ответ от PayPal в URL. Поэтому вам нужно установить метод GET.

/* Response from payone */
Route::get('/payment/response', 'PaymentController@response')->name('payment.response');
0 голосов
/ 19 сентября 2018

Наконец-то нашел проблему. Причиной этой проблемы иногда являются данные ответов, такие как адрес, город и т. Д., Не в правильном формате (пользователи из Германии). Поэтому я строго преобразовал данные ответов в формат UTF-8 и сохранил важные данные в базе данных.

0 голосов
/ 12 сентября 2018

Метод [error] не существует в [App \ Http \ Controllers \ PaymentController].

Запишите метод ошибки на PaymentController. Попробуйте найти документацию по методу ошибки, указанному где-то в документации к вашему платежному шлюзу. И читайте когда это называется и почему. Так что вы получите представление о том, что обрабатывать в методе ошибок в PaymentController. Возможно, вам придется объявить маршрут или, возможно, он уже есть в ваших маршрутах, поскольку он не жалуется на маршрут, а на метод. Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...