راکت

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

19 پاسخ

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

ثبت پرسش جدید

پاسخ‌ها

19
وحید حسنی
وحید حسنی
@vah.id

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

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

مهدی
مهدی
@mahdiam200

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

    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

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

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

مهدی
مهدی
@mahdiam200

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

و البته اینم از فایل 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

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

   $invoice = new Invoice;
        $invoice->amount('amount');
        $invoice->detail('price','price');
        Payment::purchase($invoice,function($driver, $transactionId) {});
        return Payment::pay()->render();
علی بیات
علی بیات
@ali.bayat

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

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

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

محمدسجاد دباغ
محمدسجاد دباغ
@mdabbagh

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

@ali.bayat @mohaligateway

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

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

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

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

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

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

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

@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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

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

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

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

موفق باشید.

محمدسجاد دباغ
محمدسجاد دباغ
@mdabbagh

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

@ali.bayat

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

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

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

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

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

محمدسجاد دباغ
محمدسجاد دباغ
@mdabbagh

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

@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

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

باید از 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
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

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

S.M
S.M
@skydevelopers

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

@khanzadimahdi

محمد رهنما
محمد رهنما
@m-rhnm

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

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

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

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