我已经成功实现了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)
答案 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格式,并将重要数据存储到数据库中。