سلام وقت بخیر
یه موضوع دیگه این که اگر بخوایم از چند درگاه برای پرداخت استفاده کنیم چجوری میتونیم فراخوانی کنیم؟؟
return Payment::callbackUrl(url('/callback/from/bank/?price='.(intval($ttt)*10).'&order='.$post->id.'&wallet=0&port=MELLAT'))->purchase(
(new Invoice)->amount($amount),
function($driver, $transactionId) use ($amount) {
$post->transactionId = $transactionId;
$post->save();
}
)->pay();
https://roocket.ir/series/laravel-projects/episode/113
میتونید اموزش های راکت رو دنبال کنید. اما در کل باید بگم که میتونید یه پارامتری پاس بدید به کنترلر و اونجا از روی اون پارامتر متوجه بشید که کاربر میخواد با کدوم درگاه پرداخت رو انجام بده و با توجه به انتخاب کاربر درگاه رو تغییر بدید.
مهندس میدونم فقط یه نمونه کد بدید که بتونم درگاه های مختلف رو کال کنم چی باید به این کدم اضافه کنم همین رو بگید فقط
ایا اون مقدار متغییر $driver رو برابر با مقدار درایور مورد نظر بذاریم این کار انجام میشه یا کد دیگری باید به این کد اضافه بشه؟
سلام هر درگاهی که میخواین رو به این شکل بش پاس بدین
اقای خانزادی هم تایید کنن اوکیه
// Create new invoice.
$invoice = (new Invoice)->amount(1000);
if ($type == 'zarinpal'){
$port = new Zarinpal();
$callbackRoute = route('zarinpal_callback');
} else if ($type == 'sadad'){
$port = new Sadad();
$callbackRoute = route('sadad_callback');
}
// Purchase the given invoice.
Payment::via($port)->callbackUrl($callbackRoute)->purchase(
$invoice,
function($driver, $transactionId) {
// We can store $transactionId in database.
}
);
احتیاجی نیست شما دستی کلاس ها رو Instantiate کنی ..
این پکیج یک متد via هم داره که میتونی باهاش driver رو هم مشخص کنی
Payment::via('driverName')->purchase(
$invoice,
function($driver, $transactionId) {
// We can store $transactionId in database.
}
);
در مستندات گفته شما باید نام درایور رو پاس بدی
اما شما Instance کلاس رو پاس دادید.. شاید این متد instance رو هم بپذیره.. باید امتحان کنی
مراحل کار بسیار ساده است
در حین استفاده از متد pay یه شماره تراکنش به شما داده میشه که میتونید ذخیرش کنید. سپس به درگاه بانک ریدایرکت میشید.
پس از برگشت از درگاه با همون شماره تراکنشی که دریافت کردید میتونید متد verify رو اجرا کنید و صحت پرداخت رو چک کنید.
سلام وقت بخیر خسته نباشید من چندین محصول رو به درگاه پرداخت اضافه میکنم با پکیج شتابیت ولی خطای عدم تطابق مبلغ تراکنش با مبلغ پرداختی رو میده ۱ ماهه منو درگیر کرده لطفا کمکم کنید ممنون. تو دیتابیس هر چند تا محصول ک من میخوام اضافه میشه ولی وقتی dd میگرم آخرین مقدار رو میاره ک طبیعتا خطای عدم تطابق رو میده
این هم از کدای پرچیس
public function purchase()
{
try {
$total = 0;
$cartItems = Cart::where('user_id', Auth::id())->get();
$invoice = new Invoice();
foreach ($cartItems as $item) {
$invoice->amount($total+= $item->course->price);
$user = Auth::user();
$paymentId = md5(uniqid());
$transaction = $user->transactions()->create([
'course_id' => $item->course_id,
'paid' => $item->course->price,
'invoice_details' => $invoice,
'payment_id' => $paymentId
]);
$callbackUrl = route('purchase.result', ['payment_id' => $paymentId]);
$payment = \Shetabit\Payment\Facade\Payment::callbackUrl($callbackUrl);
$payment->purchase($invoice, function ($driver, $transactionId) use ($transaction) {
$transaction->transaction_id = $transactionId;
$transaction->save();
});
}
return $payment->pay()->render();
} catch (PurchaseFailedException|\Exception|\SoapFault $e) {
$transaction->transaction_result = [
'message' => $e->getMessage(),
'code' => $e->getCode(),
];
$transaction->save();
return view('purchase.result')->with([
'message' => $e->getMessage(),
'code' => $e->getCode(),
]);
}
}
چون دیدم که خیلی وقته این مسئله حل نشده و ممکن هست که افراد دیگه مثل من دنبال راه حلی بگردند که چطور می شه تنظیمات را بصورت پویا تغییر داد
ابتدا config را بصورت زیر وارد کلاس یا کنترلر کنید:
use Illuminate\Support\Facades\Config;
بعد هر قسمتی را که خواستید تغییر بدید، مثلا من می تونم merchantId زرین پال را بصورت زیر تغییر بدم
config::set('payment.drivers.zarinpal.merchantId', '0000-00000000-0000000');
در صورتیکه بخوام مقدار set شده را به دست بیارم :
$value = config('payment.drivers.zarinpal.merchantId');
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟