From 5226ed333413e8680ebee5a3f94a3432f53b7309 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Semih=20=C5=9Eahan?= Date: Thu, 21 Mar 2024 16:11:29 +0300 Subject: [PATCH] Adds instant transfer with Compay integration as apm (#78) * Adds instant transfer with Compay integration as apm * Update * Update * Update --- adapter/model.go | 97 +++++++++++++++----------- adapter/payment.go | 14 ++++ tests/instant_transfer_payment_test.go | 53 ++++++++++++++ 3 files changed, 123 insertions(+), 41 deletions(-) create mode 100644 tests/instant_transfer_payment_test.go diff --git a/adapter/model.go b/adapter/model.go index 9a2966f..e010520 100644 --- a/adapter/model.go +++ b/adapter/model.go @@ -83,6 +83,7 @@ const ( ApmType_KLARNA ApmType = "KLARNA" ApmType_AFTERPAY ApmType = "AFTERPAY" ApmType_KASPI ApmType = "KASPI" + ApmType_INSTANT_TRANSFER ApmType = "INSTANT_TRANSFER" ApmType_TOMPAY ApmType = "TOMPAY" ApmType_MASLAK ApmType = "MASLAK" ApmType_ALFABANK ApmType = "ALFABANK" @@ -96,31 +97,32 @@ const ( // payment provider declaration const ( - PaymentProvider_BANK PaymentProvider = "BANK" - PaymentProvider_CG_WALLET PaymentProvider = "CG_WALLET" - PaymentProvider_MASTERPASS PaymentProvider = "MASTERPASS" - PaymentProvider_GARANTI_PAY PaymentProvider = "GARANTI_PAY" - PaymentProvider_YKB_WORLD_PAY PaymentProvider = "YKB_WORLD_PAY" - PaymentProvider_PAPARA PaymentProvider = "PAPARA" - PaymentProvider_PAYONEER PaymentProvider = "PAYONEER" - PaymentProvider_SODEXO PaymentProvider = "SODEXO" - PaymentProvider_EDENRED PaymentProvider = "EDENRED" - PaymentProvider_ALIPAY PaymentProvider = "ALIPAY" - PaymentProvider_PAYPAL PaymentProvider = "PAYPAL" - PaymentProvider_KLARNA PaymentProvider = "KLARNA" - PaymentProvider_AFTERPAY PaymentProvider = "AFTERPAY" - PaymentProvider_APPLEPAY PaymentProvider = "APPLEPAY" - PaymentProvider_GOOGLEPAY PaymentProvider = "GOOGLEPAY" - PaymentProvider_HEPSIPAY PaymentProvider = "HEPSIPAY" - PaymentProvider_STRIPE PaymentProvider = "STRIPE" - PaymentProvider_KASPI PaymentProvider = "KASPI" - PaymentProvider_MASLAK PaymentProvider = "MASLAK" - PaymentProvider_TOMPAY PaymentProvider = "TOMPAY" - PaymentProvider_TOM_FINANCE PaymentProvider = "TOM_FINANCE" - PaymentProvider_ALFABANK PaymentProvider = "ALFABANK" - PaymentProvider_PAYCELL PaymentProvider = "PAYCELL" - PaymentProvider_HASO PaymentProvider = "HASO" - PaymentProvider_OFFLINE PaymentProvider = "OFFLINE" + PaymentProvider_BANK PaymentProvider = "BANK" + PaymentProvider_CG_WALLET PaymentProvider = "CG_WALLET" + PaymentProvider_MASTERPASS PaymentProvider = "MASTERPASS" + PaymentProvider_GARANTI_PAY PaymentProvider = "GARANTI_PAY" + PaymentProvider_YKB_WORLD_PAY PaymentProvider = "YKB_WORLD_PAY" + PaymentProvider_PAPARA PaymentProvider = "PAPARA" + PaymentProvider_PAYONEER PaymentProvider = "PAYONEER" + PaymentProvider_SODEXO PaymentProvider = "SODEXO" + PaymentProvider_EDENRED PaymentProvider = "EDENRED" + PaymentProvider_ALIPAY PaymentProvider = "ALIPAY" + PaymentProvider_PAYPAL PaymentProvider = "PAYPAL" + PaymentProvider_KLARNA PaymentProvider = "KLARNA" + PaymentProvider_AFTERPAY PaymentProvider = "AFTERPAY" + PaymentProvider_APPLEPAY PaymentProvider = "APPLEPAY" + PaymentProvider_GOOGLEPAY PaymentProvider = "GOOGLEPAY" + PaymentProvider_HEPSIPAY PaymentProvider = "HEPSIPAY" + PaymentProvider_STRIPE PaymentProvider = "STRIPE" + PaymentProvider_KASPI PaymentProvider = "KASPI" + PaymentProvider_INSTANT_TRANSFER PaymentProvider = "INSTANT_TRANSFER" + PaymentProvider_MASLAK PaymentProvider = "MASLAK" + PaymentProvider_TOMPAY PaymentProvider = "TOMPAY" + PaymentProvider_TOM_FINANCE PaymentProvider = "TOM_FINANCE" + PaymentProvider_ALFABANK PaymentProvider = "ALFABANK" + PaymentProvider_PAYCELL PaymentProvider = "PAYCELL" + PaymentProvider_HASO PaymentProvider = "HASO" + PaymentProvider_OFFLINE PaymentProvider = "OFFLINE" ) // pos apm payment provider declaration @@ -181,20 +183,21 @@ const ( // payment method declaration const ( - PaymentMethod_CARD PaymentMethod = "CARD" - PaymentMethod_MASTERPASS PaymentMethod = "MASTERPASS" - PaymentMethod_PAPARA PaymentMethod = "PAPARA" - PaymentMethod_PAYONEER PaymentMethod = "PAYONEER" - PaymentMethod_SODEXO PaymentMethod = "SODEXO" - PaymentMethod_EDENRED PaymentMethod = "EDENRED" - PaymentMethod_EDENRED_GIFT PaymentMethod = "EDENRED_GIFT" - PaymentMethod_ALIPAY PaymentMethod = "ALIPAY" - PaymentMethod_PAYPAL PaymentMethod = "PAYPAL" - PaymentMethod_KLARNA PaymentMethod = "KLARNA" - PaymentMethod_AFTERPAY PaymentMethod = "AFTERPAY" - PaymentMethod_KASPI PaymentMethod = "KASPI" - PaymentMethod_TOMPAY PaymentMethod = "TOMPAY" - PaymentMethod_STRIPE PaymentMethod = "STRIPE" + PaymentMethod_CARD PaymentMethod = "CARD" + PaymentMethod_MASTERPASS PaymentMethod = "MASTERPASS" + PaymentMethod_PAPARA PaymentMethod = "PAPARA" + PaymentMethod_PAYONEER PaymentMethod = "PAYONEER" + PaymentMethod_SODEXO PaymentMethod = "SODEXO" + PaymentMethod_EDENRED PaymentMethod = "EDENRED" + PaymentMethod_EDENRED_GIFT PaymentMethod = "EDENRED_GIFT" + PaymentMethod_ALIPAY PaymentMethod = "ALIPAY" + PaymentMethod_PAYPAL PaymentMethod = "PAYPAL" + PaymentMethod_KLARNA PaymentMethod = "KLARNA" + PaymentMethod_AFTERPAY PaymentMethod = "AFTERPAY" + PaymentMethod_KASPI PaymentMethod = "KASPI" + PaymentMethod_INSTANT_TRANSFER PaymentMethod = "INSTANT_TRANSFER" + PaymentMethod_TOMPAY PaymentMethod = "TOMPAY" + PaymentMethod_STRIPE PaymentMethod = "STRIPE" ) // card type declaration @@ -352,6 +355,7 @@ const ( const ( ApmAdditionalAction_REDIRECT_TO_URL ApmAdditionalAction = "REDIRECT_TO_URL" ApmAdditionalAction_OTP_REQUIRED ApmAdditionalAction = "OTP_REQUIRED" + ApmAdditionalAction_SHOW_HTML_CONTENT ApmAdditionalAction = "SHOW_HTML_CONTENT" ApmAdditionalAction_WAIT_FOR_WEBHOOK ApmAdditionalAction = "WAIT_FOR_WEBHOOK" ApmAdditionalAction_APPROVAL_REQUIRED ApmAdditionalAction = "APPROVAL_REQUIRED" ApmAdditionalAction_NONE ApmAdditionalAction = "NONE" @@ -992,6 +996,7 @@ type InitCheckoutPaymentResponse struct { type InitApmPaymentResponse struct { PaymentId *int64 `json:"paymentId"` RedirectUrl *string `json:"redirectUrl"` + HtmlContent *string `json:"htmlContent"` PaymentStatus *PaymentStatus `json:"paymentStatus"` ApmAdditionalAction *ApmAdditionalAction `json:"additionalAction"` PaymentError *PaymentError `json:"paymentError"` @@ -1325,6 +1330,16 @@ type InstallmentResponse struct { InstallmentPrices []InstallmentPrice `json:"installmentPrices"` } +type InstantTransferBanksResponse struct { + Items []InstantTransferBank `json:"items"` +} + +type InstantTransferBank struct { + BankCode *string `json:"bankCode"` + BankName *string `json:"bankName"` + BankLogoUrl *string `json:"bankLogoUrl"` +} + type RetrieveBinNumberResponse struct { BinNumber *string `json:"binNumber"` CardType *string `json:"cardType"` @@ -1685,8 +1700,8 @@ type SearchPayoutCompletedTransactionsRequest struct { SettlementType SettlementType `schema:"settlementType,omitempty"` StartDate time.Time `schema:"startDate,omitempty"` EndDate time.Time `schema:"endDate,omitempty"` - Page int `schema:"page"` - Size int `schema:"size"` + Page int `schema:"page"` + Size int `schema:"size"` } type SearchPayoutBouncedTransactionsRequest struct { diff --git a/adapter/payment.go b/adapter/payment.go index 5ca00ea..c2204bd 100644 --- a/adapter/payment.go +++ b/adapter/payment.go @@ -553,6 +553,20 @@ func (api *Payment) ApproveBnplPayment(ctx context.Context, paymentId int64) err return nil } +func (api *Payment) RetrieveActiveBanks(ctx context.Context) (*InstantTransferBanksResponse, error) { + newRequest, err := api.Client.NewRequest(ctx, http.MethodGet, "/payment/v1/instant-transfer-banks", nil) + if err != nil { + return nil, err + } + response := &Response[InstantTransferBanksResponse]{} + err = api.Client.Do(ctx, newRequest, response) + if err != nil { + return nil, err + } + + return response.Data, nil +} + func (c *Payment) Is3DSecureCallbackVerified(threeDSecureCallbackKey string, params map[string]string) bool { hash := params["hash"] hashString := strings.Join([]string{threeDSecureCallbackKey, diff --git a/tests/instant_transfer_payment_test.go b/tests/instant_transfer_payment_test.go new file mode 100644 index 0000000..ee30319 --- /dev/null +++ b/tests/instant_transfer_payment_test.go @@ -0,0 +1,53 @@ +package tests + +import ( + "context" + "testing" + + "github.com/craftgate/craftgate-go-client/adapter" + craftgate "github.com/craftgate/craftgate-go-client/adapter" + "github.com/davecgh/go-spew/spew" + "github.com/stretchr/testify/require" +) + +var instantTransferPaymentClient, _ = craftgate.New("api-key", "secret-key", "https://sandbox-api.craftgate.io") + +func TestRetrieveActiveBanks(t *testing.T) { + res, err := instantTransferPaymentClient.Payment.RetrieveActiveBanks(context.Background()) + require.NotEmpty(t, res.Items) + if err != nil { + t.Errorf("Error %s", err) + } +} + +func TestInitInstantTransferAPMPayment(t *testing.T) { + additionalParams := make(map[string]string) + additionalParams["bankCode"] = "0" + + request := adapter.InitApmPaymentRequest{ + ApmType: craftgate.ApmType_INSTANT_TRANSFER, + Price: 1, + PaidPrice: 1, + Currency: craftgate.Currency_TRY, + PaymentGroup: craftgate.PaymentGroup_LISTING_OR_SUBSCRIPTION, + ConversationId: "foo-bar", + CallbackUrl: "https://www.your-website.com/callback", + Items: []craftgate.PaymentItem{ + { + Name: "Item 1", + Price: 0.6, + }, + { + Name: "Item 2", + Price: 0.4, + }, + }, + AdditionalParams: additionalParams, + } + res, err := instantTransferPaymentClient.Payment.InitApmPayment(context.Background(), request) + _, _ = spew.Printf("%#v\n", res) + + if err != nil { + t.Errorf("Error %s", err) + } +}