Sina-Soltani / Parbad

A free, open-source, integrated and extensible library which connects your web applications to online payment gateways. Gateways can be added or developed by you.
GNU Lesser General Public License v3.0
378 stars 83 forks source link

دریافت خطا An unknown error is happened #117

Closed samiyariceboy closed 4 years ago

samiyariceboy commented 4 years ago

Bug description (wIthout specifiing the sensitive data) با عرض سلام و وقت بخیر من در حال تست درگاه زرین پال بودم که بعد از تعدادی درخواست، روی لوکال، هر درخواستی که ارسال میکردم خطای ناشناخته پرتاب میکرد و درگاه رو نمیساخت اگر لطف کنید بفرمایین مشکل از کجاست، ممنون میشم

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

حتی ایپی لوکال رو هم پروکسی کردم که شاید درست بشه ، دیدم باز همون اررور رو میده

پرسو جو کردم ظاهرا هم درگاه من رو محدود نکردن و روی لوکال اجازه درخواست دارم

Package name and version نام و نسخه پکیج

Web application type: نوع برنامه وب

Sina-Soltani commented 4 years ago

درود

در کدوم مرحله شما خطا دریافت میکنید؟ Request? Verify?

یعنی روی سرور درست کار میکنه و مشکل فقط روی لوکاله؟

samiyariceboy commented 4 years ago

تو زمان request این مشکل رخ میده بله روی لوکال هست فقط یعنی یک نسخه ک رو سرور داره کار می‌کنه این اررور رو دریافت نمیکنه روی لوکال فرداش برای دولوپ باز کردم پروژه رو دیدم داره اررور خطای ناشناخته میده

Sina-Soltani commented 4 years ago

تا جایی که اطلاع دارم روی لوکال نمیشه اکانت واقعی رو تست کرد و باید حتما در قسمت تنظیمات گزینه IsSandbox رو فعال کنید همین الان روی لوکال تست شد و بدون مشکل انجام شد ZarinPalTest

لطفا کد تنظیمات و همچنین کد پرداخت رو قرار بدید تا بررسی کنیم (بدون ذکر اطلاعات خصوصی)

samiyariceboy commented 4 years ago

چرا اتفاقا من تست میکردم و مشکلی نمیخوردم تا دیروز

` [HttpPost] [ActionInfo("ثبت و ساخت درگاه پرداخت")] public virtual async Task Pay(PaymentDto paymentDto, CancellationToken cancellationToken) { IPaymentRequestResult result = await _mediator.Send(new PaymentCreatePaymentCommandRequest(paymentDto, User.Identity.GetLongTypeUserId())); return result.GatewayTransporter.TransportToGateway(); }

public async Task<IPaymentRequestResult> Handle(PaymentCreatePaymentCommandRequest     request, CancellationToken cancellationToken)
    {
        string verifyUrl = $"{_siteSettings.domainSetting.SiteDomin}/v1/Payment/Verify";
        Entities.Pay.ApplicationPayment payment = new Entities.Pay.ApplicationPayment
        {
            PaymentPort = request.PaymentDto.PaymentPort,
            UserId = request.UserId,
            Amount = new Asset(request.PaymentDto.Amount),
            CallBackPaymentUrl = request.PaymentDto.CallBackPaymentUrl,
            PaymentStatus = PaymentStatusCode.Paying,
            CreateDate = DateTime.Now,
            LastUpdateDate = DateTime.Now,
        };

        //استراتژی پترن
        IPaymentHandler _paymentHandler = new PaymentHandler(_paymentList);
        IPaymentRequestResult result = await _paymentHandler.ProccessPaymentResult(payment, verifyUrl, cancellationToken);

        payment.PayId = result.TrackingNumber.ToString();
        if (!result.IsSucceed)
            throw new AppException(ApiResultStatusCode.Forbidden, "مشکلی در فرایند پرداخت شما رخ داده است!");
        await _paymentRepository.AddAsync(payment, cancellationToken);
        return result;
    }

///////////////////////////////////////////////////////////////////////////////////

public async Task<IPaymentRequestResult> ProccessPaymentRequest(Entities.Pay.ApplicationPayment payment, string verifyUrl, CancellationToken cancellationToken)
    {
        if (payment.PaymentPort.Equals(PaymentPorts.ZarinPal))
        {
            IPaymentRequestResult result = await OnlinePayment.RequestAsync(invoice =>
            {
                invoice
                        .UseAutoRandomTrackingNumber()
                        .SetAmount(payment.Amount.Value)
                        .SetCallbackUrl(verifyUrl)
                        .UseZarinPal(SiteSettings.paymentSetting.zarinPalSetting.Description ?? "خوش آمدید");
            }, cancellationToken); 
            return result;
        }                                    
        return null;
    }

`

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

samiyariceboy commented 4 years ago

بله برای منم مشکلی نبود ولی نمیدونم چه قسمتی اشتباه شده کامیتی نزدم ! اصن میدونم چطور شده که جواب میداده و این الان این اررور میده

عکس اررور هم این هست http://s15.picofile.com/file/8407854476/3.png

Sina-Soltani commented 4 years ago

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

بنابراین بهتره با خود درگاه هماهنگ کنید هر چند که همونطور که گفتم من تست کردم و نتیجه رو در عکس میتونید مشاهده میکنید

لطفا نتیجه رو در میون بزارید.

samiyariceboy commented 4 years ago

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

یک سوال اینکه این isSendBox چه ضروریتی داره؟ کدی که الان رو سرور هست و داره جواب میده بدون اینکه این پارامتر فعال باشه داره درگاه رو در اختیار میذاره

میشه دلیلش رو بفرمایین ؟

Sina-Soltani commented 4 years ago

IsSandbox تنظیمی هست با فعال کردنش، عملیات پرداخت در محیط تستی صورت میگیره به جای محیط اصلی

در تصویری که ارسال کردم به آدرس مرورگر نگاه کنید

در هر صورت همونطور که گفتم محیط Sandbox محیط تستی از خود شرکت زرین پال هست و به این خاطر درستش کردن که شما روی لوکال بتونید تست هاتون رو انجام بدید بنابراین شما بهتره در برنامتون،‌ این پارامتر رو از توی appsettings بخونید و در تنظیمات زرین پال از اون استفاده کنید تا کد بدون نیاز به تغییر کار بکنه