当客户使用Payone钱包方式(贝宝)付款时,某些预订存在问题

时间:2018-09-06 07:48:51

标签: php laravel paypal payone

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

交易成功后,收款人将数据发布到该路线

/* 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 :(得分:1)

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

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

答案 1 :(得分:0)

此问题的解决方案是更改应为get方法的方法。因为我们正在从URL中的贝宝获得响应。因此,您需要设置GET方法。

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

答案 2 :(得分:0)

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