Closed ftf92 closed 1 year ago
این کدها برای درگاه پیپینگ هیچ مشکلی نداره و کار میکنه ولی برای پارسیان این مشکل به وجود اومد
واسه اون اند پونت باید csrf رو غیر فعال کنید چون با متد پست از درگاه برمیگرده.
تو این بخش VerifyCsrfToken.php غیرفعال کردم csrf رو ولی خطای 404 برمیگردونه و روت هم به شکل post هم به شکل any تعریف کردم فرقی نکرد ایا ارتباطی به هاست یا خود درگاه پارسیان داره ؟
On Sat, Jul 1, 2023 at 3:18 PM mahdikhanzadi @.***> wrote:
Closed #286 https://github.com/shetabit/payment/issues/286 as completed.
— Reply to this email directly, view it on GitHub https://github.com/shetabit/payment/issues/286#event-9695967465, or unsubscribe https://github.com/notifications/unsubscribe-auth/AOYJZYOCPASHNHYOJUK6NYLXOAFCLANCNFSM6AAAAAAZ2UHNOI . You are receiving this because you authored the thread.Message ID: @.***>
سلام متاسفانه من هنوز موفق نشدم خطای 404 رفع کنم کال بک به شکل post ارسال میکنم و میدلور VerifyCsrfToken برای اون روت کال بک غیرفعال کردم ولی وقتی پرداخت انجام میدم یا روی دکمه انصراف از خرید میزنم خطای 404 نمایش میده و توی url زیر میمونه https://adressite.ir/payment/callback
ادرسی که دادین رو لطفا با پست من کال کنید ببینید کار میکنه یا نه! و اینکه احتمالا من متوجه مشکل نشدم! به ادرس اشتباهی میره؟ لطفا کاملتر توضیح بدید! خیلی خلاصه نوشتید من دقیقا متوجه نشدم مشکل چیه! به کدوم ادرس باید بره ولی نمیره؟ چه حالتی باید رخ بده که نمیده؟
وقتی روی پرداخت میزنم پرداخت انجام میشه و موقع برگشت از درگاه به url که پایین فرستادم هدایت میشم و خطای 404 نمایش میده ( در اخر هم پول پرداختی برگشت داده میشه از درگاه ) یا موقع پرداخت روی دکمه انصراف میزنم به این url توی سایت میره https://playba.ir/payment/callback
روت های من به این شکل تعریف شده
Route::namespace('frontend')->group(function() {
Route::post('/payment' , [PaymentController::class ,'payment'])->name('cart.payment');
Route::post('/payment/callback' , [PaymentController::class ,'callback'])->name('payment.callback');
});
این بخش هم غیرفعال شده
protected $except = [
'/payment/callback'
];
وقتی پرداخت انجام میدم یا دکمه انصراف میزنم باید به صفحه profile کاربر هدایت بشه ولی توی این روت میمونه و خطای 404 نمایش میده https://playba.ir/payment/callback
controller
class PaymentController extends Controller
{
public function payment()
{
$cart = Cart::instance('cart-ftf');
$cartItems = $cart->all();
if($cartItems->count()) {
$price = $cartItems->sum(function($cart) {
return $cart['tour']->price * $cart['quantity'];
});
$orderItems = $cartItems->mapWithKeys(function($cart) {
return [$cart['tour']->id => [ 'quantity' => $cart['quantity']] ];
});
$order = auth()->user()->orders()->create([
'status' => 'unpaid',
'price' => $price
]);
$order->tours()->attach($orderItems);
// $invoice = (new Invoice)->amount($price);
$invoice = (new Invoice)->amount(1000);
return ShetabitPayment::callbackUrl(route('payment.callback'))->purchase($invoice, function($driver, $transactionId) use ($order, $cart,$invoice) {
$order->payments()->create([
'resnumber' => $invoice->getUuid(),
]);
$cart->flush();
})->pay()->render();
}
alert()->error('پرداخت انجام نشد مجددا سعی کنید');
return back();
}
public function callback(Request $request)
{
try {
$payment = Payment::where('resnumber', $request->clientrefid)->firstOrFail();
// $payment->order->price
$receipt = ShetabitPayment::amount(1000)->transactionId($request->clientrefid)->verify();
$payment->update([
'status' => 1
]);
$payment->order()->update([
'status' => 'paid'
]);
alert()->success('پرداخت شما موفق بود');
return redirect('/profile');
} catch (InvalidPaymentException $exception) {
/**
* when payment is not verified, it will throw an exception.
* We can catch the exception to handle invalid payments.
* getMessage method, returns a suitable message that can be used in user interface.
**/
alert()->error($exception->getMessage());
return redirect('/profile');
}
}
}
لطفا route('payment.callback')
رو توی صفحه echo کنید ببینید چی نشون میده!
همین url رو نمایش میده https://playba.ir/payment/callback
سلام مهندس من لاراول 10 هم نصب کردم مجدد پکیج shetabit رو لاراول 10 نصب کردم باز همین مشکل داشتم روی لاراول 9 هم نسخه 4 shetabit و هم نسخه اخر نصب کردم باز مشکلم رفع نشد ایا مشکلی توی کدهای controller وجود داره ؟چرا برای روت کال بک وقتی get میزارم میگه باید post باشه وقتی متد پست میزارم بعد از برگشت از بانک خطای 404 دارم و از سایت logout میشم ؟ من csrf رو غیرفعال کردم ولی باز توکن منقضی میشه برای اینکه logout نشه کاربر توی فایل session به شکل زیر تغییر دادم
'secure' => env('SESSION_SECURE_COOKIE' , true),
'samesite' = 'none',
دیگه کاربر از سایت لاگ اوت نمیشه ولی مشکل کال بک همچنان هست
یه مشکل دیگه هم که هست وقتی پرداخت موفق انجام میدم بانک اصلاحیه میزنه وپول برگشت داده میشه
سلام و عرض ادب من هم وقتی callback اجرا میشه بعد از برگشت اگه متد get باشه ارور The POST method is not supported for route verifyPayment. Supported methods: GET, HEAD. میده و اگرپست باشه و csrf غیر فعال باشه که logout میشه
سلام و عرض ادب من هم وقتی callback اجرا میشه بعد از برگشت اگه متد get باشه ارور The POST method is not supported for route verifyPayment. Supported methods: GET, HEAD. میده و اگرپست باشه و csrf غیر فعال باشه که logout میشه
مشکل وقتی میدل ور ها رو برداشتم از قسمت روت ها درست شد 😊
بطور کلی میتونید با اضافه کردن withoutMiddleware این مشکل رو حل کنید. نمونه کد : Route::post('/callback', [Controller::class, 'callback']) ->name('callback') ->withoutMiddleware([\App\Http\Middleware\VerifyCsrfToken::class]);
سلام وقت بخیر موقع کال بک از درگاه پارسیان خطای زیر نمایش داده میشه
Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException PHP 8.1.19 9.52.10 The POST method is not supported for route payment/callback. Supported methods: GET, HEAD.
روت ها به شکل زیر تعریف شده
Route::middleware('auth')->namespace('frontend')->group(function() { Route::post('/payment' , [PaymentController::class ,'payment'])->name('cart.payment'); Route::get('/payment/callback' , [PaymentController::class ,'callback'])->name('payment.callback'); });
وقتی روت کال بک به شکل any تعریف میشه یا به شکل post خطای Page Expired دارم ، csrf تعریف شده و راه حل هایی که گفته شد انجام دادم ولی نتیحه ای نگرفتم توی کنسول خطای 419 نمایش داده میشه