مهدی
4 سال پیش توسط مهدی مطرح شد
19 پاسخ

استفاده از پکیج shetabit

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


ثبت پرسش جدید
وحید حسنی
تخصص : برنامه نویس وب
@vah.id 4 سال پیش مطرح شد
0

من تقریبا طبق داکیومنتش پیش رفتم و تونستم اوکیش کنم
حالا تیکه کدتون رو بزارید ببینیم مشکل چیه


مهدی
تخصص : برنامه نویس
@mahdiam200 4 سال پیش مطرح شد
0
    public function Sending_to_zarinpal(Bill $bill){
        $invoice = new Invoice;
        $invoice->amount($bill->price)->via('zarinpal')->transactionId(123);
        $invoice->detail(['detailName' => 'your detail goes here']);
        return Payment::purchase($invoice, function($driver, $transactionId) {
            // Store transactionId in database as we need it to verify payment in the future.
        })->pay()->render();

    }

مهدی
تخصص : برنامه نویس
@mahdiam200 4 سال پیش مطرح شد
0

و اینم نمیدونم کهtransactionId ما باید بهش بدیم یا خودش خودکار میسازه چون تو داکیومنتش فقط گفته بهش نیاز داریم و نگفته بهش بدیم یا نه؟ و نکته بعدی اینکه الان پروژه من روی لوکال هست آیا روی لوکال امکانپذیر هست یا پروژه حتما باید بره روی هاست؟


مهدی
تخصص : برنامه نویس
@mahdiam200 4 سال پیش آپدیت شد
0

و البته اینم از فایل config

 'zarinpal' => [
            /* normal api */
            'apiPurchaseUrl' => 'https://ir.zarinpal.com/pg/services/WebGate/wsdl',
            'apiPaymentUrl' => 'https://www.zarinpal.com/pg/StartPay/',
            'apiVerificationUrl' => 'https://ir.zarinpal.com/pg/services/WebGate/wsdl',

            /* sandbox api */
            'sandboxApiPurchaseUrl' => 'https://sandbox.zarinpal.com/pg/services/WebGate/wsdl',
            'sandboxApiPaymentUrl' => 'https://sandbox.zarinpal.com/pg/StartPay/',
            'sandboxApiVerificationUrl' => 'https://sandbox.zarinpal.com/pg/services/WebGate/wsdl',

            /* zarinGate api */
            'zaringateApiPurchaseUrl' => 'https://ir.zarinpal.com/pg/services/WebGate/wsdl',
            'zaringateApiPaymentUrl' => 'https://www.zarinpal.com/pg/StartPay/:authority/ZarinGate',
            'zaringateApiVerificationUrl' => 'https://ir.zarinpal.com/pg/services/WebGate/wsdl',

            'mode' => 'normal', // can be normal, sandbox, zaringate
            'merchantId' => 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX',
            'callbackUrl' => 'http://spirutik.com/',
            'description' => 'payment using zarinpal',
        ],

نیما حمیدپور
تخصص : برنامه نویس وب
@hamidpour17 4 سال پیش مطرح شد
0
   $invoice = new Invoice;
        $invoice->amount('amount');
        $invoice->detail('price','price');
        Payment::purchase($invoice,function($driver, $transactionId) {});
        return Payment::pay()->render();

علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
0

اتفاقا خیلی سر راست هست

این پکیج عملیات ساخت صورت حساب رو برای شما انجام میده..
و هر صورت حساب یک مبلغ یا amount داره.
سپس شما اقدام به پرداخت صورت‌حساب میکنید..
در این حین یک transaction_id یا شماره تراکنش به شما داده میشه که باید ذخیره کنید.
و سپس به درگاه بانک منتقل میشید.
بانک هم در نهایت شما رو به یک آدرس مشخص ریدایرکت میکنه.
که اونجا میتونید با شماره تراکنشی که قبلا ذخیره کردید، صحت پرداخت رو بررسی کنید.


محمدسجاد دباغ
تخصص : برنامه نویس لاراول
@mdabbagh 3 سال پیش آپدیت شد
0

@ali.bayat @mohaligateway

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

قبل از انجام هرکاری نیاز به ایجاد یک صورتحساب دارید.

سوال: ایجاد صورت حساب یعنی چی؟ ما در صفحه محصول وقتی روی پرداخت میکنیم تنظیم کردم که کنترلر redirect اجرا باشه.
حالا باید اینجا چکار کنم؟ ابتدا یک رکورد صورتحساب در جدول payment ثبت کنم؟

ثبت درخواست برای پرداخت صورتحساب
پرداخت صورتحساب

متوجه این دو بخش نمیشم ، تفاوتشون چیه؟
در آخر در قسمت redirect چی باید بنویسم؟


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 3 سال پیش مطرح شد
0

@msdabbagh

روال کار به این شکل هست:

  • برای پرداخت یه مبلغ باید صورت حساب صادر کنی
  • بعد اون صورت حساب رو پرداخت کنی

پس ابتدا یه صورت حساب میسازیم و مبلغ قابل پرداخت رو بهش پاس میدیم

use Shetabit\Multipay\Invoice;
use Shetabit\Payment\Facade\Payment;

$invoice = (new Invoice)->amount(1000);

حالا با متد Purchase این صورت حساب رو آماده پرداخت میکنیم

return Payment::purchase($invoice, function($driver, $transactionId) {
    // Store transactionId in database as we need it to verify payment in the future.
})->pay()->render();

که در نتیجه یک شماره تراکنش به وجود میاد که میتونی توی دیتابیس ذخیرش کنی
و در نهایت متدهای pay & render هم اعمال میشند و کاربر رو به درگاه بانک ریدایرکت میکنه


محمدسجاد دباغ
تخصص : برنامه نویس لاراول
@mdabbagh 3 سال پیش مطرح شد
0

@ali.bayat
احسنت متشکرم خیلی شفاف شد.

که در نتیجه یک شماره تراکنش به وجود میاد که میتونی توی دیتابیس ذخیرش کنی

شماره تراکنش رو کی باید ذخیره کنم؟ دقیقا قبل render شدن در کنترلر redirect یا در کنترلر callback ؟


برای قسمت callback من یک کنترلر ایجاد کردم و وقتی dd($request) میگیرم میگه

The GET method is not supported for this route. Supported methods: POST.

اگر پاسخ پرداخت به صورت get بیاد چطور باید بررسی کنم؟

کد قسمت کنترلر callback رو هم بهم میگید؟


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 3 سال پیش مطرح شد
0

داخل کلوژر
اونجا میتوی شماره تراکنش و مبلغ رو توی یه جدول ذخیره کنی

بعد که به کالبک ریدایرکت بشی میتونی با همون شماره تراکنش، پرداخت رو تائید کنی:

try {
    $receipt = Payment::amount(1000)->transactionId($transaction_id)->verify();

    echo $receipt->getReferenceId();

    ...
} catch (InvalidPaymentException $exception) {
    echo $exception->getMessage();
}

https://github.com/shetabit/payment#verify-payment


محمدسجاد دباغ
تخصص : برنامه نویس لاراول
@mdabbagh 3 سال پیش مطرح شد
0

@ali.bayat
یعنی ما به یک جدول جدای از payment نیاز داریم برای ذخیره transaction_id ؟
چنین جدولی باید به اسم transaction باشه؟ و چه فیلد های دیگه ای نیاز داره؟
برای اینکه بررسی کنیم که کاربر محصول رو خریداری کرده باید جدول transaction بررسی بشه یا payment ؟

بعد که به کالبک ریدایرکت بشی میتونی با همون شماره تراکنش، پرداخت رو تائید کنی:

درخواست Get میاد ؟


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 3 سال پیش مطرح شد
0

قاعدتا درخواست get مناسب این کار نیست

آدرس مستندات رو برات گذاشتم
درست بخونش، متوجه میشی


mahdi khanzadi
تخصص : Software engineer
@khanzadimahdi 3 سال پیش آپدیت شد
0

سلام دوستان. زرین بال چند وقت اخیر توی API پرداخت خودش تغییراتی داده به همین دلیل توی پکیج shetabit الان فقط sandbox درست کار میکنه.

اگه توی استفاده از زرین پال به مشکل خوردین نگران نباشید تا اخر همین هفته درست میشه و اخر هفته فقط باید پکیج رو بروز رسانی کنید. (همون کدهایی که نوشتین و توی حالت sandbox کار میکنه رو میتونید واسه تمام درگاه ها استفاده کنید)

برای برگشت هم پیشنهاد میکنم any بزارید.

موفق باشید.


محمدسجاد دباغ
تخصص : برنامه نویس لاراول
@mdabbagh 3 سال پیش مطرح شد
0

@ali.bayat

قاعدتا درخواست get مناسب این کار نیست

پس دلیل ارور زیر در callback چیه؟

The GET method is not supported for this route. Supported methods: POST.

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

یعنی ما به یک جدول جدای از payment نیاز داریم برای ذخیره transaction_id ؟
چنین جدولی باید به اسم transaction باشه؟ و چه فیلد های دیگه ای نیاز داره؟


محمدسجاد دباغ
تخصص : برنامه نویس لاراول
@mdabbagh 3 سال پیش مطرح شد
0

@ali.bayat @khanzadimahdi @hamidpour17
@mohaligateway

سلام
در این قطعه کد متغیر Workshop در order_data به دو شیوه $this->Workshop و $Workshop در دسترس نیست.
راه کار چیه؟

public function redirect(Request $request , $id_workshop)
   {
       $Workshop = Workshop::find($id_workshop);

       $invoice = new Invoice;
       $invoice->amount($Workshop->workshops_price);

       return Payment::purchase($invoice, function($driver, $transactionId) {
           $order_data = [
               'system_discount' => $this->Workshop->workshops_discount_percentage, //در دسترس نیست
               'original_price' => $Workshop->workshops_price, //در دسترس نیست
           ];
           $order = Orders::create($order_data);
       })->pay()->render();
   }

علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 3 سال پیش مطرح شد
0

باید از use استفاده کنی
تا متغیر داخل کلوژر قابل دسترسی باشه

       return Payment::purchase($invoice, function($driver, $transactionId) use ($Workshop) {
           $order_data = [
               'system_discount' => $this->Workshop->workshops_discount_percentage, //در دسترس نیست
               'original_price' => $Workshop->workshops_price, //در دسترس نیست
           ];
           $order = Orders::create($order_data);
       })->pay()->render();

mahdi khanzadi
تخصص : Software engineer
@khanzadimahdi 3 سال پیش مطرح شد
0

سلام درگاه زرین پال رو با توجه به اخرین ورژن ای پی آی که ارائه دادن بروز رسانی کردم. لطفا پکیج رو اپدیت کنید و فایل کانفیگ پکیج رو حذف کنید و دوباره پابلیش کنید.


S.M
@skydevelopers 3 سال پیش مطرح شد
-1

سلام چطور میشه از این پکیج در ساخت api درگاه پرداخت استفاده کرد؟

@khanzadimahdi


محمد رهنما
تخصص : برنامه نویس
@m-rhnm 6 ماه پیش مطرح شد
0

سلام خسته نباشید کسی هست این سوال رو توضیح بده؟ من هم از api استفاده میکنم و در کال بک مشکل دارم .البته الان د رمحیط لوکال دارم تست میکنم


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

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