Closed aliqasemzadeh closed 5 years ago
آخرین قسمت (قسمت مربوط به این خطا) در laravel.log رو بفرستید لطفا
متاسفانه خالی است.
Request doesn't have required state parameter (or it doesn't match session's state).
این رو برای این دریافت میکنید که token ی که برای امنیت ایجاد شده بوده و قرار بوده توسط بانک به برنامه داده بشه یا اشتباه هست و یا این که قبلا توسط بانک در دخواست دیگه ای ارسال شده
در حالت پیش فرض
قابلیت چند بار ارسال درخواست تایید تراکنش یا همون فراخوانی
callback
رو ندارید اما در حالت
stateless
میتونید چند بار درخواست تایید رو بفرستید که در اونجا خطای
RetryException
میگیرید اما در حالت پیشفرض در دفعات بعد خطای
InvalidStateException
میگیرید به خاطر این که در دفعه ی اول
state
که داخل
session
قرار داره به دلیل امنیتی پاک میشه
array_merge(): Argument #1 is not an array
را چی کار کنم.
هیچ کدام از درگاه ها بجز SabaPay درست کار نمی کنه.
چند جا از این کد استفاده شده باید دقیقا مشخص بشه کدوم رو دارید بهش اشاره میکنید
حالت
stateless
هم مشکل دارید؟
کی مشکل پیش میاد در کدوم قسمت از فراخوانی در زمان
authorize, redirect, settle?
چرا log خالی هست؟
public function start(Request $request)
{
try
{
$gateway = Gateway::of('mellat');
$gateway->callbackUrl(route('payment.callback',['id' => Auth::user()->id]));
$transaction = new RequestTransaction(new Amount($request->credit,'IRR'));
$authorizedTransaction = $gateway->authorize($transaction);
return $gateway->redirect($authorizedTransaction);
} catch (\Exception $e) {
$data = $e->getMessage();
$state = "danger";
}
$user = User::findOrFail(Auth::user()->id);
$transactions = Transaction::where('user_id', Auth::user()->id)->paginate(25);
return view('payment.fund', ['user' => $user, 'transactions' => $transactions, 'data' => $data ,'state' => $state]);
}
public function callBack($id,Request $request)
{
try
{
$settledTransaction = Gateway::settle();
$trackingCode = $settledTransaction->getTrackingCode();
$refId = $settledTransaction->getReferenceId();
$cardNumber = $settledTransaction->getCardNumber();
$transaction = new Transaction;
$transaction->user_id = $id;
$transaction->credit = $settledTransaction->getAmount();
$transaction->system = "پرداخت آنلاین بانک ملت";
$transaction->description = "شارژ آنلاین بانک ملت با کد پیگیری : " . $trackingCode;
$transaction->user_id = Auth::user()->id;
$transaction->save();
$state = "success";
$data = "تراکنش با موفقیت انجام شد، کد پیگیری:".$trackingCode;
} catch (RetryException $e) {
$state = "danger";
$data = $e->getMessage();
} catch (\Exception $e) {
$state = "danger";
$data = $e->getMessage();
}
$user = User::findOrFail(Auth::user()->id);
$transactions = Transaction::where('user_id', Auth::user()->id)->paginate(25);
return view('payment.fund', ['user' => $user, 'transactions' => $transactions, 'data' => $data ,'state' => $state]);
}
این کل کد های من هست در زمان بازگشت از بانک ملت
درزمان بازگشت از بانک سامان TME Error می دهد
کلا با همه دشمنی داره.
اون درگاهی که خودتون اضافه کردید چطور؟ مبنا2
بقیه ی درگاه ها ممکنه کدهاش به خاطر قدیمی شدن کار نکنه
لطفا حالت تون رو به حالت
stateless
تغییر بدید به این شکل
$gateway = Gateway::of('mellat');
$gateway->stateless();
...
$settledTransaction = Gateway::settle(true);
...
حداقل یه لایه پیچیدگی کمتر میشه
باز هم خطای array_merge(): Argument #1 is not an array
نه مبنا کار نمی کنه اون که باید راحت هم وصل بشه وصل نمیشه.
سلام حالا یک خطای جدید می دهد Object of class Parsisolution\Gateway\Transactions\Amount could not be converted to string
$settledTransaction->getAmount(); باید یک جوری باشه که عدد باشه اگر واقعا می خواهیم از ریال و تومن استفاده کنیم و اعشار نداریم بهتره در تعریف decimal(18,0) بزاریم
در واحد های دیگه داریم مثل دلار فقط قرار نیست ریال و تومان استفاده بشه
آره درست پس این $settledTransaction->getAmount(); باید عدد برگردونه نه رشته الان من باهاش مشکل دارم.
چرا میخواهید amount رو چاپ کنید؟ Object of class Parsisolution\Gateway\Transactions\Amount could not be converted to string
اگه لازمه toString اضافه کنم؟
نه بر عکس مشکل دارم
$transaction->credit = $settledTransaction->getAmount();
مشکل دارد نمیشه تبدیل بشه و خودش ذخیره بشه
آخه
Amount
شامل واحد پول هم میشه فقط که مقدارش نیست واحد هم مهمه
برای دریافت عدد باید از
$settledTransaction->getAmount()->getTotal()
استفاده بشه
public function start(Request $request)
{
try
{
$gateway = Gateway::of('mellat');
$gateway->stateless();
$gateway->callbackUrl(route('payment.callback',['id' => Auth::user()->id]));
$transaction = new RequestTransaction(new Amount($request->credit,'IRR'));
$transaction->setExtraField('description', 'شارژ');
$authorizedTransaction = $gateway->authorize($transaction);
return $gateway->redirect($authorizedTransaction);
} catch (\Exception $e) {
$data = $e->getMessage();
$state = "danger";
}
$user = User::findOrFail(Auth::user()->id);
$transactions = Transaction::where('user_id', Auth::user()->id)->paginate(25);
return view('payment.fund', ['user' => $user, 'transactions' => $transactions, 'data' => $data ,'state' => $state]);
}
public function callBack($id,Request $request)
{
try
{
$settledTransaction = Gateway::settle(true);
$trackingCode = $settledTransaction->getTrackingCode();
$refId = $settledTransaction->getReferenceId();
$cardNumber = $settledTransaction->getCardNumber();
$transaction = new Transaction;
$transaction->user_id = $id;
$transaction->credit = $settledTransaction->getAmount()->getTotal();
$transaction->system = "پرداخت آنلاین بانک ملت";
$transaction->description = "شارژ آنلاین بانک ملت با کد پیگیری : " . $trackingCode;
$transaction->user_id = Auth::user()->id;
$transaction->save();
$state = "success";
$data = "تراکنش با موفقیت انجام شد، کد پیگیری:".$trackingCode;
} catch (RetryException $e) {
$state = "danger";
$data = $e->getMessage();
} catch (\Exception $e) {
$state = "danger";
$data = $e->getMessage();
}
$user = User::findOrFail(Auth::user()->id);
$transactions = Transaction::where('user_id', Auth::user()->id)->paginate(25);
return view('payment.fund', ['user' => $user, 'transactions' => $transactions, 'data' => $data ,'state' => $state]);
}
الان درست شد ولی خب باید حالت امنیتی را درست کنیم
من حدث می زنم سامان به اسم دامنه حساس هست.
مشکلی که این رو براش باز کردید
array_merge(): Argument #1 is not an array
فکر میکنم با این خط درست میشه
$transaction->setExtraField('description', 'شارژ');
الان داشتم بررسی میکردم که اگه به خاطر این هست حل کنم
@hamed-ehtesham بله دقیقا ولی خوب نیست چون من توضیحات نداشتم.
بله الان درستش میکنم
@hamed-ehtesham
maminbajand کیه؟
دوست و شریک بنده هستن برای چی؟
سلام الان این خطا را برای بانک ملت دریافت می کنم. مشکل چیه؟