اتصال به درگاه بانک ها در لاراول

حامد پاکدامن

آموختن مهارت ها ، ارتقاء سطح علمی و نشر دانسته ها باید از مهمترین اهداف جوامع برنامه نویسی باشد ... حدود 10 سالی است که به صورت تخصصی با php برنامه نویسی میکنم. توسعه فریمورک لاراول از بهترین علایق من هست .

You may also like...

130 Responses

  1. میثم says:

    مرسی از کاری که کردید،اما یه سوال کجا ترمینال ای دی و یوزرنیم درگاهمونو وارد کنیم

  2. hamed says:

    merci vaghean babate in karha dar zamineye laravel k avalan mostanadat farsi khobi nadasht va sanian in k in ghabil karha o packagha dare dar zamineye karhaye dakhelie keshvaremon ok mikonid
    vagheeeeeean khaste nabashid

  3. hamed says:

    packge cruddy khode laravelam age momkene amozeshesho bzarid
    in packag vase “admin panele”

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

  5. میثم says:

    ببخشید میشه لطف کنید یک نمونه روت از نوع post برای دریافت نتایج بنویسید ،یکم ابهام دارم،

    Refid رو چه جوری با این کار دوباره واسه بانک بفرستیم
    مرسی

    • حامد پاکدامن says:

      شما قرار نیست مجددا refid رو دوباره به بانک بفرستید ! تابع Gateway::verify خودش این کار رو واستون انجام میده 🙂 . من براتون route ها به همراه توضیحات خیلی کاملتری اضافه کردم. لطفا مجددا مطالعه فرمایید .

    • حامد پاکدامن says:

      این پکیج آسونتر از اون چیزیه که فکرشو میکنید . لطفا پیشفرض های ذهنیتون در مورد API بانک ها رو دور بریزید و به این سیستم عادت کنید .

  6. میثم says:

    واقعا تشکر میکنم از اینکه باحوصله وقت گذاشتید و توضیح دادید

  7. علی says:

    سلام
    من این پکیج رو لاراول ۵٫۲ نصب کردم هنگام اضافه کردن provider اررو میده و وقتی پابلیش میکنم این خطا رو میده :
    Class ‘Larabookir\Gateway\GatewayServiceProvider’ not found

    • حامد پاکدامن says:

      ما خودمون با لاراول ۵٫۲ تست زدیم . ۱- اطمینان حاصل کنید پکیجتون تو مسیر vendor/larabook/gateway به درستی نصب شده باشه . ۲- تغییراتی که تو app.php گفتم رو حتما باید اعمال کرده باشید . ۳- اون دستور publish رو بدون کوتیشن هم تست کنید .
      مثلا :
      php artisan vendor:publish –provider=Larabookir\Gateway\GatewayServiceProvider

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

    • حامد پاکدامن says:

      مجددا نصب کنید توجه داشته باشید این دستور رو باید بزنید composer require larabook/gateway

      • علی says:

        الان به درستی نصب و فایل app.php به درستی تغییر میکنه اما وقتی دستور php artisan vendor:publish –provider=”Larabookir\Gateway\GatewayServiceProvider”
        رو میزنیم فایل config ایجاد نمیشه و پیغام Nothing to publish for tag [].
        رو میده

        • حامد پاکدامن says:

          ۱ – به این مسیر برو : laravel/vendor/larabook/gateway/src/GatewayServiceProvider.php
          ۲- سپس پراپرتی protected $defer رو پیدا کن اگر true هست برابر false بزارش .
          ۳- حالا دستور php artisan optimize رو تو ترمینال اجرا کن .
          ۴- حالا دستور پابلیش رو اجرا کن اگر کار نکرد کوتیشن (“) ها رو از تو پارامترش بردار .
          ۵- الان چک کنید باید فایل ها کانفیگ و میگریشن و view باید کپی شده باشند .
          ۶- اگر همچنان مشکل داشتی همون فایل GatewayServiceProvider رو باز کن توش مشخص هست که کدام فولدر باید به چه مسیری کپی شه . بصورت دستی کپیشون کن .

          مشکل از لاراول هست زمانی که defer رو برابر true میزاری دیگه دستورات publish روش اجرا نمیشه ! امیدواریم از ورژن های بعد اوکی بشه .

        • حامد پاکدامن says:

          ممنون از اینکه انقدر خوب به ما در جهت رفع خطاها کمک کردی . اگر در نهایت همچی اوکی شد بهمون اطلاع بده . با تشکر

  8. علی says:

    بازم سلام
    برا درگاه زرین پال خطا میدهد،
    اونوقت او دو تا پارامتر چیه تو این درگاه ؟؟
    public function __construct($config, $port)

  9. محمد says:

    سلام خسته نباشید
    شما فقط گفتید جدول ایجاد کنید اما نگفتید اسم جدول و فیلداش چی باشن میشه توضیح بدید
    مرسی

    • حامد پاکدامن says:

      جداول خودشون ایجاد میشن . میگریشن های مورد نظر به وسیله دستور publish به پروژتون انتقال داده میشن و سپس بوسیله دستور php artisan migrate جداول شما ایجاد میشن . نکته : قبل از اینکه میگریت کنید میتونید نام جدولتون رو در فایل config/gateway.php مشخص کنید .

      برای اطلاعات بیشتر در مورد نحوه عملکرد میگریشن ها به این صفحه مراجعه فرمایید .

  10. امین says:

    سلام
    با تشکر از آقای پاکدامن بابت این پکیج خوب و حرفه ای که واقعا کار بزرگی انجام داده اند.
    یه سوال داشتم خدمت دوستان و همچنین آقای پاکدامن که آیا امکانش هست که با این پکیج یه سازوکاری چیده بشه که از میان درگاههای بانک ملی ، ملت و پارسیان که هست بصورت هوشمند و اتوماتیک بهترین درگاه (از لحاظ در دسترس بودن و …) انتخاب بشه و لازم نباشه که بصورت پیشفرض درگاه رو از قبل برای پرداخت تعیین کنیم. وب سایت پی لاین یه همچین کاری کرده بود و بصورت هوشمند کاربر رو به بهترین درگاه هدایت می کرد.
    با تشکر

    • حامد پاکدامن says:

      با عرض سلام خدمت شما دوست گرامی. پیشنهاد خوبی کردید ولی از نظر فنی این موضوع کمی پیچیده تر از اون چیزی هست که بخوایم تو این پکیج بگنجونیم. ولی راه حلش نوشتن یک کرون جاب هست که هر یک دیقه یک بار بانک ها رو چک میکنه و اونایی که رسپانس تایم کمتر و بهتری داره رو در جدول اولویت بندی میکنه. این عملیات حتما باید بصورت cron jobs نوشته بشه و نمیشه همزمان که کاربر درخواست اتصال به بانک رو میزنه این عملیات سنگین رو انجام داد. این سیستم رو شما خودتون میتونید با کمی کدنویسی انجامش بدید. پیروز باشید

      • امین says:

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

        //$url = “https://sadad.shaparak.ir/services/MerchantUtility.asmx?wsdl”;
        //$url = “https://pec.shaparak.ir/pecpaymentgateway/eshopservice.asmx?wsdl”;
        $url = “https://bpm.shaparak.ir/pgwchannel/services/pgw?wsdl”;

        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        if(curl_exec($ch))
        {
        $info = curl_getinfo($ch);
        $ResponsTime = $info[‘total_time’].’ ثانیه’;
        }
        curl_close($ch);

        if(isset($ResponsTime)) return $ResponsTime;

        با تشکر

        • حامد پاکدامن says:

          سلام . بله این جوری بنویسیدش :

          ———-

          function getAvailableBank($random=true){
          $urls[] = [‘sadad’,’https://sadad.shaparak.ir/services/MerchantUtility.asmx?wsdl’];
          $urls[] = [‘parsian’,’https://pec.shaparak.ir/pecpaymentgateway/eshopservice.asmx?wsdl’];
          $urls[] = [‘mellat’,’https://bpm.shaparak.ir/pgwchannel/services/pgw?wsdl’];

          if($random)
          shuffle($urls);

          foreach($urls as $url){

          $ch = curl_init($url[1]);
          curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
          if(curl_exec($ch))
          {
          $info = curl_getinfo($ch);
          $ResponsTime = $info[‘total_time’].’ ثانیه’;
          }
          curl_close($ch);

          if(isset($ResponsTime)) return $url;
          }
          }

          print_r( getAvailableBank());

  11. حسن علیشیری says:

    سلام

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

    Unmarshalling Error: For input string

  12. مانی says:

    سلام مهندس.میشه توضیح بدین که مثلا کاربر بخواد ۵۰۰۰ هزار تومان واریز کنه کدش دقیقا چی میشه؟ یکم گنگ شدم. خیلی ممنونم

  13. مانی says:

    مثلا با درگاه زرین پال

  14. امیر says:

    سلام مهندس جان
    یه سوال.
    callback-url رو در فایل gateway.php چی باید وارد کنیم؟

    • با سلام .
      در اصل باید آدرسی باشه که بانک بعد از اتمام عملیات خرید ، کاربر رو به این صفحه ارجاع میده و ما تو این صفحه اطلاعات خرید رو از بانک میگیرم و در بانک اطلاعاتی ذخیره میکنیم . مثلا اگر کاربر درخواست خرید محصولی رو داشته ما در این محله باید محصول رو به کاربر ارائه کنیم .

      توی همین آموزش جایی که باید شما محصول رو به کاربر ارائه بدید رو مشخص میکنم براتون .
      ———————-
      callback-url رو در فایل gateway.php چی باید وارد کنیم؟
      تو این مثالی که من گفتم این آدرس callback/from/bank باید ست بشه .

  15. امیر says:

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

  16. مانی says:

    اقای پاکدامن من تست کردم همه چی درست بود. price رو با متغیر set کردم و میره در دیتابیس میگرده و اگر کالایی با اون ایدی مشخص شده موجود بود درخواست میده برای بانک و میره تو صفحه پرداخت زرین پال. حالا تا اینجا همچی درسته. ولی وقتی انصراف از پرداخت رو میزنم call-back که میکنه به سایت خودم خطا میده (MethodNotAllowedHttpException in RouteCollection.php line 219)
    ولی وقتی روت post رو به get تغییر میدم exception رو برمیگردونه و کار میکنه. مشکل از چیه بنظرتون؟ خود زرین پال فکر کنم با get کالبک کنه. ممنون میشم راهنمایی کنید

  17. امیر says:

    سلام
    من به هر روشی که میخوام آبجکت بسازم
    مثلا اینطوری
    $gateway = Gateway::mellat();
    این ارورو میده
    ReflectionException in Container.php line 734:
    Class gateway does not exist

  18. علی says:

    کارتون عالیه آقای پاکدامن

  19. جواد says:

    سلام ممنون بابت ساخت این پست
    من با پی لاین تست زدم و به بانک وصل میشه اما وقتی برگشت رو میزنی وقتی روت post باشه این خطا رو میده:
    این آدرس بار مرورگر:
    http://localhost:81/laravel/public/callback/from/bank?transaction_id=1465734204&_token=XzL2a2GwVOHwtcJhFQS66HWC4Ho7DHAMc831Ql6i
    اینم خطای مربوطه:
    Whoops, looks like something went wrong.
    MethodNotAllowedHttpException in RouteCollection.php line 218:
    بعد وقتی get میکنم پیغام میده چنین تراکنشی وجود ندارد 🙁 😐

  20. فرهاد محمدی says:

    اقای پاکدامن عزیز

    بسیار بسیار ممنون و مچکر بابت همچین پکیجی که طراحی کردید. بسیار عالی است و ممنون از شما
    بنده هم با فریم ورک لاراول کار میکنم و در هر زمینه ای با کمال میل شما را در توسعه آن همیار خواهم بود

    • با سلام ، بسیار خوشحال میشیم اگر شما هم بتونید توی توسعه این پکیج به ما کمک کنید و قطعا هر عمل خیر خواهانه و ، نتیجه مثبتی داره که در دراز مدت به خود آنسان باز میگرده . این پکیج قسمت های داره که هنوز به خوبی تست نشدن مثلا با درگاه زرین پال یه خورده مشکلاتی داره و همچنین بانک ملی (سداد) و همچنین برای بانک سامان هم باید ایجاد بشه . خوش حال میشیم بتونید شما هم با ما در این مشارکت سهیم بشید . در صورت امکان به بنده ایمیل بزنید با تشکر .
      iraitc@gmail.com

  21. حسین says:

    از کجا مطمئن شیم این پکیج امن هست !!

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

  22. رضا says:

    سلام
    این پکیج احتمالا کپی شده https://github.com/PoolPort/PoolPort این نیست؟

  23. محمد says:

    با سلام
    وقتی بخواییم دستی به درگاه وصل شیم باید nusoap رو به پروژه اضافه کنیم
    تو این روشی که شما زحتش رو کشیدید که همچین چیزی لازم نیس ؟
    ضمنن nusoap که توسط بانک ملت در سال ۲۰۰۷ (۱۰سال قبل ) نوشته شده تمامی فریمورک ها به کدهاش ایراد میدن و بانک ملت حرفه ای ترین جوابش اینه که ۲۰ هزار نفر دارن ازش استفاده میکنن و مشکلی نداره و خدا برا بندگان صالحش فرستاده
    😐

    • سلام. بله متاسفانه فقط بانک ملت هست که پکیج nusoap رو دستکاری کرده و تو اکثر پروژه ها مجبوریم یه nusoap هم مخصصوص بانک ملت قرار بدیم . ولی ما به صورت built-in داخل این پکیج گذاشتیمش و شما لازم نیست اون رو اد کنید.

  24. احمد says:

    با سلام ، بعد از بازگشت نا موفق کاربر از درگاه Exceptionها به درستی نمایش داده نمیشن و با صفحه پیش فرض ارور مواجه میشم با این متن ” MellatException in Mellat.php line 154: کاربر از انجام تراکنش منصرف شده است ” چرا catch ها به درستی کار نکردن ؟؟ممنون میشم اگر راهنمایی کنید

    • با سلام . مشکل شما اینه که از exception مختص به خودش استفاده نمی کنید . برای این منظور شما باید این دستور رو برای دریافت کردن exception های بانک ملت استفاده کنید :
      try{

      } catch (MellatException $e) {

      echo $e->getMessage();

      }

  25. مهران says:

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

  26. مهران says:

    با سلام ممنون از پاسخ تون بازم متوجه نشدم در داخل لاراول یک پوشه است بنام بوت استرپ در داخل این پوشه دوتا فایل هست بنام های اپ و آوتولود و پوشه کش چیزی بنام سی اس اس دات جی اس نیست.حالا سوالم این است آیا کل بوت استرپ را از سایتش دانلود کنم بزارم تو پروژه لاراولم و مثل پروژه های عادی ازش استفاده کنم یا تنها فایل (css.js) را از سایت دانلود کنم تو پوشه پابلیک بزارم بعد ازش استفاده کنم و نیازی به دانلود بوت استرپ نیس خودش داخل لاراول موجود است. بازم ممنون

    • دوست عزیز اون فولدر بوت استرپ لاراول هیچ ارتباطی با twitter bootstrap نداره .
      شما لاراول رو که نصب کردی دستور make:auth رو بزن تا یه سیستم عضویت با تم بوت استرپ برات ساخته بشه بعد اگه کمی بررسیش کنی میفهمی قضیه چیه .

      در کل برای هر پروژه بهتره فایل بوت استرپ آخرین ورژنش رو از سایت بوت استرپ بگیری و تو فولدر public بزاری و استفاده کنی

  27. مهران says:

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

  28. سجاد says:

    با سلام
    قبل از هر چیز بابت آماده کردن این پکیج از تون تقدیر و تشکر میکنم.
    من از پکیج شما استفاده کردم و در درگاه بانک ملت هیچ مشکلی نداشتم. ولی الان که دارم اونو به پارسیان وصل میکنم با خطا مواجه شدم. من راحت به درگاه وصل میشم و عملیات انجام میدم ولی موقع برگشت از درگاه با صفحه خطای MethodNotAllowedHttpException in RouteCollection.php line 218: مواجه میشم. توی url وقتی نگاه میکنم میبینم که transaction_id و au مربوط به پارسیان از سمت بانک اومده ولی صفحه بازگشت مشکل داره. روت بازگشت را از حالت post به get تغییر دادم و حالا میتونم au را بگیرم ولی اینبار با خطای ***درگاهی برای تراکنش مورد نظر در سایت یافت نشد*** مواجه میشم و کلا عمل verify را نمیتونم انجام بدم.
    توی روت هم که اینجوری به پارسان وصل شدم: $gateway = Gateway::make(new Larabookir\Gateway\Parsian\Parsian());
    احیانا نباید جای دیگه هم اینکارو بکنم و به جای ملت پارسان بنویسم که شناسایی کنه. مساله اصلیتر اینه که نوع متد صفحه بازگشت باید از نوع get باشه یا post. برا بانک ملت روی همون post بود و مشکلی ایجاد نشد ولی پارسیان گیر میده. روی get هم میذارم میگه درگاهی یافت نشد.
    ممنون میشم راهنماییم کنید که چیکار کنم؟؟؟

  29. سجاد says:

    از مدیر سایت و سایر دوستان ممنون میشم که راهنماییم کنن اشکال درگاه پارسیان پس از برگشت از صفحه درگاه چیه که متد post را نمیشناسه و توی get هم خطای هم میگه درگاهی یافت نشد

  30. مقداد علی پور says:

    با تشکر از زحماتتون
    من موقع تعریف gateway ارور Class ‘SoapClient’ not found میگیرم !
    مشکل چیه ؟ لاراول ۵.۲ هم استفاده کنیم
    همچنین http://packalyst.com/packages/package/artisaninweb/laravel-soap هم تست کردم ولی با یک ارور دیگه مواجه شدم

  31. محمد says:

    با سلام
    وقتی catch نمایان میشه منظورم اینه که کد ما ایراد میده رو صفحه debug فریمورک ایراد میده
    MellatException in Mellat.php line 128:
    پذیرنده نامعتبر است #۲۱
    خب وقتی سایت اپلود میشه این قسمت رو false میکنیم
    نمیشه یه کاریش کرد بره رو صفحه callback ایراد رو نشون بده ؟
    این طوری باشه که خریدار نمیفهمه ایرادش چیه

  32. مهران says:

    سلام من سایت خودم را با لاراول نوشتم و با درگاه زرین پال (با نمونه کد استفاده از وب سرویس نوشته شده به زبان PHP )به بانک متصل شدم بعد از خرید وجه به حسابم واریز می شود ولی نمی دونم چطوری کاربر را بعد از پرداخت به صفحه تایید پرداخت هدایت کنم تا شماره و تراکنش پرداخت که درگاه پرداخت میدهد از url گرفته و به کاربر نشون بدم همچنین تو پایگام ذخیره کنم ممنون میشم راهنمایم کنید.

  33. محمدرضا says:

    سلام خسته نباشید
    من میخاستم ارور ها رو در یک blade نشون بدم
    کدها callback رو به این تعغیر دادم ولی مشکل داره؟
    کد های من مشکل داره؟
    try {
    $gateway = Gateway::verify();
    $trackingCode = $gateway->trackingCode();
    $refId = $gateway->refId();
    $cardNumber = $gateway->cardNumber();
    Helpers::generate_app_code(Transaction);
    $data=”موفق”;

    }
    catch (RetryException $e)
    {
    $data=$e->getMessage();
    }
    catch (PortNotFoundException $e)
    {
    $data= $e->getMessage();
    }
    catch (InvalidRequestException $e)
    {
    $data= $e->getMessage();
    }
    catch (NotFoundTransactionException $e)
    {
    $data= $e->getMessage();
    }
    catch (Exception $e)
    {
    $data= $e->getMessage();
    }
    return view(‘callback.callback’,[‘data’=>$data]);
    (تشکر بابت سایت خوبتون )

  34. maryam says:

    سلام ممنون از توضیحات عالی تون
    من موقع تعریف gateway ارور Class ‘SoapClient’ not found میگیرم !
    لطفا راهنمایی م کنین.
    لاراول هم ۵٫۲ است

  35. حسین says:

    سلام و عرض خسته نباشید
    دمتون گرم پکیج بسیار خوبی نوشتید ممنون بابت زحمتی که کشیدید

  36. maryam says:

    FatalErrorException in Mellat.php line 114: Class ‘SoapClient’ not found

  37. امیر says:

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

  38. هاشم says:

    با سلام
    خسته نباشید
    ببخشید من از پکیج تون خواستم استفاده کنم از بخش زرین پال که با خطای “کد مرچنت یا ای پی اشتباه می باشد ” برخورد می کنم در حالی که کد رو چک کردم درست بود و ای پی هم اصلا محدودیتی روش نزاشتم و بدون محدودیت هستش
    می خواستم ببینم مشکل من چیه؟

  39. محمد says:

    با سلام
    این پکیج از لحاظ عملی تست شده ؟ منظور روی سایتی قرار گرفته باشه و استفاده کرده باشن و ایراد نداشته باشه
    ——–
    وقتی از بانک تموم شدیم بانک یه post برامون ارسال میکنه اون اطلاعات شامل چه مواردی میشه ؟
    یکی از راه های هک فروشگاه اینه کاربر بیاد موقع فرستادن قیمت به بانک ۱۰ هزار رو یکنه ۱ تومن و در این حالت تو دیتابیس ما ۱۰ هزار درج خواهد شد ولی ۱ هزار واریز شده
    بانک باید مقدار واریزی رو برا ما بفرسته تا در صورت برابر بودن با قیمت اولیه خرید موفقیت امیز اعلام بشه

  40. علی says:

    سلام، ببخشید آقای پاکدامن، بنده چند تا سوال داشتم، ممنون می شم پاسخ بدید :
    ۱٫ بنده می خوام تست کنم درگاه پرداخت رو، وقتی در کد اول وقتی از Get استفاده می کنم، ارور می ده NotAllowedException، البته دارم یک مقدار رو هم ارسال می کنم، به خاطر همون از Post وقتی استفاده می کنم، درست می شه، مشکلی نداره ؟
    ۲٫ بنده از زرین پال استفاده می کنم، به من گفتن باید از آدرس زیر برای SandBox استفاده کنی، این رو به جای اون دو تا آدرس callback/from/bank استفاده کنم ؟ تشکر از شما …

  41. محمد says:

    سلام آقا پاکدامن، بنده به درستی نصب کردم پکیج شما رو و وقتی برای تست وارد بخش SandBox می شم، دو تا دکمه موفق و ناموفق داره برای تست درگاه …
    روی هر کدوم که کلیک می کنم یک فایل XML نشون می ده … همین …
    در حالی که قیمت و توضیحات کاملا درست هستند …
    مشکل از کجاست ؟

  42. قاسم says:

    سلام
    من توی لکال هاست جواب میگیرم ولی توی سرور خطای HTTP ERROR 500 بهم میده ! همون کد ها و همون فایل ها و تنظیمات !
    لاراول ۵٫۳ با پی اچ پی ۵٫۶ و سرور هم سنتوس ۷ هست !
    خطا از چی میتونه باشه ؟

    • قاسم says:

      echo “hi”;
      $gateway = Gateway::zarinpal();
      $gateway->setCallback(url(‘qasem/payment’));
      $gateway->price(1000)->ready();
      $refId = $gateway->refId();
      $transID = $gateway->transactionId();
      echo $gateway->transactionId();
      این کد در لکال (لاراول ۵٫۲) transactionId رو چاپ میکنه ولی در سرور (لاراول ۵٫۳) خالیه صفحه !
      ممنون . راهنمایی لطفاً ! از چی میتونه باشه ؟ 🙁

    • قاسم says:

      یه چیز دیگه
      echo “hi”;
      $gateway = Gateway::zarinpal();
      $gateway->setCallback(url(‘qasem/payment’));
      echo “hi”;
      توی این چهار خط کد ، hi دوم چاپ نمیشه !
      try catch هم نمیتونم استفاده کنم چون خطای HTTP ERROR 500 میاد !
      واقعاً نمیدونم چه اتفاقی داره میفته !

    • قاسم says:

      ببخشید بازم کامنت گذاشتم ، مشکل try catch رو حل کردم ولی همچنان مشکل اول پا برجاست 🙁

    • قاسم says:

      یه سرور دیگه داشتم با لاراول ۵٫۲ و php 5.6 . اون مشکل نداره ! پس هر چی هست ایراد از ناخوانایی با لاراول ۵٫۳ هست ! لطفاً رسیدگی کنید و خبرشو بدید . ممنون . دیگه واقعاً زیاد کامنت گذاشتم 😐 😀

  43. فرهاد says:

    سلام، من این پک و روی لاراول ۵.۳ نصب کردم، تنظیمات انجام دادم، اما

    General error: 1364 Field ‘ref_id’ doesn’t have a default value (SQL: insert into gateway_transactions (id, port, price, status, ip, created_at, updated_at) values (1476898484, MELLAT, 1000, INIT, 151.177.65.157, 2016-10-19 21:04:44, 2016-10-19 21:04:44))

    این ارور رو دارم

  44. میلاد says:

    سلام درگاهتون عالیه
    فقط من میخام چنتا فیلده دیگه تو جدولم تزریق کنم مثل user_id کجا باید اینکارو بکنم؟

  45. فرشاد says:

    خیلی هم عالی، مرسی و خسته نباشید ♥

  46. میلاد says:

    سلام جناب حامد پاکدامن
    خواستم از شما تشکر کنم که وقت خودتون برای کمک به سایر دوستان برنامه نویس می گذارید و چند روز کار برنامه نویسی را با یک پست عالی به چند ساعت تبدیل می کنید.
    ای کاش تمام دوستان برنامه نویس به این سطح برسند که اشتراک گذاری آموزش برنامه نویسی و پکیج های عمومی باعث عقب افتادگی نمی شود بلکه باعث رشد و اعتلای شخص برنامه نویس شده همین طور که در بخش مشکلات githup و کامنت های این پست مشاهده می کنید چند باگ وجود داشت که شاید تمامی این ها در صورت عدم اشتراک گذاری پیدا نمی شد.
    باز هم شخص شما تشکر می کنم و انشااله همیشه موفق باشید.

  47. کورش صادقی طهران says:

    درود بر شما. از شما بسیار ممنونم که زحمت کشیدید و چنین بسته پر کاربردی را در دسترس ما قرار دادید. دوچار مشکلی در استفاده از این بسته شده ام که اینجا عرض میکنم :
    ۱ – در فایل کانفیگ اطلاعات مربوط به زرین پال به قرار زیر است:
    ‘zarinpal’ => [
    ‘merchant-id’ => ‘xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx’,
    ‘type’ => ‘zarin-gate’, // Types: [zarin-gate || normal]
    ‘callback-url’ => ‘/home’,
    ‘server’ => ‘germany’, // Servers: [germany || iran || test]
    ’email’ => ‘xxxxx@gmail.com’,
    ‘mobile’ => ‘123456789’,
    ‘description’ => ‘description’,
    ],
    آیا نباید جایی برای ورود آی دی و پسورد آن حساب هم وجود داشته باشد؟

    ۲ – من در حال ساخت و تست وب سایت خود هستم و این تست تا به حال در local host صورت گرفته است. حالا پیام خطایی به شرح زیردریافت میکنم:
    SQLSTATE[HY000]: General error: 1364 Field ‘ref_id’ doesn’t have a default value (SQL: insert into gateway_transactions (id, port, price, status, ip, created_at, updated_at) values (1478162642, ZARINPAL, 3000, INIT, 127.0.0.1, 2016-11-03 12:14:02, 2016-11-03 12:14:02))
    آیا دلیل این خطا همین است که عملیات از طریق یک وب سایت آنلاین صرت نمیگیرد؟ آیا راهی برای انجام تست از طریق لوکال هاست برای من وجود دارد؟
    صمیمانه از شما سپاسگذارم.

  48. مرتضی says:

    سلام وقت بخیر
    از شما بابت این بسته با ارزش تشکر میکنم
    میخواستم از شما بپرسم چطور میشه مکانیزمی همانند نماد الکترونیکی طراحی کرد؟
    من برای سایت های عضو معتبر نیاز به صدور نماد دارم ولی عملکردش رو نمیدونم چگونه باید طراحی کرد
    من route به نام -verified طراحی کردم نمیدونم چطوری میشه از وبسایت عضو این route رو خوند با استفاده از

    ممنون میشم اگه سوالمو پاسخ بدید

  49. کورش صادقی طهران says:

    سلام مجدد ،
    آیا امکان استفاده از این افزونه تحت شرایط لوکال هاست هم وجود دارد؟ اگر بله مقادیر فایلهای کانفیگ یا روتر برای config شدن باید چه باشد؟ آدرس بار بنده فقط مقدار رو به رو را برگشت میدهد :
    http://localhost/PaymentSuccessfulController?transaction_id=1478690760&_token=xzr6KVQ5NJWjLNtvxAKS44Jad3ciOQwN5KeEHiIL&Authority=000000000000000000000000000027760208&Status=OK
    برای اینکه درست کار کند باید به پورت ۸۰۰۰ رجعت کند که نمیکند.
    در فایل config/gateway.php آورده ام:
    ‘callback-url’ => ‘http://localhost:8000/PaymentSuccessfulController’,
    همین مقادیر را در web.php هم آورده ام !
    جالب این جاست که پس از redirect باید localhost:8000 را دستی وارد کنم تا کار کند !!!!!!

  50. محمد says:

    با سلام
    خواستم ببینم ایا این پکیچ روی لوکال هم کار میکنه؟
    چون من روی لوکال تست کردم ارور میده

    $gateway = \Gateway::Zarinpal();
    $gateway->setCallback(url(“callback/from/bank/$order->product_key”));
    $gateway->price($total)->ready();
    $refId = $gateway->refId();
    $transID = $gateway->transactionId();

    return $gateway->redirect();

    اینم کدم.

  51. مرتضی says:

    با سلام
    من میخوام با ایجکس درخواست بررسی رو بفرستم اگه موفقیت آمیز بود ریدایرکت کنه به زرین پال
    اما متاسفانه $gateway->redirect() رو که میزنم بهم لینک ریدایرکت رو بر نمی گردونه
    ممنون میشم در این مورد کمکم کنید

  52. نازنین says:

    عالیههههههه هرچه قدر تشکر کنم بابت این پکیج کمه

  53. سعید says:

    سلام ، مهندس قدر خودت رو بدون مثل شما کم پیدا میشه !
    دستت درد نکنه عالی بود

  54. مهران says:

    سلام اقا حامد
    هنگام ریکوییست به زرین پال FatalThrowableError in Zarinpal.php line 182:
    Class ‘SoapClient’ not found این ارور رو میده؟؟؟

  55. آرمان says:

    با سلام خدمت آقای پاکدامن
    آقای پاکدامن آیا اینکه با متد get به بانک ریدایرکت کنیم خطرناک نیست؟
    با این روش هکز میتونه حمله csrf داشته باشه. نظر شما چیه؟

  56. حسن لطفی says:

    سلام خسته نباشی مهندس
    Cannot use isset() on the result of an expression (you can use “null !== expression” instead) in C:\xampp2\htdocs\index.php on line 2 به این ارور خوردم تو سایتم زمان برگشت از درگاه میشه راهنماییم کنی

  57. حسن لطفی says:

    ببخشید مهندس الان داشتم چک میرکدم دیتا بیسمو متوجه شدم ک فیلد های tracking_code و status رو مقدارشونو null ثبت میکنه درس هس یا ن ؟ اگه ن مشکل چیه و راه حلش اگه بهم بگین مهندس با تشکر

  58. masoud says:

    سلام من فیلد orderid بانک ملت رو میخوام چون ارور ۴۲۱ گرفتم ( آیپی نامعتبر ) حالا بانک میگه orderid به ما بگو تو این کد فکر نمیکنم orderid ذخیره کنید درسته ؟

  59. حمید says:

    آیا با توجه به اینکه استفاده از تایپ enum در جداول مشکلات زیادی در نگهداری و توسعه به دنبال دارد بهتر نبود از همان tinyint(2 استفاده می کردید.

  60. مه پاش says:

    ممنونم بابت مطالب مفیدی که قرار میدید!

  61. حسام says:

    باسلام و خسته نباشید خدمت شما دوستان عزیز که زحمت توسعه این پکیج رو کشیدید و از شما سپاس گذار هستم
    ولی من برا نصب این پکیج روی لاراول ۵.۳ مشکل دارم من طبق مراحل جلو رفتم ولی بعد از نصب وقتی کامند
    php artisan vendor:publish –provider=Larabookir\Gateway\GatewayServiceProvider
    پیغام Nothing to publish for tag []. ظاهر میشه پکیج رو چندین بار پاک کردم از اول زدم ولی باز هم همون هست
    توی کامنت ها یک راهی برای دوستمون گفته بودید که همین مشکلو داشت اونم رفتم و متغییری که گفته بودید false باید باشه false بود
    و اون مراحل رو هم رفتم ولی باز جوابی نگرفتم ممنون میشم راهنمایی کنید چون نیاز دارم بهش ممنون

  62. ارسلان says:

    سلام و خسته نباشید یه مشکلی که بنده پیدا کردم تو برگشت هست یعنی وقتی به صفحه کال بک برمیگرده خطای ۴۰۴ میده و به صفحه ملت لاین ۱۵۴ ایراد میگیره
    throw new MellatException($payRequestResCode);
    اگه میشه به بنده ایمیل بزنید ممنون میشم

Leave a Reply

Your email address will not be published. Required fields are marked *

*