Added payment gateway ledger service to payments feature
This commit is contained in:
@@ -1,13 +1,9 @@
|
||||
using LiteCharms.Features.Abstractions;
|
||||
using LiteCharms.Features.Hasher.Configuration;
|
||||
using LiteCharms.Features.Models;
|
||||
|
||||
namespace LiteCharms.Features.Hasher;
|
||||
|
||||
public sealed partial class HashService(IHashids hasher, IOptions<HasherSettings> options) : IService
|
||||
public sealed partial class HashService(IHashids hasher) : IService
|
||||
{
|
||||
private readonly HasherSettings settings = options.Value;
|
||||
|
||||
[GeneratedRegex(@"\A\b[0-9a-fA-F]+\b\Z")]
|
||||
private static partial Regex HexHashRegex { get; }
|
||||
|
||||
@@ -41,44 +37,6 @@ public sealed partial class HashService(IHashids hasher, IOptions<HasherSettings
|
||||
return Result.Ok(Convert.ToHexString(bytes).ToLowerInvariant());
|
||||
}
|
||||
|
||||
public Result<bool> VerifyPayfastWebhookSignature(PayfastWebhookPayload payload, string incomingSignature)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(incomingSignature))
|
||||
return Result.Fail<bool>("Validation failed: Missing signature string parameter.");
|
||||
|
||||
var parameters = new List<string>();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(payload.Amount))
|
||||
parameters.Add($"amount={WebUtility.UrlEncode(payload.Amount)}");
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(payload.ItemName))
|
||||
parameters.Add($"item_name={WebUtility.UrlEncode(payload.ItemName)}");
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(payload.MPaymentId))
|
||||
parameters.Add($"m_payment_id={WebUtility.UrlEncode(payload.MPaymentId)}");
|
||||
|
||||
string signatureString = string.Join("&", parameters);
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(settings.PayfastPassphrase))
|
||||
signatureString += $"&passphrase={WebUtility.UrlEncode(settings.PayfastPassphrase)}";
|
||||
|
||||
var localHashResult = ToMd5Hash(signatureString);
|
||||
|
||||
if (!localHashResult.IsSuccess)
|
||||
return Result.Fail<bool>(localHashResult.Errors);
|
||||
|
||||
bool isValid = string.Equals(localHashResult.Value, incomingSignature, StringComparison.OrdinalIgnoreCase);
|
||||
|
||||
return Result.Ok(isValid);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return Result.Fail<bool>(new Error("An error occurred during Payfast MD5 verification.").CausedBy(ex));
|
||||
}
|
||||
}
|
||||
|
||||
public Result<string> HashEncodeHex(string input) => string.IsNullOrWhiteSpace(input) || !HexHashRegex.IsMatch(input)
|
||||
? Result.Fail<string>("Input must be a valid hexadecimal string.")
|
||||
: Result.Ok(hasher.EncodeHex(input));
|
||||
|
||||
Reference in New Issue
Block a user