7

我已经成功实施了 Payone 支付网关(Creditcard、Sofort、Paydirect 和 Paypal)。成功付款后,我收到了 txaction 响应(指定并付款),一切都很好。但有时在客户使用付款后我没有收到 Payone 的回复Paypal(我检查了大约 60 笔成功的交易。但其中 2 或 3 笔交易没有得到回复,并且客户的金额已从他们的帐户中扣除)。

成功交易后,payone 将数据发布到此路线

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

我认为 laravel 请求没有从 url 捕获数据。或使用此方法有问题Schema::hasColumn

任何帮助将不胜感激。

支付控制器.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)

4

3 回答 3

1

[App\Http\Controllers\PaymentController] 上不存在方法 [错误]。

在 PaymentController 上编写错误方法。尝试查找支付网关文档中某处提到的错误方法的文档。并阅读它何时被调用以及为什么。这样您就会了解在 PaymentController 中的错误方法中要处理什么。您可能必须声明路线,或者它可能已经在您的路线中,因为它不是在抱怨路线而是在抱怨方法。希望这对您有所帮助。

于 2018-09-12T15:48:04.350 回答
0

终于找到问题了。此问题的原因有时是地址、城市等响应数据的格式不正确(用户来自德国)。所以我将响应数据严格转换为 UTF-8 格式,并将重要数据存储到数据库中。

于 2018-09-19T07:19:46.020 回答
0

这个问题的解决方案是改变它应该是get方法的方法。因为我们在 url 中收到来自 paypal 的响应。所以你需要设置GET方法。

/* Response from payone */
Route::get('/payment/response', 'PaymentController@response')->name('payment.response');
于 2018-09-16T06:58:35.690 回答