سلام دوستان
برای درگاه پرداخت از پکیج زیر استفاده میکنم:
https://github.com/shetabit/payment
من از livewire استفاده میکنم و طبق مستندات خود پکیج کد ایجاد صورتحساب و اتصال به درگاه رو نوشتم اما مشکل اینجاست که به درگاه پرداخت متصل نمیشه
return Payment::purchase(
(new Invoice)->amount(10000000),
function($driver, $transactionId) {
$ss = 0;
}
)->pay()->render();
یه روت ایجاد کردم و کدهارو داخل روت قرار دادم و بدون هیچ مشکل یا خطایی متصل شد به درگاه پرداخت. مشکل چیه دوستان
سلام. کدی که نوشتین رو باید از کنترلر return کنید. متد render یه فرم میسازه و توش یه جاوا اسکریپت هست که سابمیت میکنه فرم رو و باعث میشه به درگاه پرداخت هدایت بشید.
اگه هیچ خطایی نمیگیرید و به درگاه هم نمیرین مشکل از این هست که render فرمی که درست میکنه رو به عنوان view به صورت صحیح نتونسته به کلاینت پاس بده.
@khanzadimahdi من از کنترلر استفاده نکردم مستقیم کد رو داخل کامپوننت لایووایر نوشتم..مشکل از همینه بنظرتون؟
از کنترلر استفاده کن. کامپوننت لایو وایر view که داره با چیزی که توی render پاس داده میشه متفاوته. یا اینکه view که رندر پاس میده رو توی صفحه echo کن.
من هم این مشکل رو دارم
توی کامپوننت که میخوام به درگاه متصل بشم مشکل داره
نمیدونم چیکار باید بکنم
لطفا راهنمایی کنید
@khanzadimahdi
سلام. زمانی که شما میخواید از متد render پکیج شتابیت در livewire استفاده کنید ابتدا یک متغیر عمومی در کامپوننت مثلا با عنوان paymentForm ایجاد کنید با مقدار اولیه null. بعد زمانی که کاربر بر روی گزینه پرداخت کلیک کرد و شما متد payment رو اجرا کردید مقداری که از render میگیرید رو به متغیر paymentForm بدید و توی فایل blade بیایید و paymentForm رو چاپ کنید در یک قسمتی از صفحه در صورتی که مقدارش null نباشه. یک فرم نمایش میده که یک دکمه داره برای رفتن به درگاه و زمان هم میتونید بهش بدید که خودکار فرم رو submit کنه و این کار رو میتونید با تلفیقی از alpinejs هم انجام بدید به منظور نمایش ثانیه شمار. نیازی هم به ایجاد کردن کنترلر اضافه نیست. و اینکه میتونید فرم پیشفرض پکیج رو هم شخصی سازی کنید در مسیر resources\views\vendor\shetabitPayment
سلام دوستان،
اگر میخواهید صفحه رندر رو در لایو وایر نمایش بدید:
فایل ساخته شده 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>
public $render;
@if(!$render)
<div class="flex justify-start item-start space-y-2 flex-col">
... محتویات صفحه فعلی ...
</div>
@else
{!! $render !!}
@endif
توجه بکنید، برای اینکه محتویات کامپوننت redirectForm خروجی Html داشته باشه، برای نمایشش از
{!! ... !!}
استفاده کردم.
حالا راحت میتونید فرم رو نمایش بدید، فقط یادتون باشه که اول محتویات 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;
خروجی به این شکل خواهد بود:
امیدوارم کمک بکنه :)
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟