نوید
5 سال پیش توسط نوید مطرح شد
34 پاسخ

مشکل در پرداخت با shetabit

سلام
اپ روی لوکال کار میکنه و پرداخت انجام میشه ، فایلها رومنتقل میکنم به سرور این پیغام رو میده

Shetabit \ Payment \ Exceptions \ DriverNotFoundException
Driver not selected or default driver does not exist.

درایور : زرین پال

@khanzadimahdi
@hesammousavi
@ali.bayat
@Alimotreb


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

@mehrdadhosseinzadeh

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

تو verify پرداخت
من مبلغ و عوض کردم با چیزی که تو بانک پرداخت کردم اما هیچ عکسلعملی نشون نداد !

پاسخ من:

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

سوال اخر :
من با دستور config مقادیر ترمینال و غیره و به صورت داینامیک دادم
و اگر اشتباه بدم xception میده که نمیدونم چجوری باید هندلش کنم و بتونم به کاربر خطا بدم بجای ارور تو برنامه !

پاسخ من:
اون exception یک تایپ داره که میتونید اون رو با try catch بگیرید و پیام مناسب نشون بدید. همچنین میتونید متد getMessage رو روی exception اجرا کنید تا پیام مناسب رو دریافت کنید.

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

این پکیج هیچ کاری رو پیچیده تر نکرده! تنها کاری که کرده یک استاندارد کلی ارائه داده واسه تمامی درگاه ها. شما دیگه نیاز نیست واسه هر درگاهی یه مدل کد جداگانه بنویسی! یکبار کد مینویسی و باهاش میتونی به تمام درگاه های بانکی وصل بشی. اگه درگاه جدیدی هم بیاد میشه اونو پیاده سازی کرد و به صورت درایور به پکیج اظافه کرد و نیاز نیست شما کدتو تغییر بدی.

موفق باشید.


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

@khanzadimahdi
سلام درگاه من روی sandbox درست کار میکنه کامل ولی وقتی روی zaringate میزارمش موقع برگشت از درگاه این خطا رو میده:

Shetabit\Multipay\Exceptions\InvalidPaymentException: درخواست مورد نظر آرشيو شده است in

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

 $receipt = Payment::amount(Session::get('cost'))->transactionId(Session::get('transactionId'))->verify();

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

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

و اینکه کلا پیشنهاد میدم از زرین پال استفاده نکنید. اخیرا خیلی شکننده شده و جوابگو نیستن. به شخصه یه درگاه پرداخت داشتم که 6 ماه کار میکرد یکهو از کار افتاد! تیکت زدم گفتن اون api رو گذاشتیم کنار از فلان api استفاده کن! کلا معلوم نیست چیکار میکنن!


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

@khanzadimahdi
اره منم بعده کلی تیکت زدن بهشون اخر به یه کد php خام رسیدم و اون الان اکی هست تقریبا
واقعا جدیدا اذیت کننده شده زرینپال
یه سوالی داشتم ازتون اینکه من یه سری مقادیر برای پرداخت رو با سشن پاس میدم مثل هزینه توی کد بالا که گذاشتم، با سشن پاس دادن از نظر امنیتی مشکلی به وجود میاره؟؟


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

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


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

@miladparsi1070

اگه مشکل رو تونستید حل کنید روی پکیج هم pull request بدید خیلی عالی میشه. تا بقیه دوستان هم بتونن استفاده کنن.


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

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

 $data = array("merchant_id" => $merchant_id,
            "amount" => $cost,
            "callback_url" => url("admin/sms/callback"),
            "description" => $setting->brand_name,
            "metadata" => ["mobile" => Auth::user()->phone],
        );
        $jsonData = json_encode($data);
        $ch = curl_init('https://api.zarinpal.com/pg/v4/payment/request.json');
        curl_setopt($ch, CURLOPT_USERAGENT, 'ZarinPal Rest Api v1');
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
        curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json',
            'Content-Length: ' . strlen($jsonData)
        ));

        $result = curl_exec($ch);
        $err = curl_error($ch);
        $result = json_decode($result, true, JSON_PRETTY_PRINT);
        curl_close($ch);

        if ($err) {
            echo "cURL Error #:" . $err;
        } else {
            if (empty($result['errors'])) {
                if ($result['data']['code'] == 100) {

                    return Redirect::to("https://www.zarinpal.com/pg/StartPay/" . $result['data']["authority"]);
                   // header('Location: https://www.zarinpal.com/pg/StartPay/' . $result['data']["authority"]);
                }
            } else {
                echo 'Error Code: ' . $result['errors']['code'];
                echo 'message: ' . $result['errors']['message'];

            }
        }

کالبک:

$Authority = $_GET['Authority'];
        $data = array("merchant_id" => $merchant_id, "authority" => $Authority, "amount" => Session::get('sms_payment_cost'));
        $jsonData = json_encode($data);
        $ch = curl_init('https://api.zarinpal.com/pg/v4/payment/verify.json');
        curl_setopt($ch, CURLOPT_USERAGENT, 'ZarinPal Rest Api v4');
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
        curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json',
            'Content-Length: ' . strlen($jsonData)
        ));

        $result = curl_exec($ch);
        curl_close($ch);
        $result = json_decode($result, true);

        if (isset($result['errors']['code'])) {
               echo 'code: ' . $result['errors']['code'];
             echo 'message: ' . $result['errors']['message'];
        }

       if (isset($result['data']['code']) &&  $result['data']['code']== 100) {

            $referenceId = $result['data']['ref_id'];

            return Redirect::to('/admin/dashboard')->with('success', 'عملیات با موفقیت انجام شد.');
}

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

@miladparsi1070 سلام اگه میشه در مورد فانکشن کالبک بیشتر توضیح بدید کجا عملیات ها مثل تغییر وضعیت صورتحساب به پرداخت شده رو انجام میدید؟

@khanzadimahdi من جدید در پکیج شتابت وقتی میخواهم با زرین پال پرداخت کنم در زمان برگشتش مقدار 3 رو بر میگردونه وعملیات انجام نمیشه


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

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


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

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


Meysam Sarmad
تخصص : فریلنسر
@meysam.ssarmadd 2 سال پیش آپدیت شد
0

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

"name": "shetabit/multipay",
"version": "v1.16.0",
"source": {
"type": "git",
"url": "https://github.com/shetabit/multipay.git",
"reference": "8b9470a616cf1b3a8f1745795335200ad4f39592"
},

و

"require": {
"illuminate/broadcasting": "^5.0|^6.0|^7.0|^8.0|^9.0",
"illuminate/support": "^5.0|^6.0|^7.0|^8.0|^9.0",
"php": ">=7.2",
"shetabit/multipay": "^1.0"
},

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

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

$invoice = new Invoice;
$invoice->amount(1000);
$resultpay = Payment::purchase($invoice, function ($driver, $transactionId) {})
->pay()->toJson();

و کدی که قراره درخواست وریفای انجام بشه:

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

$transaction = \DB::table('transaction')
->where('transaction_id', $request->transaction_id)
->first();

try {
$receipt = Payment::amount(1000)->transactionId($transaction->transaction_id)->verify();
$result = $receipt->getReferenceId();
} catch (InvalidPaymentException $exception) {
$result = $exception->getMessage();
}
return $result;

@khanzadimahdi
@hesammousavi


Meysam Sarmad
تخصص : فریلنسر
@meysam.ssarmadd 2 سال پیش مطرح شد
0

سلام دوباره
10 روز گذشته کسی نیست جواب بده 🙁 خیلی فوریه بیزحمت راهنمایی کنید
@khanzadimahdi
@hesammousavi


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

@meysam.ssarmadd سلام. درگاه زرین پال تغییر کرده و من درایورش رو اپدیت کردم. لطفا پکیج رو اپدیت کنید و مشکل شما حل میشه.
پکیج multipay رو به اخرین ورژن اپدیت کنید.


Meysam Sarmad
تخصص : فریلنسر
@meysam.ssarmadd 2 سال پیش آپدیت شد
1

ممنون از پاسخگویی


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

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