M
3 سال پیش توسط M مطرح شد
11 پاسخ

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

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

https://github.com/shetabit/payment

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

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

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


ثبت پرسش جدید
rabco
تخصص : Full Stack developer
@rabco 3 سال پیش مطرح شد
0

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


M
@abstruse 3 سال پیش مطرح شد
0

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


M
@abstruse 3 سال پیش مطرح شد
mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 3 سال پیش مطرح شد
0

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

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


M
@abstruse 3 سال پیش مطرح شد
0

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


mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 3 سال پیش مطرح شد
0

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


S.AliMotamedi
تخصص : Developer
@naser.m1994 3 سال پیش مطرح شد
0

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


امین محمدزاده
تخصص : برنامه نویسی وب - Laravel
@amin.webdesign 3 سال پیش مطرح شد
1

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


علی اکبری
تخصص : بک اند
@jpro.feri 3 سال پیش آپدیت شد
0

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


علی اکبری
تخصص : بک اند
@jpro.feri 3 سال پیش مطرح شد
0

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


احسان
تخصص : علاقه مند به برنامه نویسی
@Ehsun 2 سال پیش آپدیت شد
2

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

  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;

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

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


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

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