راکت

اتصال به چندین درگاه در Shetabit

11 پاسخ

سلام وقت بخیر
یه موضوع دیگه این که اگر بخوایم از چند درگاه برای پرداخت استفاده کنیم چجوری میتونیم فراخوانی کنیم؟؟


                                        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();

@khanzadimahdi

ثبت پرسش جدید

پاسخ‌ها

11
mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

https://roocket.ir/series/laravel-projects/episode/113

میتونید اموزش های راکت رو دنبال کنید. اما در کل باید بگم که میتونید یه پارامتری پاس بدید به کنترلر و اونجا از روی اون پارامتر متوجه بشید که کاربر میخواد با کدوم درگاه پرداخت رو انجام بده و با توجه به انتخاب کاربر درگاه رو تغییر بدید.

Mohammad Mirzavand
Mohammad Mirzavand
@m.mirzavand1992

مهندس میدونم فقط یه نمونه کد بدید که بتونم درگاه های مختلف رو کال کنم چی باید به این کدم اضافه کنم همین رو بگید فقط

@khanzadimahdi

شاید پاسخ شما همین‌جا باشد

Mohammad Mirzavand
Mohammad Mirzavand
@m.mirzavand1992

ایا اون مقدار متغییر $driver رو برابر با مقدار درایور مورد نظر بذاریم این کار انجام میشه یا کد دیگری باید به این کد اضافه بشه؟

coarad supp
coarad supp
@coaradsupp

تخصص: برنامه نویس لاراول

سلام هر درگاهی که میخواین رو به این شکل بش پاس بدین

اقای خانزادی هم تایید کنن اوکیه

// 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.
            }
        );
Mohammad Mirzavand
Mohammad Mirzavand
@m.mirzavand1992

مرسی مهندس
@coaradsupp
تست میکنم

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

احتیاجی نیست شما دستی کلاس ها رو Instantiate کنی ..
این پکیج یک متد via هم داره که میتونی باهاش driver رو هم مشخص کنی

Payment::via('driverName')->purchase(
    $invoice, 
    function($driver, $transactionId) {
    // We can store $transactionId in database.
    }
);

در مستندات گفته شما باید نام درایور رو پاس بدی
اما شما Instance کلاس رو پاس دادید.. شاید این متد instance رو هم بپذیره.. باید امتحان کنی

Mohammad Mirzavand
Mohammad Mirzavand
@m.mirzavand1992

@ali.bayat
مهندس موقع برگشت کد verify براساس درگاه رو چجوری باید اضافه کنیم؟؟

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

مراحل کار بسیار ساده است

  • متد pay
  • متد verify

در حین استفاده از متد pay یه شماره تراکنش به شما داده میشه که میتونید ذخیرش کنید. سپس به درگاه بانک ریدایرکت میشید.
پس از برگشت از درگاه با همون شماره تراکنشی که دریافت کردید میتونید متد verify رو اجرا کنید و صحت پرداخت رو چک کنید.

محسن شرفی
محسن شرفی
@laravel 2

تخصص: برنامه نویس

سلام وقت بخیر خسته نباشید من چندین محصول رو به درگاه پرداخت اضافه میکنم با پکیج شتابیت ولی خطای عدم تطابق مبلغ تراکنش با مبلغ پرداختی رو میده ۱ ماهه منو درگیر کرده لطفا کمکم کنید ممنون. تو دیتابیس هر چند تا محصول ک من میخوام اضافه میشه ولی وقتی dd میگرم آخرین مقدار رو میاره ک طبیعتا خطای عدم تطابق رو میده

محسن شرفی
محسن شرفی
@laravel 2

تخصص: برنامه نویس

این هم از کدای پرچیس
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(),
        ]);
    }
}
reza haj rahimi
reza haj rahimi
@rezahajrahimi

چون دیدم که خیلی وقته این مسئله حل نشده و ممکن هست که افراد دیگه مثل من دنبال راه حلی بگردند که چطور می شه تنظیمات را بصورت پویا تغییر داد
ابتدا config را بصورت زیر وارد کلاس یا کنترلر کنید:

use Illuminate\Support\Facades\Config;

بعد هر قسمتی را که خواستید تغییر بدید، مثلا من می تونم merchantId زرین پال را بصورت زیر تغییر بدم

        config::set('payment.drivers.zarinpal.merchantId', '0000-00000000-0000000');

در صورتیکه بخوام مقدار set شده را به دست بیارم :

        $value = config('payment.drivers.zarinpal.merchantId');

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام