Compare commits

..

2 Commits

Author SHA1 Message Date
khwezi 2ed15b548f Merge pull request 'Refactored PayfastService.GenerateSignature()' (#104) from payments into master
Reviewed-on: #104
2026-06-12 23:27:21 +02:00
Khwezi Mngoma 7d2bc7f1f2 Refactored PayfastService.GenerateSignature()
continuous-integration/drone/pr Build is passing
2026-06-12 23:26:54 +02:00
@@ -157,9 +157,11 @@ public sealed partial class PayfastService(IDbContextFactory<MidrandBooksDbConte
string key = kvp.Key;
string encodedVal = Uri.EscapeDataString(kvp.Value.Trim());
// 1. Payfast requires spaces to be '+' signs. HttpUtility does this perfectly.
string encodedVal = HttpUtility.UrlEncode(kvp.Value.Trim());
string val = PercentEncodingRegex.Replace(encodedVal, m => m.Value.ToLowerInvariant());
// 2. Payfast requires all OTHER percent-encoded hex arrays to be UPPERCASE (e.g., %3A instead of %3a)
string val = Regex.Replace(encodedVal, "%[0-9A-Fa-f]{2}", m => m.Value.ToUpperInvariant());
pfOutput.Append($"{key}={val}&");
}
@@ -170,8 +172,9 @@ public sealed partial class PayfastService(IDbContextFactory<MidrandBooksDbConte
if (!string.IsNullOrWhiteSpace(passPhrase))
{
string encodedPassphrase = Uri.EscapeDataString(passPhrase.Trim());
string safePassphrase = PercentEncodingRegex.Replace(encodedPassphrase, m => m.Value.ToLowerInvariant());
// Apply the exact same encoding rule to your passphrase
string encodedPassphrase = HttpUtility.UrlEncode(passPhrase.Trim());
string safePassphrase = Regex.Replace(encodedPassphrase, "%[0-9A-Fa-f]{2}", m => m.Value.ToUpperInvariant());
getString += $"&passphrase={safePassphrase}";
}