Closed zamani3270 closed 1 week ago
درود مشکل از پیاده سازی custom storage شما هست و باید ببینید مشکل کجاست. در صورت تمایل میتونید کدهای پیاده سازی رو اینجا قرار بدید تا نگاهی بندازم
سلام خیلی ممنونم var parbadBuilder = ParbadBuilder.CreateDefaultBuilder();
parbadBuilder.ConfigureGateways(gateways =>
{
gateways.AddMellat().WithAccounts(source => source.Add
}).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);
که خط اول خطا میده که با توکن موردی پیدا نشد در حالیکه توکن توی دیتابیس هست
درود شما هر ۲ پراپرتی Payments و Transactions رو برابر با یک لیست خالی قرار دادید. این مقادیر باید از پایگاه داده گرفته بشه
خیلی ممنونم درست شد
فقط یه مورد دیگه اینکه الان دارم درگاه تستی رو چک میکنم و خروجی status مربوط به متد Fetch Faild برمیگرده چطور میتونم state درستش رو تست کنم؟
لطفا نمونه پروژه ها رو مشاهده کنید و ببینید مشکل کار کجاست
سلام وقتتون بخیر من موقع استفاده از متد FetchAsync با Token خطا دریافت میکنم: No invoice found with the token f9e3784541634fd89d854db3743f2e0a در حالیکه این توکن در جدول payment وجود داره در ضمن از customStorage استفاده کردم و موقع RequestAsync به درستی در جدول Payment ذخیره رو انجام میده.
ممنون میشم راهنمایی کنید