shetabit / payment

simple laravel payment package , supports multiple drivers

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

خطای لغو توسط کاربر

rabcoir opened this issue · comments

سلام
من از آخرین ورژنن پکیج استفاده میکنم توی لاراول و همچنین آخرین ورژن لاراول اما زمان وریفای تراکنش به خطای لغو توسط کاربر میخورم قبلا هم ظاهرا برخی دوستان چنین مشکلی رو داشتن راه حل این موضوع رو ممنون میشم بفرمایید و یا آگر ایراد از پکیج برطرف بفرمایید
ممنون

منم همین خطا را دارم
transactionIdهم چک میکنم کاملا درسته ولی خطا میده

سلام. از کدوم حالت درگاه استفاده میکنید؟

سه حالت زرین گیت + سندباکس و نرمال داره

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

https://github.com/shetabit/multipay/tree/master/src/Drivers/Zarinpal/Strategies

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

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

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

namespace App\Http\Controllers;

use App\Models\payment;
use App\Models\Product;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use Shetabit\Multipay\Invoice;
use Shetabit\Payment\Facade\Payment as ShetabitPayment;
use Shetabit\Multipay\Exceptions\InvalidPaymentException;


class PaymentController extends Controller
{
    public function callback(Request $request)
    {
        try {
            $payment = payment::where('transactionId', $request->clientrefid)->firstOrFail();
            $receipt  = ShetabitPayment::amount($payment->amount)->transactionId($request->clientrefid)->verify();
            $payment->update([
                'status' => 'paid',
                'ReferenceId' => $receipt->getReferenceId(),
            ]);
            Session::flash('successPay', 'پرداخت انجام شد');
            Session::flash('product_id_pay', $payment->id);
            return redirect()->route('successPay')->with('success', 'پرداخت شما با موفقیت انجام شد.');
        } catch (InvalidPaymentException $exception) {
            $payment->update([
                'error' => $exception->getMessage(),
            ]);
            return redirect()->route('orders.user')->with('error', 'خطا در پرداخت');
        }
    }

    public function productBuy(Request $request, Product $product)
    {
        $request->validate([
            'payment_gate' => ['required'],
        ]);
        $driverConfig = $request['payment_gate'];
        $amount = ($product->price * config()->get('services.tax')) * (1 + config()->get('services.profit') / 100);
        settype($amount, 'int');
        $invoice = (new Invoice)->amount($amount);
        return ShetabitPayment::via($driverConfig)->callbackUrl(route('payment.callback'))->purchase($invoice, function () use ($amount, $driverConfig, $product, $invoice) {
            payment::create([
                'user_id' => auth()->user()->id,
                'amount' => $amount,
                'transactionId' => $invoice->getUuid(),
                'ReferenceId' => null,
                'error' => null,
                'driver' => $driverConfig,
                'product_id' => $product->id,
                'status' => 'unpaid',
            ]);
        })->pay()->render();
    }
}

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

یا باید از کانفیگ استفاده کنی و یا اگه درایور رو توی کد عوض میکنی باید همه جا اونو تغییر بدی

// using default driver according to config/payment.php
$receipt  = ShetabitPayment::amount($payment->amount)->transactionId($request->clientrefid)->verify();
        
// changing driver on the fly
return ShetabitPayment::via($driverConfig)->callbackUrl(route('payment.callback'))->purchase($invoice, function () use ($amount, $driverConfig, $product, $invoice) {

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

اگه از متد via استفاده میکنی همه جا باید با via کار کنی و کدت باید چیزی شبیه زیر بشه

// using via to set driver on the fly
$receipt  = ShetabitPayment::via($driverConfig)->amount($payment->amount)->transactionId($request->clientrefid)->verify();
        
// using via to set driver on the fly
return ShetabitPayment::via($driverConfig)->callbackUrl(route('payment.callback'))->purchase($invoice, function () use ($amount, $driverConfig, $product, $invoice) {

@rabcoir @boobProgrammer

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

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

commented

مشکلی که من با زرین پال دارم اینه که ۲ یا ۳ تا کاراکتر آخر authority رو توی دیتابیس ذخیره نمیکنه . مشخص نیست دلیلش چیه