راکت

مشکل اتصال به درگاه پرداخت

11 پاسخ

سلام دوستان
برای درگاه پرداخت از پکیج زیر استفاده میکنم:

https://github.com/shetabit/payment

من از livewire استفاده میکنم و طبق مستندات خود پکیج کد ایجاد صورتحساب و اتصال به درگاه رو نوشتم اما مشکل اینجاست که به درگاه پرداخت متصل نمیشه

        return Payment::purchase(
            (new Invoice)->amount(10000000),
            function($driver, $transactionId) {
                $ss = 0;
            }
        )->pay()->render();

یه روت ایجاد کردم و کدهارو داخل روت قرار دادم و بدون هیچ مشکل یا خطایی متصل شد به درگاه پرداخت. مشکل چیه دوستان

M
M
@abstruse
ثبت پرسش جدید

پاسخ‌ها

11
rabco
rabco
@rabco

تخصص: Full Stack developer

سلام خطایی که دریافت میکنید رو هم بزارید

M
M
@abstruse

@rabco
هیچ خطایی نمیده

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

M
M
@abstruse
mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

سلام. کدی که نوشتین رو باید از کنترلر return کنید. متد render یه فرم میسازه و توش یه جاوا اسکریپت هست که سابمیت میکنه فرم رو و باعث میشه به درگاه پرداخت هدایت بشید.

اگه هیچ خطایی نمیگیرید و به درگاه هم نمیرین مشکل از این هست که render فرمی که درست میکنه رو به عنوان view به صورت صحیح نتونسته به کلاینت پاس بده.

M
M
@abstruse

@khanzadimahdi من از کنترلر استفاده نکردم مستقیم کد رو داخل کامپوننت لایووایر نوشتم..مشکل از همینه بنظرتون؟

mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

از کنترلر استفاده کن. کامپوننت لایو وایر view که داره با چیزی که توی render پاس داده میشه متفاوته. یا اینکه view که رندر پاس میده رو توی صفحه echo کن.

Parzival
Parzival
@ParzivalCoder

تخصص: Developer

من هم این مشکل رو دارم
توی کامپوننت که میخوام به درگاه متصل بشم مشکل داره
نمیدونم چیکار باید بکنم
لطفا راهنمایی کنید
@khanzadimahdi

امین محمدزاده
امین محمدزاده
@amin.webdesign

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

سلام. زمانی که شما میخواید از متد render پکیج شتابیت در livewire استفاده کنید ابتدا یک متغیر عمومی در کامپوننت مثلا با عنوان paymentForm ایجاد کنید با مقدار اولیه null. بعد زمانی که کاربر بر روی گزینه پرداخت کلیک کرد و شما متد payment رو اجرا کردید مقداری که از render میگیرید رو به متغیر paymentForm بدید و توی فایل blade بیایید و paymentForm رو چاپ کنید در یک قسمتی از صفحه در صورتی که مقدارش null نباشه. یک فرم نمایش میده که یک دکمه داره برای رفتن به درگاه و زمان هم میتونید بهش بدید که خودکار فرم رو submit کنه و این کار رو میتونید با تلفیقی از alpinejs هم انجام بدید به منظور نمایش ثانیه شمار. نیازی هم به ایجاد کردن کنترلر اضافه نیست. و اینکه میتونید فرم پیشفرض پکیج رو هم شخصی سازی کنید در مسیر resources\views\vendor\shetabitPayment

علی اکبری
علی اکبری
@jpro.feri

تخصص: بک اند

سلام
بی زحمت اگه کسی این مشکل رو بصورت عملی حل کرده نمونه کدهاشو برای ما بزاره
باتشکر .

علی اکبری
علی اکبری
@jpro.feri

تخصص: بک اند

کسی دقیق نمیتونه راهنمایی کنه چجوری این مشکل لایو وایر رو حل کنیم ؟

احسان
احسان
@Ehsun

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

سلام دوستان،
اگر می‌خواهید صفحه رندر رو در لایو وایر نمایش بدید:

  1. فایل ساخته شده redirectForm توسط شتابیت رو تغییر بدید:
    چون قراره بوسیله لایو وایر فرم ریدایرکت رو نشون بدیم، پس باید یک سری تغییرات در اون ایجاد بکنیم. من تمام اسکریپ ها رو حذف و بجاش از آلپاین استفاده کردم. (ضمنا فرض رو بر این میزارم که شما هم از Tailwindcss استفاده می‌کنید. در صورتی که از فریم ورک دیگه‌ای استفاده می‌کنید، خودتون میتونید کلاس ها رو تغییر بدید.)
    redirectForm.blade.php:

    <div x-data="{ show: true,countdown: 3 }" x-show="show" x-init="setInterval(() => {
    if(countdown == 1) {
    document.getElementById('redirectForm').submit()
    }else {
    countdown--;}
    }, 1000)">
    <form id="redirectForm" class="text-center mt-2" method="{{ $method }}" action="{{ $action }}">
    <div class="relative flex flex-col items-center max-w-lg gap-4 p-6 rounded-md shadow-md sm:py-8 sm:px-12 bg-gray-900 text-gray-100 mx-auto">
    <div class="w-16 h-16 border-4 border-dashed rounded-full animate-spin dark:border-emerald-400 mx-auto"></div>
    <h2 class="text-2xl font-semibold leading-tight tracking-wide">در حال انتقال به درگاه پرداخت</h2>
    <p class="flex-1 text-center text-gray-400">اگر تا <span x-text="countdown" class="kalameNum"></span> ثانیه دیگر به صفحه درگاه منتقل نشدید، روی دکمه زیر کلیک بکنید.</p>
    
    @foreach($inputs as $name => $value)
    <input type="hidden" name="{{ $name }}" value="{{ $value }}">
    @endforeach
    
    <button type="submit" class="px-8 py-3 font-semibold rounded-full bg-emerald-400 text-gray-900">ورود به درگاه پرداخت</button>
    </div>
    </form>
    </div>
    1. حالا، یک متغیر پابلیک به اسم render در کامپوننتی که میخواهید فرم ریدایرکت را نمایش دهید، تعریف بکنید.
    public $render;
    1. من در کامپوننت checkout فرم ریدایرک را نمایش دادم پس یک شرط تعریف کردم که اگر متغیر رندر خالی نبود اونو نمایش بده:
    @if(!$render)
    <div class="flex justify-start item-start space-y-2 flex-col">
    ... محتویات صفحه فعلی ...
    </div>
    @else
    {!! $render !!}
    @endif

توجه بکنید، برای اینکه محتویات کامپوننت redirectForm خروجی Html داشته باشه، برای نمایشش از {!! ... !!} استفاده کردم.

  1. حالا راحت میتونید فرم رو نمایش بدید، فقط یادتون باشه که اول محتویات render شتابیت رو توی متغیر پابلیک render قرار بدید و بعدش متغیر پابلیک رو return بکنید:

    use Shetabit\Multipay\Invoice;
    use Shetabit\Multipay\Payment;
    $payconfig = config('payment');
    $payment = new Payment($payconfig);
    $invoice = (new Invoice)->amount(1000);
    $render =   $payment->callbackUrl('http://127.0.0.1:8000/payment/callback')->purchase($invoice, function ($driver, $transactionId) {
    // Store transactionId in database.
    // We need the transactionId to verify payment in the future.
    })->pay()->render();
    
    $this->render = $render;
    
    return $render;

خروجی به این شکل خواهد بود:
 تصویر

امیدوارم کمک بکنه :)

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

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