From afa31500319e5333fb15075f9faa0edd000b2d92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Derya=20=C3=87akmak?= <36774966+deryacakmak@users.noreply.github.com> Date: Mon, 8 Jan 2024 15:13:36 +0300 Subject: [PATCH 1/9] Akbank and Tap Integration (#62) --- adapter/model.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/adapter/model.go b/adapter/model.go index a9413a3..868297b 100644 --- a/adapter/model.go +++ b/adapter/model.go @@ -151,6 +151,11 @@ const ( Currency_IQD Currency = "IQD" Currency_AZN Currency = "AZN" Currency_KZT Currency = "KZT" + Currency_KWD Currency = "KWD" + Currency_SAR Currency = "SAR" + Currency_BHD Currency = "BHD" + Currency_RUB Currency = "RUB" + Currency_JPY Currency = "JPY" ) // payment group declaration @@ -436,6 +441,8 @@ const ( PosIntegrator_PAYCELL PosIntegrator = "PAYCELL" PosIntegrator_TAMI PosIntegrator = "TAMI" PosIntegrator_QNB_PAY PosIntegrator = "QNB_PAY" + PosIntegrator_AKBANK_VPOS PosIntegrator = "AKBANK_VPOS" + PosIntegrator_TAP PosIntegrator = "TAP" ) const ( From 69021769c57f86edaacbdfb857e3b3659ca6a420 Mon Sep 17 00:00:00 2001 From: Beran Santur Date: Tue, 23 Jan 2024 16:20:18 +0300 Subject: [PATCH 2/9] Bnpl CartItem type change (#66) --- adapter/model.go | 2 ++ tests/payment_test.go | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/adapter/model.go b/adapter/model.go index 868297b..0a9ce9d 100644 --- a/adapter/model.go +++ b/adapter/model.go @@ -484,6 +484,8 @@ const ( const ( BnplCartItemType_MOBILE_PHONE_OVER_5000_TRY BnplCartItemType = "MOBILE_PHONE_OVER_5000_TRY" BnplCartItemType_MOBILE_PHONE_BELOW_5000_TRY BnplCartItemType = "MOBILE_PHONE_BELOW_5000_TRY" + BnplCartItemType_MOBILE_PHONE_PRICE_ABOVE_REGULATION_LIMIT BnplCartItemType = "MOBILE_PHONE_PRICE_ABOVE_REGULATION_LIMIT" + BnplCartItemType_MOBILE_PHONE_PRICE_BELOW_REGULATION_LIMIT BnplCartItemType = "MOBILE_PHONE_PRICE_BELOW_REGULATION_LIMIT" BnplCartItemType_TABLET BnplCartItemType = "TABLET" BnplCartItemType_COMPUTER BnplCartItemType = "COMPUTER" BnplCartItemType_CONSTRUCTION_MARKET BnplCartItemType = "CONSTRUCTION_MARKET" diff --git a/tests/payment_test.go b/tests/payment_test.go index fe0544a..881d4f5 100644 --- a/tests/payment_test.go +++ b/tests/payment_test.go @@ -781,7 +781,7 @@ func TestPayment_BnplPaymentOffer(t *testing.T) { Id: "200", Name: "Test Elektronik 2", BrandName: "iphone", - Type: craftgate.BnplCartItemType_MOBILE_PHONE_BELOW_5000_TRY, + Type: craftgate.BnplCartItemType_MOBILE_PHONE_PRICE_BELOW_REGULATION_LIMIT, UnitPrice: 3000, Quantity: 2, }, @@ -841,7 +841,7 @@ func TestPayment_InitBnplPayment(t *testing.T) { Id: "100", Name: "Test Elektronik 1", BrandName: "Samsung", - Type: craftgate.BnplCartItemType_MOBILE_PHONE_OVER_5000_TRY, + Type: craftgate.BnplCartItemType_MOBILE_PHONE_PRICE_ABOVE_REGULATION_LIMIT, UnitPrice: 4000, Quantity: 1, }, From 8a584a1e1344a696a2ab5428a48145f9041b1309 Mon Sep 17 00:00:00 2001 From: Serhat Tunca <35580464+tuncaserhat@users.noreply.github.com> Date: Tue, 30 Jan 2024 10:07:16 +0300 Subject: [PATCH 3/9] add rubik pos integrator (#68) --- adapter/model.go | 53 ++++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/adapter/model.go b/adapter/model.go index 0a9ce9d..69098da 100644 --- a/adapter/model.go +++ b/adapter/model.go @@ -443,6 +443,7 @@ const ( PosIntegrator_QNB_PAY PosIntegrator = "QNB_PAY" PosIntegrator_AKBANK_VPOS PosIntegrator = "AKBANK_VPOS" PosIntegrator_TAP PosIntegrator = "TAP" + PosIntegrator_RUBIK PosIntegrator = "RUBIK" ) const ( @@ -482,32 +483,32 @@ const ( // BnplCartItemType type declaration const ( - BnplCartItemType_MOBILE_PHONE_OVER_5000_TRY BnplCartItemType = "MOBILE_PHONE_OVER_5000_TRY" - BnplCartItemType_MOBILE_PHONE_BELOW_5000_TRY BnplCartItemType = "MOBILE_PHONE_BELOW_5000_TRY" - BnplCartItemType_MOBILE_PHONE_PRICE_ABOVE_REGULATION_LIMIT BnplCartItemType = "MOBILE_PHONE_PRICE_ABOVE_REGULATION_LIMIT" - BnplCartItemType_MOBILE_PHONE_PRICE_BELOW_REGULATION_LIMIT BnplCartItemType = "MOBILE_PHONE_PRICE_BELOW_REGULATION_LIMIT" - BnplCartItemType_TABLET BnplCartItemType = "TABLET" - BnplCartItemType_COMPUTER BnplCartItemType = "COMPUTER" - BnplCartItemType_CONSTRUCTION_MARKET BnplCartItemType = "CONSTRUCTION_MARKET" - BnplCartItemType_GOLD BnplCartItemType = "GOLD" - BnplCartItemType_DIGITAL_PRODUCTS BnplCartItemType = "DIGITAL_PRODUCTS" - BnplCartItemType_SUPERMARKET BnplCartItemType = "SUPERMARKET" - BnplCartItemType_WHITE_GOODS BnplCartItemType = "WHITE_GOODS" - BnplCartItemType_WEARABLE_TECHNOLOGY BnplCartItemType = "WEARABLE_TECHNOLOGY" - BnplCartItemType_SMALL_HOME_APPLIANCES BnplCartItemType = "SMALL_HOME_APPLIANCES" - BnplCartItemType_TV BnplCartItemType = "TV" - BnplCartItemType_GAMES_CONSOLES BnplCartItemType = "GAMES_CONSOLES" - BnplCartItemType_AIR_CONDITIONER_AND_HEATER BnplCartItemType = "AIR_CONDITIONER_AND_HEATER" - BnplCartItemType_ELECTRONICS BnplCartItemType = "ELECTRONICS" - BnplCartItemType_ACCESSORIES BnplCartItemType = "ACCESSORIES" - BnplCartItemType_MOM_AND_BABY_AND_KIDS BnplCartItemType = "MOM_AND_BABY_AND_KIDS" - BnplCartItemType_SHOES BnplCartItemType = "SHOES" - BnplCartItemType_CLOTHING BnplCartItemType = "CLOTHING" - BnplCartItemType_COSMETICS_AND_PERSONAL_CARE BnplCartItemType = "COSMETICS_AND_PERSONAL_CARE" - BnplCartItemType_FURNITURE BnplCartItemType = "FURNITURE" - BnplCartItemType_HOME_LIVING BnplCartItemType = "HOME_LIVING" - BnplCartItemType_AUTOMOBILE_MOTORCYCLE BnplCartItemType = "AUTOMOBILE_MOTORCYCLE" - BnplCartItemType_OTHER BnplCartItemType = "OTHER" + BnplCartItemType_MOBILE_PHONE_OVER_5000_TRY BnplCartItemType = "MOBILE_PHONE_OVER_5000_TRY" + BnplCartItemType_MOBILE_PHONE_BELOW_5000_TRY BnplCartItemType = "MOBILE_PHONE_BELOW_5000_TRY" + BnplCartItemType_MOBILE_PHONE_PRICE_ABOVE_REGULATION_LIMIT BnplCartItemType = "MOBILE_PHONE_PRICE_ABOVE_REGULATION_LIMIT" + BnplCartItemType_MOBILE_PHONE_PRICE_BELOW_REGULATION_LIMIT BnplCartItemType = "MOBILE_PHONE_PRICE_BELOW_REGULATION_LIMIT" + BnplCartItemType_TABLET BnplCartItemType = "TABLET" + BnplCartItemType_COMPUTER BnplCartItemType = "COMPUTER" + BnplCartItemType_CONSTRUCTION_MARKET BnplCartItemType = "CONSTRUCTION_MARKET" + BnplCartItemType_GOLD BnplCartItemType = "GOLD" + BnplCartItemType_DIGITAL_PRODUCTS BnplCartItemType = "DIGITAL_PRODUCTS" + BnplCartItemType_SUPERMARKET BnplCartItemType = "SUPERMARKET" + BnplCartItemType_WHITE_GOODS BnplCartItemType = "WHITE_GOODS" + BnplCartItemType_WEARABLE_TECHNOLOGY BnplCartItemType = "WEARABLE_TECHNOLOGY" + BnplCartItemType_SMALL_HOME_APPLIANCES BnplCartItemType = "SMALL_HOME_APPLIANCES" + BnplCartItemType_TV BnplCartItemType = "TV" + BnplCartItemType_GAMES_CONSOLES BnplCartItemType = "GAMES_CONSOLES" + BnplCartItemType_AIR_CONDITIONER_AND_HEATER BnplCartItemType = "AIR_CONDITIONER_AND_HEATER" + BnplCartItemType_ELECTRONICS BnplCartItemType = "ELECTRONICS" + BnplCartItemType_ACCESSORIES BnplCartItemType = "ACCESSORIES" + BnplCartItemType_MOM_AND_BABY_AND_KIDS BnplCartItemType = "MOM_AND_BABY_AND_KIDS" + BnplCartItemType_SHOES BnplCartItemType = "SHOES" + BnplCartItemType_CLOTHING BnplCartItemType = "CLOTHING" + BnplCartItemType_COSMETICS_AND_PERSONAL_CARE BnplCartItemType = "COSMETICS_AND_PERSONAL_CARE" + BnplCartItemType_FURNITURE BnplCartItemType = "FURNITURE" + BnplCartItemType_HOME_LIVING BnplCartItemType = "HOME_LIVING" + BnplCartItemType_AUTOMOBILE_MOTORCYCLE BnplCartItemType = "AUTOMOBILE_MOTORCYCLE" + BnplCartItemType_OTHER BnplCartItemType = "OTHER" ) // RecordType declaration From 84104aad60d537894b15136086fa1b156fb7f162 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alican=20Akku=C5=9F?= Date: Fri, 9 Feb 2024 11:42:56 +0300 Subject: [PATCH 4/9] adds haso bnpl (#67) --- adapter/model.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/adapter/model.go b/adapter/model.go index 69098da..4a16b9b 100644 --- a/adapter/model.go +++ b/adapter/model.go @@ -87,6 +87,7 @@ const ( ApmType_ALFABANK ApmType = "ALFABANK" ApmType_TOM_FINANCE ApmType = "TOM_FINANCE" ApmType_STRIPE ApmType = "STRIPE" + ApmType_HASO ApmType = "HASO" ApmType_FUND_TRANSFER ApmType = "FUND_TRANSFER" ApmType_CASH_ON_DELIVERY ApmType = "CASH_ON_DELIVERY" ) @@ -112,6 +113,7 @@ const ( PaymentProvider_GOOGLEPAY PaymentProvider = "GOOGLEPAY" PaymentProvider_HEPSIPAY PaymentProvider = "HEPSIPAY" PaymentProvider_STRIPE PaymentProvider = "STRIPE" + PaymentProvider_HASO PaymentProvider = "HASO" PaymentProvider_OFFLINE PaymentProvider = "OFFLINE" ) From 19a65f617597873e3e01f206a67df89f944e2494 Mon Sep 17 00:00:00 2001 From: Beran Santur Date: Tue, 13 Feb 2024 16:39:15 +0300 Subject: [PATCH 5/9] Adds Juzdan integration to Go Client (#69) * Adds Juzdan integration to Go CLient * Adds Juzdan integration to Go CLient * Adds Juzdan integration to Go CLient * Adds Juzdan integration to Go Client * Adds Juzdan integration to Go Client * Adds Juzdan integration to Go Client * fix --- adapter/craftgate.go | 1 + adapter/juzdan.go | 41 +++++++++++++++++++++++++++++++ adapter/model.go | 28 +++++++++++++++++++++ tests/juzdan_test.go | 58 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 128 insertions(+) create mode 100644 adapter/juzdan.go create mode 100644 tests/juzdan_test.go diff --git a/adapter/craftgate.go b/adapter/craftgate.go index b4311f3..b181a4a 100644 --- a/adapter/craftgate.go +++ b/adapter/craftgate.go @@ -108,6 +108,7 @@ type Client struct { Masterpass *Masterpass BankAccountTracking *BankAccountTracking Merchant *Merchant + Juzdan *Juzdan } func New(apiKey, apiSecret, baseURL string, opts ...ClientOption) (*Client, error) { diff --git a/adapter/juzdan.go b/adapter/juzdan.go new file mode 100644 index 0000000..dc4c178 --- /dev/null +++ b/adapter/juzdan.go @@ -0,0 +1,41 @@ +package adapter + +import ( + "context" + "fmt" + "net/http" +) + +type Juzdan struct { + Client *Client +} + +func (api *Juzdan) InitJuzdanPayment(ctx context.Context, request InitJuzdanPaymentRequest) (*InitJuzdanPaymentResponse, error) { + newRequest, err := api.Client.NewRequest(ctx, http.MethodPost, "/payment/v1/juzdan-payments/init", request) + if err != nil { + return nil, err + } + + response := &Response[InitJuzdanPaymentResponse]{} + err = api.Client.Do(ctx, newRequest, response) + if err != nil { + return nil, err + } + + return response.Data, nil +} + +func (api *Juzdan) RetrieveJuzdanPayment(ctx context.Context, referenceId string) (*PaymentResponse, error) { + newRequest, err := api.Client.NewRequest(ctx, http.MethodGet, fmt.Sprintf("/payment/v1/juzdan-payments/%s", referenceId), nil) + + if err != nil { + return nil, err + } + + response := &Response[PaymentResponse]{} + err = api.Client.Do(ctx, newRequest, response) + if err != nil { + return nil, err + } + return response.Data, nil +} diff --git a/adapter/model.go b/adapter/model.go index 4a16b9b..1ee758f 100644 --- a/adapter/model.go +++ b/adapter/model.go @@ -50,6 +50,7 @@ type BankAccountTrackingSource string type BnplCartItemType string type PaymentAuthenticationType string type CardBrand string +type ClientType string const ( ApiKeyHeaderName = "x-api-key" @@ -541,6 +542,11 @@ const ( CardBrand_SAGLAM_KART CardBrand = "Sağlam Kart" ) +const ( + ClientType_W ClientType = "W" + ClientType_M ClientType = "M" +) + // requests type CreatePaymentRequest struct { Price float64 `json:"price,omitempty"` @@ -2083,6 +2089,28 @@ type CreateMerchantPosCommissionRequest struct { Commissions []CreateMerchantPosCommission `json:"commissions"` } +type InitJuzdanPaymentRequest struct { + Price float64 `json:"price,omitempty"` + PaidPrice float64 `json:"paidPrice,omitempty"` + Currency Currency `json:"currency,omitempty"` + PaymentGroup PaymentGroup `json:"paymentGroup,omitempty"` + ConversationId string `json:"conversationId,omitempty"` + ExternalId string `json:"externalId,omitempty"` + CallbackUrl string `json:"callbackUrl,omitempty"` + PaymentPhase PaymentPhase `json:"paymentPhase,omitempty"` + PaymentChannel string `json:"paymentChannel,omitempty"` + BuyerMemberId int64 `json:"buyerMemberId,omitempty"` + BankOrderId string `json:"bankOrderId,omitempty"` + Items []PaymentItem `json:"items"` + ClientType ClientType `json:"clientType,omitempty"` + LoanCampaignId int64 `json:"loanCampaignId,omitempty"` +} + +type InitJuzdanPaymentResponse struct { + ReferenceId string `json:"referenceId"` + JuzdanQrUrl string `json:"juzdanQrUrl"` +} + type PaymentError ErrorResponse type Void struct { diff --git a/tests/juzdan_test.go b/tests/juzdan_test.go new file mode 100644 index 0000000..b9eea22 --- /dev/null +++ b/tests/juzdan_test.go @@ -0,0 +1,58 @@ +package tests + +import ( + "context" + "github.com/craftgate/craftgate-go-client/adapter" + craftgate "github.com/craftgate/craftgate-go-client/adapter" + "github.com/stretchr/testify/require" + "github.com/davecgh/go-spew/spew" + "testing" +) + +var juzdanClient, _ = craftgate.New("api-key", "secret-key", "https://sandbox-api.craftgate.io") + +func Test_InitJuzdanPayment(t *testing.T) { + request := adapter.InitJuzdanPaymentRequest{ + Price: 1.25, + PaidPrice: 1.25, + Currency: craftgate.Currency_TRY, + PaymentGroup: craftgate.PaymentGroup_LISTING_OR_SUBSCRIPTION, + ConversationId: "foo-bar", + ExternalId: "115", + CallbackUrl: "www.test.com", + PaymentPhase: craftgate.PaymentPhase_AUTH, + PaymentChannel: "test", + BankOrderId: "test", + Items: []craftgate.PaymentItem{ + { + Name: "Item 1", + Price: 1, + ExternalId: "1", + }, + { + Name: "Item 2", + Price: 0.25, + ExternalId: "2", + }, + }, + ClientType: craftgate.ClientType_W, + LoanCampaignId: 1, + } + + res, err := juzdanClient.Juzdan.InitJuzdanPayment(context.Background(), request) + + require.NotNil(t, res.JuzdanQrUrl) + require.NotNil(t, res.ReferenceId) + if err != nil { + t.Errorf("Error %s", err) + } +} + +func Test_RetrieveJuzdanPayment(t *testing.T) { + res, err := juzdanClient.Juzdan.RetrieveJuzdanPayment(context.Background(), "test-reference-id") + _, _ = spew.Printf("%#v\n", res) + + if err != nil { + t.Errorf("Error %s", err) + } +} From 20d16516f0e318f8f1cea1d38ed1548381a27f96 Mon Sep 17 00:00:00 2001 From: Beran Santur Date: Mon, 19 Feb 2024 16:10:40 +0300 Subject: [PATCH 6/9] Fixed test error (#72) --- main_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main_test.go b/main_test.go index 88fe110..dd41479 100644 --- a/main_test.go +++ b/main_test.go @@ -25,7 +25,7 @@ func Test_main(t *testing.T) { binNumber, err := client.Installment.RetrieveBinNumber(context.Background(), "487074") require.NotNil(t, err) require.Nil(t, binNumber) - assert.Equal(t, true, strings.Contains(err.Error(), "API credential not found!")) + assert.Equal(t, true, strings.Contains(err.Error(), "API credential not found")) }) }) } From 8c3649bb96157de303610516285c44b2630fd945 Mon Sep 17 00:00:00 2001 From: Emre INAL <9061788+reywyn@users.noreply.github.com> Date: Mon, 19 Feb 2024 16:30:01 +0300 Subject: [PATCH 7/9] Update github build action (#73) --- .github/workflows/go.yml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 9d05c36..1f37b8e 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -7,20 +7,18 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - - name: Set up Go 1.19 - uses: actions/setup-go@v3 + - name: Set up Go + uses: actions/setup-go@v5 with: - go-version-file: go.mod + go-version: '1.21.0' cache: true cache-dependency-path: go.sum - name: Check out code into the Go module directory - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Go Lint - uses: golangci/golangci-lint-action@v3 + uses: golangci/golangci-lint-action@v4 - name: Get dependencies run: | From cf1f940fba9d922214bd91116f8cfe7bfafed61f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Derya=20=C3=87akmak?= <36774966+deryacakmak@users.noreply.github.com> Date: Tue, 19 Mar 2024 17:37:24 +0300 Subject: [PATCH 8/9] Garanti Bank account tracking (#70) * Garanti Bank account tracking * fix test --------- Co-authored-by: Lemi Orhan Ergin --- adapter/model.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/adapter/model.go b/adapter/model.go index 1ee758f..24decf2 100644 --- a/adapter/model.go +++ b/adapter/model.go @@ -522,7 +522,8 @@ const ( // BankAccountTrackingSource declaration const ( - BankAccountTrackingSource_YKB BankAccountTrackingSource = "YKB" + BankAccountTrackingSource_YKB BankAccountTrackingSource = "YKB" + BankAccountTrackingSource_GARANTI BankAccountTrackingSource = "GARANTI" ) const ( From bfd8397c32b9418be3ec7408abd39775d66a71e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alican=20Akku=C5=9F?= Date: Wed, 20 Mar 2024 11:20:11 +0300 Subject: [PATCH 9/9] Add loyalty exists while searching installment (#77) --- adapter/model.go | 1 + 1 file changed, 1 insertion(+) diff --git a/adapter/model.go b/adapter/model.go index 24decf2..e902c03 100644 --- a/adapter/model.go +++ b/adapter/model.go @@ -1298,6 +1298,7 @@ type SearchInstallmentsRequest struct { Price float64 `schema:"price"` Currency Currency `schema:"currency"` DistinctCardBrandsWithLowestCommissions bool `schema:"distinctCardBrandsWithLowestCommissions"` + LoyaltyExists bool `schema:"loyaltyExists"` } type InstallmentListResponse struct {