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
371 stars 81 forks source link

خطا در متد Fetch #394

Closed zamani3270 closed 1 week ago

zamani3270 commented 1 month ago

سلام وقتتون بخیر من موقع استفاده از متد FetchAsync با Token خطا دریافت میکنم: No invoice found with the token f9e3784541634fd89d854db3743f2e0a در حالیکه این توکن در جدول payment وجود داره در ضمن از customStorage استفاده کردم و موقع RequestAsync به درستی در جدول Payment ذخیره رو انجام میده.

ممنون میشم راهنمایی کنید

Sina-Soltani commented 1 month ago

درود مشکل از پیاده سازی custom storage شما هست و باید ببینید مشکل کجاست. در صورت تمایل میتونید کدهای پیاده سازی رو اینجا قرار بدید تا نگاهی بندازم

zamani3270 commented 1 month ago

سلام خیلی ممنونم var parbadBuilder = ParbadBuilder.CreateDefaultBuilder();

parbadBuilder.ConfigureGateways(gateways => { gateways.AddMellat().WithAccounts(source => source.Add(ServiceLifetime.Transient)); gateways.AddParbadVirtual().WithOptions(options => options.GatewayPath = "/WriteAPathHere"); ; gateways.AddMelli(); gateways.AddZarinPal().WithAccounts(source => source.Add(ServiceLifetime.Transient));

}).ConfigureHttpContext(builder => builder.UseDefaultAspNetCore())
   .ConfigureStorage(builder => builder.AddStorage<ParbadRepository>(ServiceLifetime.Transient));

_builder.Populate(parbadBuilder.Services);

این هم ایمپلیمنت IStorage : public class ParbadRepository : IStorage { private readonly Models.PaymentDbContext _dbContext;

 public ParbadRepository(Models.PaymentDbContext dbContext)
 {
     _dbContext = dbContext;
 }

 public IQueryable<Parbad.Storage.Abstractions.Models.Payment> Payments => new List<Parbad.Storage.Abstractions.Models.Payment>().AsQueryable();

 public IQueryable<Parbad.Storage.Abstractions.Models.Transaction> Transactions => new List<Parbad.Storage.Abstractions.Models.Transaction>().AsQueryable();

 public async Task CreatePaymentAsync(Parbad.Storage.Abstractions.Models.Payment payment, CancellationToken cancellationToken = default)
 {
     Models.Payment paymentModel = new Models.Payment()
     {
         TrackingNumber = payment.TrackingNumber,
         Amount = payment.Amount,
         IsPaid = payment.IsPaid,
         Token = payment.Token,
         GatewayName = payment.GatewayName,
         IsCompleted = payment.IsCompleted,
     };

     paymentModel.Transactions.Add(new Models.Transaction() { Amount = payment.Amount });
     await _dbContext.Payments.AddAsync(paymentModel);
 }

 public async Task CreateTransactionAsync(Parbad.Storage.Abstractions.Models.Transaction transaction, CancellationToken cancellationToken = default)
 {

 }

 public Task DeletePaymentAsync(Parbad.Storage.Abstractions.Models.Payment payment, CancellationToken cancellationToken = default)
 {
     throw new NotImplementedException();
 }

 public Task DeleteTransactionAsync(Parbad.Storage.Abstractions.Models.Transaction transaction, CancellationToken cancellationToken = default)
 {
     throw new NotImplementedException();
 }

 public async Task UpdatePaymentAsync(Parbad.Storage.Abstractions.Models.Payment payment, CancellationToken cancellationToken = default)
 {
     await _dbContext.SaveChangesAsync();
 }

 public async Task UpdateTransactionAsync(Parbad.Storage.Abstractions.Models.Transaction transaction, CancellationToken cancellationToken = default)
 {
     await _dbContext.SaveChangesAsync();
 }

}

اینجا هم متد Verify:

var invoice = await _onlinePayment.FetchAsync();

if (invoice.Status != PaymentFetchResultStatus.ReadyForVerifying) { var isAlreadyVerified = invoice.IsAlreadyVerified; return false; }

var verifyResult = await _onlinePayment.VerifyAsync(invoice);

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

Sina-Soltani commented 1 month ago

درود شما هر ۲ پراپرتی Payments و Transactions رو برابر با یک لیست خالی قرار دادید. این مقادیر باید از پایگاه داده گرفته بشه

zamani3270 commented 1 month ago

خیلی ممنونم درست شد

فقط یه مورد دیگه اینکه الان دارم درگاه تستی رو چک میکنم و خروجی status مربوط به متد Fetch Faild برمیگرده چطور میتونم state درستش رو تست کنم؟

Sina-Soltani commented 1 month ago

لطفا نمونه پروژه ها رو مشاهده کنید و ببینید مشکل کار کجاست