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) + } +}