diff --git a/src/CheckoutSdk/Common/AccountHolderResponse.cs b/src/CheckoutSdk/Common/AccountHolderResponse.cs index 49b45a4d..bd6c8785 100644 --- a/src/CheckoutSdk/Common/AccountHolderResponse.cs +++ b/src/CheckoutSdk/Common/AccountHolderResponse.cs @@ -3,5 +3,7 @@ public class AccountHolderResponse : AccountHolderBase { public AccountNameInquiryType? AccountNameInquiry { get; set; } + + public AccountNameInquiryDetails AccountNameInquiryDetails { get; set; } } } \ No newline at end of file diff --git a/src/CheckoutSdk/Common/AccountNameInquiryDetails.cs b/src/CheckoutSdk/Common/AccountNameInquiryDetails.cs new file mode 100644 index 00000000..aed931dd --- /dev/null +++ b/src/CheckoutSdk/Common/AccountNameInquiryDetails.cs @@ -0,0 +1,11 @@ +namespace Checkout.Common +{ + public class AccountNameInquiryDetails + { + public NameCheckType? FirstName { get; set; } + + public NameCheckType? MiddleName { get; set; } + + public NameCheckType? LastName { get; set; } + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Common/CardType.cs b/src/CheckoutSdk/Common/CardType.cs index 8e4dc535..76f9bcf0 100644 --- a/src/CheckoutSdk/Common/CardType.cs +++ b/src/CheckoutSdk/Common/CardType.cs @@ -4,10 +4,10 @@ namespace Checkout.Common { public enum CardType { - [EnumMember(Value = "Charge")] Charge, [EnumMember(Value = "Credit")] Credit, [EnumMember(Value = "Debit")] Debit, - [EnumMember(Value = "Deferred Debit")] DeferredDebit, - [EnumMember(Value = "Prepaid")] Prepaid + [EnumMember(Value = "Prepaid")] Prepaid, + [EnumMember(Value = "Charge")] Charge, + [EnumMember(Value = "Deferred Debit")] DeferredDebit } } \ No newline at end of file diff --git a/src/CheckoutSdk/Common/NameCheckType.cs b/src/CheckoutSdk/Common/NameCheckType.cs new file mode 100644 index 00000000..cad2d996 --- /dev/null +++ b/src/CheckoutSdk/Common/NameCheckType.cs @@ -0,0 +1,11 @@ +using System.Runtime.Serialization; + +namespace Checkout.Common +{ + public enum NameCheckType + { + [EnumMember(Value = "full_match")] FullMatch, + [EnumMember(Value = "partial_match")] PartialMatch, + [EnumMember(Value = "no_match")] NoMatch + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Common/PaymentSourceType.cs b/src/CheckoutSdk/Common/PaymentSourceType.cs index bb41695b..d8defe45 100644 --- a/src/CheckoutSdk/Common/PaymentSourceType.cs +++ b/src/CheckoutSdk/Common/PaymentSourceType.cs @@ -22,7 +22,7 @@ public enum PaymentSourceType [EnumMember(Value = "rapipago")] RapiPago, [EnumMember(Value = "klarna")] Klarna, [EnumMember(Value = "sofort")] Sofort, - [EnumMember(Value = "knet")] KNet, + [EnumMember(Value = "knet")] Knet, [EnumMember(Value = "qpay")] QPay, [EnumMember(Value = "alipay")] Alipay, [EnumMember(Value = "paypal")] PayPal, diff --git a/src/CheckoutSdk/Payments/PaymentStatus.cs b/src/CheckoutSdk/Payments/PaymentStatus.cs index 335b28e2..b92754e7 100644 --- a/src/CheckoutSdk/Payments/PaymentStatus.cs +++ b/src/CheckoutSdk/Payments/PaymentStatus.cs @@ -48,5 +48,8 @@ public enum PaymentStatus [EnumMember(Value = "Returned")] Returned, + + [EnumMember(Value = "Retry Scheduled")] + RetryScheduled, } } \ No newline at end of file diff --git a/src/CheckoutSdk/Payments/Previous/Request/Source/Apm/RequestKnetSource.cs b/src/CheckoutSdk/Payments/Previous/Request/Source/Apm/RequestKnetSource.cs index bfafd060..09d284e0 100644 --- a/src/CheckoutSdk/Payments/Previous/Request/Source/Apm/RequestKnetSource.cs +++ b/src/CheckoutSdk/Payments/Previous/Request/Source/Apm/RequestKnetSource.cs @@ -27,7 +27,7 @@ public class RequestKnetSource : AbstractRequestSource public PaymentMethodDetails PaymentMethodDetails { get; set; } - public RequestKnetSource() : base(PaymentSourceType.KNet) + public RequestKnetSource() : base(PaymentSourceType.Knet) { } } diff --git a/src/CheckoutSdk/Payments/Request/Source/Apm/RequestKnetSource.cs b/src/CheckoutSdk/Payments/Request/Source/Apm/RequestKnetSource.cs index 8e76df24..d01e4933 100644 --- a/src/CheckoutSdk/Payments/Request/Source/Apm/RequestKnetSource.cs +++ b/src/CheckoutSdk/Payments/Request/Source/Apm/RequestKnetSource.cs @@ -27,7 +27,7 @@ public class RequestKnetSource : AbstractRequestSource public PaymentMethodDetails PaymentMethodDetails { get; set; } - public RequestKnetSource() : base(PaymentSourceType.KNet) + public RequestKnetSource() : base(PaymentSourceType.Knet) { } } diff --git a/src/CheckoutSdk/Payments/Response/Source/CardResponseSource.cs b/src/CheckoutSdk/Payments/Response/Source/CardResponseSource.cs index d0f9518e..0d8ad522 100644 --- a/src/CheckoutSdk/Payments/Response/Source/CardResponseSource.cs +++ b/src/CheckoutSdk/Payments/Response/Source/CardResponseSource.cs @@ -10,6 +10,12 @@ public class CardResponseSource : AbstractResponseSource, IResponseSource public int? ExpiryYear { get; set; } + public string Last4 { get; set; } + + public string Fingerprint { get; set; } + + public string Bin { get; set; } + public string Name { get; set; } public string Scheme { get; set; } @@ -20,12 +26,6 @@ public class CardResponseSource : AbstractResponseSource, IResponseSource public IList LocalSchemes { get; set; } - public string Last4 { get; set; } - - public string Fingerprint { get; set; } - - public string Bin { get; set; } - public CardType? CardType { get; set; } public CardCategory? CardCategory { get; set; } diff --git a/src/CheckoutSdk/Payments/Response/Source/KnetResponseSource.cs b/src/CheckoutSdk/Payments/Response/Source/KnetResponseSource.cs new file mode 100644 index 00000000..a72aa3b1 --- /dev/null +++ b/src/CheckoutSdk/Payments/Response/Source/KnetResponseSource.cs @@ -0,0 +1,50 @@ +using Checkout.Common; + +namespace Checkout.Payments.Response.Source +{ + public class KnetResponseSource : AbstractResponseSource, IResponseSource + { + public string Language { get; set; } + + public string UserDefinedField1 { get; set; } + + public string UserDefinedField2 { get; set; } + + public string UserDefinedField3 { get; set; } + + public string UserDefinedField4 { get; set; } + + public string UserDefinedField5 { get; set; } + + public string CardToken { get; set; } + + public string Ptlf { get; set; } + + public string KnetPaymentId { get; set; } + + public string KnetResult { get; set; } + + public string InquiryResult { get; set; } + + public string BankReference { get; set; } + + public string KnetTransactionId { get; set; } + + public string AuthCode { get; set; } + + public string AuthResponseCode { get; set; } + + public string PostDate { get; set; } + + public string Avr { get; set; } + + public string Error { get; set; } + + public string ErrorText { get; set; } + + public new PaymentSourceType? Type() + { + return base.Type; + } + } +} \ No newline at end of file diff --git a/src/CheckoutSdk/Payments/Sessions/PaymentMethodsType.cs b/src/CheckoutSdk/Payments/Sessions/PaymentMethodsType.cs index 11cb6bd2..b8476d3a 100644 --- a/src/CheckoutSdk/Payments/Sessions/PaymentMethodsType.cs +++ b/src/CheckoutSdk/Payments/Sessions/PaymentMethodsType.cs @@ -19,7 +19,7 @@ public enum PaymentMethodsType [EnumMember(Value = "ideal")] Ideal, [EnumMember(Value = "kakaopay")] KakaoPay, [EnumMember(Value = "klarna")] Klarna, - [EnumMember(Value = "knet")] KNet, + [EnumMember(Value = "knet")] Knet, [EnumMember(Value = "mbway")] MBWay, [EnumMember(Value = "multibanco")] Multibanco, [EnumMember(Value = "p24")] Przelewy24, diff --git a/src/CheckoutSdk/Payments/Util/PaymentResponseSourceTypeConverter.cs b/src/CheckoutSdk/Payments/Util/PaymentResponseSourceTypeConverter.cs index dcbf9d7f..f9b6e212 100644 --- a/src/CheckoutSdk/Payments/Util/PaymentResponseSourceTypeConverter.cs +++ b/src/CheckoutSdk/Payments/Util/PaymentResponseSourceTypeConverter.cs @@ -60,6 +60,11 @@ private static IResponseSource CreateResponse(string sourceType) return new CurrencyAccountResponseSource(); } + if (CheckoutUtils.GetEnumMemberValue(PaymentSourceType.Knet).Equals(sourceType)) + { + return new KnetResponseSource(); + } + if (CheckoutUtils.GetEnumMemberValue(PaymentSourceType.PayPal).Equals(sourceType)) { return new PaymentContextsPayPalResponseSource(); diff --git a/test/CheckoutSdkTest/CheckoutSdkTest.csproj b/test/CheckoutSdkTest/CheckoutSdkTest.csproj index 1eca0eae..a18b7313 100644 --- a/test/CheckoutSdkTest/CheckoutSdkTest.csproj +++ b/test/CheckoutSdkTest/CheckoutSdkTest.csproj @@ -38,6 +38,9 @@ PreserveNewest + + PreserveNewest + diff --git a/test/CheckoutSdkTest/JsonSerializerTest.cs b/test/CheckoutSdkTest/JsonSerializerTest.cs index c2bd0f69..6100a44c 100644 --- a/test/CheckoutSdkTest/JsonSerializerTest.cs +++ b/test/CheckoutSdkTest/JsonSerializerTest.cs @@ -8,6 +8,7 @@ using Checkout.Issuing.Controls.Responses.Create; using Checkout.Payments.Contexts; using Checkout.Payments.Response; +using Checkout.Payments.Response.Source; using Checkout.Payments.Response.Source.Contexts; using Checkout.Payments.Sender; using Shouldly; @@ -117,6 +118,17 @@ public void ShouldDeserializeDefaultCardCTypeResponse() cardDetailsResponse.ShouldNotBeNull(); cardDetailsResponse.Type.ShouldBe(CardType.Physical); } + + [Fact] + public void ShouldDeserializeKnetResponse() + { + var fileContent = GetJsonFileContent("./Resources/KnetResponse.json"); + var paymentResponse = + (PaymentResponse)new JsonSerializer().Deserialize(fileContent, + typeof(PaymentResponse)); + paymentResponse.ShouldNotBeNull(); + paymentResponse.Source.ShouldBeOfType(typeof(KnetResponseSource)); + } [Fact] public void ShouldDeserializeDateTimeFormatsFromJson() diff --git a/test/CheckoutSdkTest/Payments/Hosted/HostedPaymentsIntegrationTest.cs b/test/CheckoutSdkTest/Payments/Hosted/HostedPaymentsIntegrationTest.cs index 573e56ca..42357e11 100644 --- a/test/CheckoutSdkTest/Payments/Hosted/HostedPaymentsIntegrationTest.cs +++ b/test/CheckoutSdkTest/Payments/Hosted/HostedPaymentsIntegrationTest.cs @@ -118,7 +118,7 @@ protected static HostedPaymentRequest CreateHostedPaymentRequest() { PaymentSourceType.EPS, PaymentSourceType.Ideal, - PaymentSourceType.KNet + PaymentSourceType.Knet }, Products = new List { diff --git a/test/CheckoutSdkTest/Payments/Links/PaymentLinksIntegrationTest.cs b/test/CheckoutSdkTest/Payments/Links/PaymentLinksIntegrationTest.cs index c51cc386..fb99ff4e 100644 --- a/test/CheckoutSdkTest/Payments/Links/PaymentLinksIntegrationTest.cs +++ b/test/CheckoutSdkTest/Payments/Links/PaymentLinksIntegrationTest.cs @@ -58,7 +58,7 @@ private async Task ShouldCreateAndGetPaymentLink() AllowPaymentMethods = new List { PaymentSourceType.Card, PaymentSourceType.Ideal }, DisabledPaymentMethods = - new List { PaymentSourceType.EPS, PaymentSourceType.Ideal, PaymentSourceType.KNet }, + new List { PaymentSourceType.EPS, PaymentSourceType.Ideal, PaymentSourceType.Knet }, Products = new List { new Product diff --git a/test/CheckoutSdkTest/Payments/Previous/RequestApmPaymentsIntegrationTest.cs b/test/CheckoutSdkTest/Payments/Previous/RequestApmPaymentsIntegrationTest.cs index 94069c83..6345fa9b 100644 --- a/test/CheckoutSdkTest/Payments/Previous/RequestApmPaymentsIntegrationTest.cs +++ b/test/CheckoutSdkTest/Payments/Previous/RequestApmPaymentsIntegrationTest.cs @@ -544,7 +544,7 @@ private async Task ShouldMakeKnetPayment() payment.Source.ShouldBeOfType(typeof(AlternativePaymentSourceResponse)); var source = (AlternativePaymentSourceResponse)payment.Source; source.Count.ShouldBePositive(); - source.Type().ShouldBe(PaymentSourceType.KNet); + source.Type().ShouldBe(PaymentSourceType.Knet); } [Fact(Skip = "unavailable")] diff --git a/test/CheckoutSdkTest/Resources/KnetResponse.json b/test/CheckoutSdkTest/Resources/KnetResponse.json new file mode 100644 index 00000000..1a97cac8 --- /dev/null +++ b/test/CheckoutSdkTest/Resources/KnetResponse.json @@ -0,0 +1,39 @@ +{ + "id": "pay_4gubyq2w335upc54dx7a4257lq", + "requested_on": "2024-05-23T17:04:05Z", + "source": { + "type": "knet", + "language": "en", + "user_defined_field1": "first user defined field", + "user_defined_field2": "second user defined field", + "user_defined_field4": "fourth user defined field", + "card_token": "01234567", + "ptlf": "96033587c7b5", + "knet_payment_id": "100201914315601265", + "knet_result": "Captured", + "bank_reference": "914310000349", + "knet_transaction_id": "201914384388126", + "auth_code": "B00775", + "post_date": "0524", + "avr": "N" + }, + "amount": 1000, + "currency": "KWD", + "payment_type": "Regular", + "status": "Captured", + "approved": true, + "risk": { + "flagged": false + }, + "customer": { + "id": "cus_kx75h5tcegyednxeyvtn6vy3sq" + }, + "_links": { + "self": { + "href": "https://api.sandbox.checkout.com/payments/pay_c2ynk5nnjacuxia3r4matf5wmu" + }, + "actions": { + "href": "https://api.sandbox.checkout.com/payments/pay_c2ynk5nnjacuxia3r4matf5wmu/actions" + } + } +} \ No newline at end of file