سلام وقت بخیر
یه موضوع دیگه این که اگر بخوایم از چند درگاه برای پرداخت استفاده کنیم چجوری میتونیم فراخوانی کنیم؟؟
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.
}
);مرسی مهندس
@coaradsupp
تست میکنم
احتیاجی نیست شما دستی کلاس ها رو Instantiate کنی ..
این پکیج یک متد via هم داره که میتونی باهاش driver رو هم مشخص کنی
Payment::via('driverName')->purchase(
$invoice,
function($driver, $transactionId) {
// We can store $transactionId in database.
}
);
در مستندات گفته شما باید نام درایور رو پاس بدی
اما شما Instance کلاس رو پاس دادید.. شاید این متد instance رو هم بپذیره.. باید امتحان کنی
@ali.bayat
مهندس موقع برگشت کد 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');