From b038e1b6c1f739fd098ca3d5de786e6560ddc68b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Armando=20Rodr=C3=ADguez?=
<127134616+armando-rodriguez-cko@users.noreply.github.com>
Date: Fri, 20 Jun 2025 15:16:27 +0200
Subject: [PATCH] Add signature handling for dLocal API requests
---
.../Forward/Requests/DestinationRequest.cs | 7 +++++++
.../Requests/Signatures/AbstractSignature.cs | 13 +++++++++++++
.../Requests/Signatures/DlocalParameters.cs | 10 ++++++++++
.../Forward/Requests/Signatures/DlocalSignature.cs | 14 ++++++++++++++
.../Forward/Requests/Signatures/SignatureType.cs | 10 ++++++++++
5 files changed, 54 insertions(+)
create mode 100644 src/CheckoutSdk/Forward/Requests/Signatures/AbstractSignature.cs
create mode 100644 src/CheckoutSdk/Forward/Requests/Signatures/DlocalParameters.cs
create mode 100644 src/CheckoutSdk/Forward/Requests/Signatures/DlocalSignature.cs
create mode 100644 src/CheckoutSdk/Forward/Requests/Signatures/SignatureType.cs
diff --git a/src/CheckoutSdk/Forward/Requests/DestinationRequest.cs b/src/CheckoutSdk/Forward/Requests/DestinationRequest.cs
index 69cb5a2a..9d6ffd31 100644
--- a/src/CheckoutSdk/Forward/Requests/DestinationRequest.cs
+++ b/src/CheckoutSdk/Forward/Requests/DestinationRequest.cs
@@ -1,3 +1,5 @@
+using Checkout.Forward.Requests.Signatures;
+
namespace Checkout.Forward.Requests
{
public class DestinationRequest
@@ -17,5 +19,10 @@ public class DestinationRequest
/// payment instrument you specified. For example, {{card_number}} (Required, max 16384 characters)
///
public string Body { get; set; }
+
+ ///
+ /// Optional configuration to add a signature to the forwarded HTTP request (Optional).
+ ///
+ public AbstractSignature Signature { get; set; }
}
}
\ No newline at end of file
diff --git a/src/CheckoutSdk/Forward/Requests/Signatures/AbstractSignature.cs b/src/CheckoutSdk/Forward/Requests/Signatures/AbstractSignature.cs
new file mode 100644
index 00000000..59095eef
--- /dev/null
+++ b/src/CheckoutSdk/Forward/Requests/Signatures/AbstractSignature.cs
@@ -0,0 +1,13 @@
+namespace Checkout.Forward.Requests.Signatures
+{
+ public abstract class AbstractSignature
+ {
+ protected AbstractSignature(SignatureType type) { Type = type; }
+
+ ///
+ /// The identifier of the supported signature generation method or a specific third-party service.
+ /// (Required)
+ ///
+ public SignatureType? Type { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/CheckoutSdk/Forward/Requests/Signatures/DlocalParameters.cs b/src/CheckoutSdk/Forward/Requests/Signatures/DlocalParameters.cs
new file mode 100644
index 00000000..42fde523
--- /dev/null
+++ b/src/CheckoutSdk/Forward/Requests/Signatures/DlocalParameters.cs
@@ -0,0 +1,10 @@
+namespace Checkout.Forward.Requests.Signatures
+{
+ public class DlocalParameters
+ {
+ ///
+ /// The secret key used to generate the request signature. This is part of the dLocal API credentials.
+ ///
+ public string SecretKey { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/CheckoutSdk/Forward/Requests/Signatures/DlocalSignature.cs b/src/CheckoutSdk/Forward/Requests/Signatures/DlocalSignature.cs
new file mode 100644
index 00000000..a7e4a2fa
--- /dev/null
+++ b/src/CheckoutSdk/Forward/Requests/Signatures/DlocalSignature.cs
@@ -0,0 +1,14 @@
+namespace Checkout.Forward.Requests.Signatures
+{
+ public class DlocalSignature
+ {
+ ///
+ /// The parameters required to generate an HMAC signature for the dLocal API. See their documentation for
+ /// details.
+ /// This method requires you to provide the X-Login header value in the destination request headers.
+ /// When used, the Forward API appends the X-Date and Authorization headers to the outgoing HTTP request
+ /// before forwarding.
+ ///
+ public DlocalParameters DlocalParameters { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/CheckoutSdk/Forward/Requests/Signatures/SignatureType.cs b/src/CheckoutSdk/Forward/Requests/Signatures/SignatureType.cs
new file mode 100644
index 00000000..52992c3c
--- /dev/null
+++ b/src/CheckoutSdk/Forward/Requests/Signatures/SignatureType.cs
@@ -0,0 +1,10 @@
+using System.Runtime.Serialization;
+
+namespace Checkout.Forward.Requests.Signatures
+{
+ public enum SignatureType
+ {
+ [EnumMember(Value = "dlocal")]
+ Dlocal,
+ }
+}
\ No newline at end of file