diff --git a/adapter/model.go b/adapter/model.go index 6093f64..5bd031e 100644 --- a/adapter/model.go +++ b/adapter/model.go @@ -5,6 +5,7 @@ import "time" type PaymentType string type ApmType string type PaymentProvider string +type PosApmPaymentProvider string type PaymentStatus string type PaymentSource string type PaymentGroup string @@ -30,6 +31,7 @@ type TransactionPayoutStatus string type WalletTransactionRefundTransactionType string type FraudAction string type FraudCheckStatus string +type AdditionalAction string type ApmAdditionalAction string type ReportFileType string type WalletTransactionType string @@ -77,14 +79,24 @@ 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_PAPARA PaymentProvider = "PAPARA" - PaymentProvider_PAYONEER PaymentProvider = "PAYONEER" - PaymentProvider_SODEXO PaymentProvider = "SODEXO" - PaymentProvider_EDENRED PaymentProvider = "EDENRED" + PaymentProvider_BANK PaymentProvider = "BANK" + PaymentProvider_CG_WALLET PaymentProvider = "CG_WALLET" + PaymentProvider_MASTERPASS PaymentProvider = "MASTERPASS" + PaymentProvider_GARANTI_PAY PaymentProvider = "GARANTI_PAY" + PaymentProvider_PAPARA PaymentProvider = "PAPARA" + PaymentProvider_PAYONEER PaymentProvider = "PAYONEER" + PaymentProvider_SODEXO PaymentProvider = "SODEXO" + PaymentProvider_EDENRED PaymentProvider = "EDENRED" + PaymentProvider_YKB_WORLD_PAY PaymentProvider = "YKB_WORLD_PAY" + PaymentProvider_APPLEPAY PaymentProvider = "APPLEPAY" + PaymentProvider_GOOGLEPAY PaymentProvider = "GOOGLEPAY" +) + +// pos apm payment provider declaration +const ( + PosApmPaymentProvider_YKB_WORLD_PAY PosApmPaymentProvider = "YKB_WORLD_PAY" + PosApmPaymentProvider_APPLEPAY PosApmPaymentProvider = "APPLEPAY" + PosApmPaymentProvider_GOOGLEPAY PosApmPaymentProvider = "GOOGLEPAY" ) // payment status declaration @@ -391,6 +403,12 @@ const ( FileStatus_APPROVED FileStatus = "APPROVED" ) +const ( + AdditionalAction_CONTINUE_IN_CLIENT AdditionalAction = "CONTINUE_IN_CLIENT" + AdditionalAction_SHOW_HTML_CONTENT AdditionalAction = "SHOW_HTML_CONTENT" + AdditionalAction_NONE AdditionalAction = "NONE" +) + // requests type CreatePaymentRequest struct { Price float64 `json:"price,omitempty"` @@ -451,6 +469,10 @@ type Init3DSPaymentRequest struct { Retry bool `json:"retry"` } +type Complete3DSPaymentRequest struct { + PaymentId int64 `json:"paymentId"` +} + type InitCheckoutPaymentRequest struct { Price float64 `json:"price,omitempty"` PaidPrice float64 `json:"paidPrice,omitempty"` @@ -501,8 +523,31 @@ type CompleteApmPaymentRequest struct { AdditionalParams map[string]string `json:"additionalParams,omitempty"` } -type Complete3DSPaymentRequest struct { - PaymentId int64 `json:"paymentId"` +type InitPosApmPaymentRequest struct { + Price float64 `json:"price,omitempty"` + PaidPrice float64 `json:"paidPrice,omitempty"` + PosAlias string `json:"posAlias,omitempty"` + Currency Currency `json:"currency,omitempty"` + ConversationId string `json:"conversationId,omitempty"` + ExternalId string `json:"externalId,omitempty"` + CallbackUrl string `json:"callbackUrl,omitempty"` + PaymentPhase PaymentPhase `json:"paymentPhase,omitempty"` + PaymentGroup PaymentGroup `json:"paymentGroup,omitempty"` + PaymentChannel string `json:"paymentChannel,omitempty"` + BuyerMemberId int64 `json:"buyerMemberId,omitempty"` + BankOrderId string `json:"bankOrderId,omitempty"` + ClientIp string `json:"clientIp,omitempty"` + Items []PaymentItem `json:"items"` + AdditionalParams map[string]string `json:"additionalParams"` + Installments []PosApmInstallment `json:"installments"` + PaymentProvider PosApmPaymentProvider `json:"paymentProvider,omitempty"` + FraudParams *FraudCheckParameters `json:"fraudParams,omitempty"` + CheckoutFormToken string `json:"checkoutFormToken,omitempty"` +} + +type CompletePosApmPaymentRequest struct { + PaymentId int64 `json:"paymentId"` + AdditionalParams map[string]interface{} `json:"additionalParams"` } type PostAuthPaymentRequest struct { @@ -723,6 +768,21 @@ type CompleteApmPaymentResponse struct { PaymentError *PaymentError `json:"paymentError"` } +type InitPosApmPaymentResponse struct { + PaymentId *int64 `json:"paymentId"` + HtmlContent *string `json:"htmlContent"` + PaymentStatus *PaymentStatus `json:"paymentStatus"` + AdditionalAction *AdditionalAction `json:"additionalAction"` + PaymentError *PaymentError `json:"paymentError"` +} + +type CompletePosApmPaymentResponse struct { + PaymentId *int64 `json:"paymentId"` + ConversationId *string `json:"conversationId"` + PaymentStatus *PaymentStatus `json:"paymentStatus"` + PaymentError *PaymentError `json:"paymentError"` +} + type DepositPaymentResponse struct { Id *int64 `json:"id"` CreatedDate *TimeResponse `json:"createdDate"` @@ -1540,6 +1600,11 @@ type FraudCheckParameters struct { BuyerEmail string `json:"buyerEmail,omitempty"` } +type PosApmInstallment struct { + Number *int `json:"number,omitempty"` + TotalPrice *float64 `json:"totalPrice,omitempty"` +} + type PaymentItem struct { Name string `json:"name,omitempty"` Price float64 `json:"price,omitempty"` diff --git a/adapter/payment.go b/adapter/payment.go index e9dc512..d10a27a 100644 --- a/adapter/payment.go +++ b/adapter/payment.go @@ -195,6 +195,40 @@ func (api *Payment) CompleteApmPayment(ctx context.Context, request CompleteApmP return response.Data, nil } +func (api *Payment) InitPosApmPayment(ctx context.Context, request InitPosApmPaymentRequest) (*InitPosApmPaymentResponse, error) { + newRequest, err := api.Client.NewRequest(ctx, http.MethodPost, "/payment/v1/pos-apm-payments/init", request) + + if err != nil { + return nil, err + } + + response := &Response[InitPosApmPaymentResponse]{} + err = api.Client.Do(ctx, newRequest, response) + + if err != nil { + return nil, err + } + + return response.Data, nil +} + +func (api *Payment) CompletePosApmPayment(ctx context.Context, request CompletePosApmPaymentRequest) (*CompletePosApmPaymentResponse, error) { + newRequest, err := api.Client.NewRequest(ctx, http.MethodPost, "/payment/v1/pos-apm-payments/complete", request) + + if err != nil { + return nil, err + } + + response := &Response[CompletePosApmPaymentResponse]{} + err = api.Client.Do(ctx, newRequest, response) + + if err != nil { + return nil, err + } + + return response.Data, nil +} + func (api *Payment) Init3DSDepositPayment(ctx context.Context, request DepositPaymentRequest) (*Init3DSPaymentResponse, error) { newRequest, err := api.Client.NewRequest(ctx, http.MethodPost, "/payment/v1/deposits/3ds-init", request) diff --git a/tests/payment_test.go b/tests/payment_test.go index 856fd7f..18a8e30 100644 --- a/tests/payment_test.go +++ b/tests/payment_test.go @@ -464,6 +464,51 @@ func TestPayment_CompleteApmPayment(t *testing.T) { } } +func TestPayment_InitPosApmPayment(t *testing.T) { + request := adapter.InitPosApmPaymentRequest{ + Price: 1.25, + PaidPrice: 1.25, + Currency: craftgate.Currency_TRY, + PaymentGroup: craftgate.PaymentGroup_LISTING_OR_SUBSCRIPTION, + ConversationId: "foo-bar", + PaymentProvider: craftgate.PosApmPaymentProvider_YKB_WORLD_PAY, + CallbackUrl: "https://www.your-website.com/callback", + Items: []craftgate.PaymentItem{ + { + Name: "Item 1", + Price: 1, + ExternalId: "1", + }, + { + Name: "Item 2", + Price: 0.25, + ExternalId: "2", + }, + }, + AdditionalParams: map[string]string{ + "sourceCode": "WEB2QR", + }, + } + res, err := paymentClient.Payment.InitPosApmPayment(context.Background(), request) + _, _ = spew.Printf("%#v\n", res) + + if err != nil { + t.Errorf("Error %s", err) + } +} + +func TestPayment_CompletePosApmPayment(t *testing.T) { + request := adapter.CompletePosApmPaymentRequest{ + PaymentId: 123, + } + res, err := paymentClient.Payment.CompletePosApmPayment(context.Background(), request) + _, _ = spew.Printf("%#v\n", res) + + if err != nil { + t.Errorf("Error %s", err) + } +} + func TestPayment_RetrieveLoyalties(t *testing.T) { request := adapter.RetrieveLoyaltiesRequest{ CardNumber: "4043080000000003",