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: | diff --git a/adapter/model.go b/adapter/model.go index b08c834..9907424 100644 --- a/adapter/model.go +++ b/adapter/model.go @@ -7,6 +7,7 @@ type ApmType string type PaymentProvider string type PosApmPaymentProvider string type PaymentStatus string +type TokenizedCardType string type PaymentSource string type PaymentGroup string type PaymentPhase string @@ -16,6 +17,7 @@ type CardAssociation string type CardExpiryStatus string type Currency string type LoyaltyType string +type MultiPaymentStatus string type PaymentRefundStatus string type RefundStatus string type RefundType string @@ -74,55 +76,80 @@ const ( // apm type declaration const ( - ApmType_PAPARA ApmType = "PAPARA" - ApmType_PAYONEER ApmType = "PAYONEER" - ApmType_SODEXO ApmType = "SODEXO" - ApmType_EDENRED ApmType = "EDENRED" - ApmType_EDENRED_GIFT ApmType = "EDENRED_GIFT" - ApmType_PAYPAL ApmType = "PAYPAL" - ApmType_KLARNA ApmType = "KLARNA" - ApmType_AFTERPAY ApmType = "AFTERPAY" - ApmType_KASPI ApmType = "KASPI" - ApmType_TOMPAY ApmType = "TOMPAY" - ApmType_MASLAK ApmType = "MASLAK" - 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" + ApmType_PAPARA ApmType = "PAPARA" + ApmType_PAYONEER ApmType = "PAYONEER" + ApmType_SODEXO ApmType = "SODEXO" + ApmType_METROPOL ApmType = "METROPOL" + ApmType_EDENRED ApmType = "EDENRED" + ApmType_EDENRED_GIFT ApmType = "EDENRED_GIFT" + ApmType_PAYPAL ApmType = "PAYPAL" + 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" + ApmType_TOM_FINANCE ApmType = "TOM_FINANCE" + ApmType_STRIPE ApmType = "STRIPE" + ApmType_PAYCELL ApmType = "PAYCELL" + ApmType_HASO ApmType = "HASO" + ApmType_MULTINET ApmType = "MULTINET" + ApmType_MULTINET_GIFT ApmType = "MULTINET_GIFT" + ApmType_ALIPAY ApmType = "ALIPAY" + ApmType_APPLEPAY ApmType = "APPLEPAY" + ApmType_GOOGLEPAY ApmType = "GOOGLEPAY" + ApmType_HEPSIPAY_WALLET ApmType = "HEPSIPAY_WALLET" + ApmType_HEPSIPAY_SHOPPING_LOAN ApmType = "HEPSIPAY_SHOPPING_LOAN" + ApmType_ZIP ApmType = "ZIP" + ApmType_CHIPPIN ApmType = "CHIPPIN" + ApmType_ISPAY ApmType = "ISPAY" + ApmType_FUND_TRANSFER ApmType = "FUND_TRANSFER" + ApmType_CASH_ON_DELIVERY ApmType = "CASH_ON_DELIVERY" ) // 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_KASPI PaymentProvider = "KASPI" - PaymentProvider_TOMPAY PaymentProvider = "TOMPAY" - PaymentProvider_APPLEPAY PaymentProvider = "APPLEPAY" - PaymentProvider_GOOGLEPAY PaymentProvider = "GOOGLEPAY" - PaymentProvider_HEPSIPAY PaymentProvider = "HEPSIPAY" - PaymentProvider_STRIPE PaymentProvider = "STRIPE" - 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_METROPOL PaymentProvider = "METROPOL" + 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_MULTINET PaymentProvider = "MULTINET" + PaymentProvider_YKB_WORLD_PAY_SHOPPING_LOAN PaymentProvider = "YKB_WORLD_PAY_SHOPPING_LOAN" + PaymentProvider_ZIP PaymentProvider = "ZIP" + PaymentProvider_CHIPPIN PaymentProvider = "CHIPPIN" + PaymentProvider_ISPAY PaymentProvider = "ISPAY" + PaymentProvider_OFFLINE PaymentProvider = "OFFLINE" ) // pos apm payment provider declaration const ( - PosApmPaymentProvider_YKB_WORLD_PAY PosApmPaymentProvider = "YKB_WORLD_PAY" - PosApmPaymentProvider_APPLEPAY PosApmPaymentProvider = "APPLEPAY" - PosApmPaymentProvider_GOOGLEPAY PosApmPaymentProvider = "GOOGLEPAY" + PosApmPaymentProvider_YKB_WORLD_PAY PosApmPaymentProvider = "YKB_WORLD_PAY" + PosApmPaymentProvider_YKB_WORLD_PAY_SHOPPING_LOAN PosApmPaymentProvider = "YKB_WORLD_PAY_SHOPPING_LOAN" + PosApmPaymentProvider_GOOGLEPAY PosApmPaymentProvider = "GOOGLEPAY" + PosApmPaymentProvider_GARANTI_PAY PosApmPaymentProvider = "GARANTI_PAY" ) // payment status declaration @@ -176,20 +203,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_INSTANT_TRANSFER PaymentMethod = "INSTANT_TRANSFER" + PaymentMethod_STRIPE PaymentMethod = "STRIPE" + PaymentMethod_MULTINET PaymentMethod = "MULTINET" + PaymentMethod_MULTINET_GIFT PaymentMethod = "MULTINET_GIFT" ) // card type declaration @@ -229,6 +257,12 @@ const ( LoyaltyType_POSTPONING_STATEMENT LoyaltyType = "POSTPONING_STATEMENT" ) +// multi payment status declaration +const ( + MultiPaymentStatus_CREATED MultiPaymentStatus = "CREATED" + MultiPaymentStatus_COMPLETED MultiPaymentStatus = "COMPLETED" +) + // payment refund status declaration const ( PaymentRefundStatus_NO_REFUND PaymentRefundStatus = "NO_REFUND" @@ -347,6 +381,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" @@ -522,7 +557,8 @@ const ( // BankAccountTrackingSource declaration const ( - BankAccountTrackingSource_YKB BankAccountTrackingSource = "YKB" + BankAccountTrackingSource_YKB BankAccountTrackingSource = "YKB" + BankAccountTrackingSource_GARANTI BankAccountTrackingSource = "GARANTI" ) const ( @@ -548,6 +584,11 @@ const ( ClientType_M ClientType = "M" ) +// tokenized card type declaration +const ( + TokenizedCardType_APPLE_PAY TokenizedCardType = "APPLE_PAY" +) + // requests type CreatePaymentRequest struct { Price float64 `json:"price,omitempty"` @@ -775,6 +816,13 @@ type UpdateStoredCardRequest struct { ExpireMonth string `json:"expireMonth,omitempty"` } +type CloneStoredCardRequest struct { + SourceCardUserKey string `json:"sourceCardUserKey"` + SourceCardToken string `json:"sourceCardToken"` + TargetCardUserKey string `json:"targetCardUserKey,omitempty"` + TargetMerchantId int64 `json:"targetMerchantId"` +} + type DeleteStoredCardRequest struct { CardUserKey string `json:"cardUserKey,omitempty"` CardToken string `json:"cardToken,omitempty"` @@ -815,6 +863,14 @@ type StoreCardRequest struct { CardUserKey string `json:"cardUserKey,omitempty"` } +type ApplePayMerchantSessionCreateRequest struct { + MerchantIdentifier string `json:"merchantIdentifier,omitempty"` + DisplayName string `json:"displayName,omitempty"` + Initiative string `json:"initiative,omitempty"` + InitiativeContext string `json:"initiativeContext,omitempty"` + ValidationUrl string `json:"validationUrl,omitempty"` +} + type CheckMasterpassUserRequest struct { MasterpassGsmNumber string `json:"masterpassGsmNumber"` } @@ -841,12 +897,13 @@ type SearchPayoutAccountRequest struct { } type MasterpassPaymentTokenGenerateRequest struct { - Msisdn string `json:"msisdn,omitempty"` - UserId string `json:"userId,omitempty"` - BinNumber string `json:"binNumber,omitempty"` - ForceThreeDS bool `json:"forceThreeDS,omitempty"` - CreatePayment MasterpassCreatePayment `json:"createPayment,omitempty"` - Loyalty Loyalty `json:"loyalty,omitempty"` + Msisdn string `json:"msisdn,omitempty"` + UserId string `json:"userId,omitempty"` + BinNumber string `json:"binNumber,omitempty"` + ForceThreeDS bool `json:"forceThreeDS,omitempty"` + CreatePayment MasterpassCreatePayment `json:"createPayment,omitempty"` + Loyalty *Loyalty `json:"loyalty,omitempty"` + MasterpassIntegrationVersion int `json:"masterpassIntegrationVersion,omitempty"` } type MasterpassPaymentCompleteRequest struct { @@ -936,6 +993,7 @@ type PaymentResponse struct { AuthCode *string `json:"authCode"` HostReference *string `json:"hostReference"` TransId *string `json:"transId"` + MdStatus *int `json:"mdStatus"` OrderId *string `json:"orderId"` CardHolderName *string `json:"cardHolderName"` BankCardHolderName *string `json:"bankCardHolderName"` @@ -987,9 +1045,11 @@ 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"` + AdditionalData map[string]any `json:"additionalData"` } type CompleteApmPaymentResponse struct { @@ -1055,6 +1115,7 @@ type PayoutAccountResponse struct { } type MasterpassPaymentThreeDSInitResponse struct { + PaymentId *int64 `json:"paymentId"` ReturnUrl *string `json:"returnUrl"` } @@ -1304,6 +1365,7 @@ type SearchInstallmentsRequest struct { Price float64 `schema:"price"` Currency Currency `schema:"currency"` DistinctCardBrandsWithLowestCommissions bool `schema:"distinctCardBrandsWithLowestCommissions"` + LoyaltyExists bool `schema:"loyaltyExists"` } type InstallmentListResponse struct { @@ -1325,6 +1387,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"` @@ -1341,7 +1413,6 @@ type CreateMemberRequest struct { Address string `json:"address,omitempty"` Email string `json:"email,omitempty"` PhoneNumber string `json:"phoneNumber,omitempty"` - IdentityNumber string `json:"identityNumber,omitempty"` ContactName string `json:"contactName,omitempty"` ContactSurname string `json:"contactSurname,omitempty"` MemberType MemberType `json:"memberType,omitempty"` @@ -1353,6 +1424,7 @@ type CreateMemberRequest struct { IsBuyer bool `json:"isBuyer,omitempty"` IsSubMerchant bool `json:"isSubMerchant,omitempty"` SubMerchantMaximumAllowedNegativeBalance float64 `json:"subMerchantMaximumAllowedNegativeBalance,omitempty"` + SettlementDelayCount int64 `json:"settlementDelayCount,omitempty"` } type UpdateMemberRequest struct { @@ -1360,7 +1432,6 @@ type UpdateMemberRequest struct { Address string `json:"address,omitempty"` Email string `json:"email,omitempty"` PhoneNumber string `json:"phoneNumber,omitempty"` - IdentityNumber string `json:"identityNumber,omitempty"` ContactName string `json:"contactName,omitempty"` ContactSurname string `json:"contactSurname,omitempty"` MemberType MemberType `json:"memberType,omitempty"` @@ -1372,6 +1443,7 @@ type UpdateMemberRequest struct { IsBuyer bool `json:"isBuyer,omitempty"` IsSubMerchant bool `json:"isSubMerchant,omitempty"` SubMerchantMaximumAllowedNegativeBalance float64 `json:"subMerchantMaximumAllowedNegativeBalance,omitempty"` + SettlementDelayCount int64 `json:"settlementDelayCount,omitempty"` } type SearchMembersRequest struct { @@ -1398,7 +1470,6 @@ type MemberResponse struct { Email *string `json:"email"` Address *string `json:"address"` PhoneNumber *string `json:"phoneNumber"` - IdentityNumber *string `json:"identityNumber"` ContactName *string `json:"contactName"` ContactSurname *string `json:"contactSurname"` LegalCompanyTitle *string `json:"legalCompanyTitle"` @@ -1406,16 +1477,20 @@ type MemberResponse struct { TaxNumber *string `json:"taxNumber"` SettlementEarningsDestination *SettlementEarningsDestination `json:"settlementEarningsDestination"` Iban *string `json:"iban"` + SettlementDelayCount *int64 `json:"settlementDelayCount"` } type CreateProductRequest struct { Name string `json:"name"` Channel string `json:"channel,omitempty"` OrderId string `json:"orderId,omitempty"` + ConversationId string `json:"conversationId,omitempty"` + ExternalId string `json:"externalId,omitempty"` Stock int `json:"stock,omitempty"` Price float64 `json:"price"` Currency Currency `json:"currency"` Description string `json:"description,omitempty"` + MultiPayment bool `json:"multiPayment,omitempty"` EnabledInstallments []int `json:"enabledInstallments"` } @@ -1423,6 +1498,8 @@ type UpdateProductRequest struct { Name string `json:"name"` Channel string `json:"channel,omitempty"` OrderId string `json:"orderId,omitempty"` + ConversationId string `json:"conversationId,omitempty"` + ExternalId string `json:"externalId,omitempty"` Stock int `json:"stock,omitempty"` Status Status `json:"status"` Price float64 `json:"price"` @@ -1446,6 +1523,8 @@ type ProductResponse struct { Name *string `json:"name"` Description *string `json:"description"` OrderId *string `json:"orderId,omitempty"` + ConversationId *string `json:"conversationId,omitempty"` + ExternalId *string `json:"externalId,omitempty"` Status *Status `json:"status"` Price *float64 `json:"price"` Currency *Currency `json:"currency"` @@ -1640,13 +1719,14 @@ type BnplPaymentOfferResponse struct { } type BnplBankOffer struct { - BankCode string `json:"bankCode"` - BankName string `json:"bankName"` - BankIconUrl string `json:"bankIconUrl"` - BankTableBannerMessage string `json:"bankTableBannerMessage"` - BankSmallBannerMessage string `json:"bankSmallBannerMessage"` - IsSupportNonCustomer bool `json:"isSupportNonCustomer"` - BnplBankOfferTerm *[]BnplBankOfferTerm `json:"bankOfferTerms"` + BankCode string `json:"bankCode"` + BankName string `json:"bankName"` + BankIconUrl string `json:"bankIconUrl"` + BankTableBannerMessage string `json:"bankTableBannerMessage"` + BankSmallBannerMessage string `json:"bankSmallBannerMessage"` + IsSupportNonCustomer bool `json:"isSupportNonCustomer"` + IsPaymentPlanCalculatedByBank bool `json:"isPaymentPlanCalculatedByBank"` + BnplBankOfferTerm *[]BnplBankOfferTerm `json:"bankOfferTerms"` } type BnplBankOfferTerm struct { @@ -1685,6 +1765,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"` } type SearchPayoutBouncedTransactionsRequest struct { @@ -1903,20 +1985,26 @@ type Loyalty struct { Message *string `json:"message,omitempty"` } +type TokenizedCard struct { + TokenizedCardType TokenizedCardType `json:"type,omitempty"` + Data map[string]interface{} `json:"data,omitempty"` +} + type Card struct { - CardHolderName string `json:"cardHolderName,omitempty"` - CardNumber string `json:"cardNumber,omitempty"` - ExpireYear string `json:"expireYear,omitempty"` - ExpireMonth string `json:"expireMonth,omitempty"` - Cvc string `json:"cvc,omitempty"` - CardAlias string `json:"cardAlias,omitempty"` - CardUserKey string `json:"cardUserKey,omitempty"` - CardToken string `json:"cardToken,omitempty"` - BinNumber string `json:"binNumber,omitempty"` - LastFourDigits string `json:"lastFourDigits,omitempty"` - CardHolderIdentityNumber string `json:"cardHolderIdentityNumber,omitempty"` - Loyalty *Loyalty `json:"loyalty,omitempty"` - StoreCardAfterSuccessPayment bool `json:"storeCardAfterSuccessPayment,omitempty"` + CardHolderName string `json:"cardHolderName,omitempty"` + CardNumber string `json:"cardNumber,omitempty"` + ExpireYear string `json:"expireYear,omitempty"` + ExpireMonth string `json:"expireMonth,omitempty"` + Cvc string `json:"cvc,omitempty"` + CardAlias string `json:"cardAlias,omitempty"` + CardUserKey string `json:"cardUserKey,omitempty"` + CardToken string `json:"cardToken,omitempty"` + BinNumber string `json:"binNumber,omitempty"` + LastFourDigits string `json:"lastFourDigits,omitempty"` + CardHolderIdentityNumber string `json:"cardHolderIdentityNumber,omitempty"` + Loyalty *Loyalty `json:"loyalty,omitempty"` + StoreCardAfterSuccessPayment bool `json:"storeCardAfterSuccessPayment,omitempty"` + TokenizedCard *TokenizedCard `json:"tokenizedCard,omitempty"` } type FraudCheckParameters struct { @@ -2086,6 +2174,18 @@ type MerchantPosCommissionResponse struct { MerchantCommissionRate float64 `json:"merchantCommissionRate"` } +type MultiPaymentResponse struct { + Id *int64 `json:"id"` + MultiPaymentStatus *MultiPaymentStatus `json:"multiPaymentStatus"` + Token *string `json:"token"` + ConversationId *string `json:"conversationId"` + ExternalId *string `json:"externalId"` + PaidPrice *float64 `json:"paidPrice"` + RemainingAmount *float64 `json:"remainingAmount"` + TokenExpireDate *TimeResponse `json:"tokenExpireDate"` + PaymentIds []int64 `json:"paymentIds"` +} + type CreateMerchantPosCommission struct { CardBrandName CardBrand `json:"cardBrandName,omitempty"` Installment int64 `json:"installment"` diff --git a/adapter/payment.go b/adapter/payment.go index 5ca00ea..1925616 100644 --- a/adapter/payment.go +++ b/adapter/payment.go @@ -433,6 +433,22 @@ func (api *Payment) UpdateStoredCard(ctx context.Context, request UpdateStoredCa return response.Data, nil } +func (api *Payment) CloneStoredCard(ctx context.Context, request CloneStoredCardRequest) (*StoredCardResponse, error) { + newRequest, err := api.Client.NewRequest(ctx, http.MethodPost, "/payment/v1/cards/clone", request) + + if err != nil { + return nil, err + } + + response := &Response[StoredCardResponse]{} + err = api.Client.Do(ctx, newRequest, response) + if err != nil { + return nil, err + } + + return response.Data, nil +} + func (api *Payment) DeleteStoredCard(ctx context.Context, request DeleteStoredCardRequest) error { newRequest, err := api.Client.NewRequest(ctx, http.MethodPost, "/payment/v1/cards/delete", request) if err != nil { @@ -553,6 +569,50 @@ 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 (api *Payment) CreateApplePayMerchantSession(ctx context.Context, request ApplePayMerchantSessionCreateRequest) (*interface{}, error) { + newRequest, err := api.Client.NewRequest(ctx, http.MethodPost, "/payment/v1/apple-pay/merchant-sessions", request) + if err != nil { + return nil, err + } + + response := &Response[interface{}]{} + err = api.Client.Do(ctx, newRequest, response) + if err != nil { + return nil, err + } + + return response.Data, nil +} + +func (api *Payment) RetrieveMultiPayment(ctx context.Context, token string) (*MultiPaymentResponse, error) { + newRequest, err := api.Client.NewRequest(ctx, http.MethodGet, fmt.Sprintf("/payment/v1/multi-payments/%s", token), nil) + if err != nil { + return nil, err + } + + response := &Response[MultiPaymentResponse]{} + 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/adapter/settlement_reporting.go b/adapter/settlement_reporting.go index 14b270c..5218f29 100644 --- a/adapter/settlement_reporting.go +++ b/adapter/settlement_reporting.go @@ -11,7 +11,7 @@ type SettlementReporting struct { } func (api *SettlementReporting) SearchPayoutCompletedTransactions(ctx context.Context, request SearchPayoutCompletedTransactionsRequest) (*DataResponse[SearchPayoutCompletedTransactionsResponse], error) { - newRequest, err := api.Client.NewRequest(ctx, http.MethodGet, "/settlement-reporting/v1/settlement-file/payout-completed-transactions", request) + newRequest, err := api.Client.NewRequest(ctx, http.MethodGet, "/settlement-reporting/v2/settlement-file/payout-completed-transactions", request) if err != nil { return nil, err } diff --git a/go.mod b/go.mod index 5f6e7d0..b7b367c 100644 --- a/go.mod +++ b/go.mod @@ -4,8 +4,8 @@ go 1.21 require ( github.com/davecgh/go-spew v1.1.1 - github.com/gorilla/schema v1.2.1 - github.com/stretchr/testify v1.8.4 + github.com/gorilla/schema v1.4.1 + github.com/stretchr/testify v1.9.0 ) require ( diff --git a/go.sum b/go.sum index e0d170a..fa68a8f 100644 --- a/go.sum +++ b/go.sum @@ -1,11 +1,11 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/gorilla/schema v1.2.1 h1:tjDxcmdb+siIqkTNoV+qRH2mjYdr2hHe5MKXbp61ziM= -github.com/gorilla/schema v1.2.1/go.mod h1:Dg5SSm5PV60mhF2NFaTV1xuYYj8tV8NOPRo4FggUMnM= +github.com/gorilla/schema v1.4.1 h1:jUg5hUjCSDZpNGLuXQOgIWGdlgrIdYvgQ0wZtdK1M3E= +github.com/gorilla/schema v1.4.1/go.mod h1:Dg5SSm5PV60mhF2NFaTV1xuYYj8tV8NOPRo4FggUMnM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 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")) }) }) } 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) + } +} diff --git a/tests/onboarding_test.go b/tests/onboarding_test.go index e1bde82..6458faf 100644 --- a/tests/onboarding_test.go +++ b/tests/onboarding_test.go @@ -3,11 +3,12 @@ package tests import ( "context" "fmt" + "testing" + "time" + "github.com/craftgate/craftgate-go-client/adapter" craftgate "github.com/craftgate/craftgate-go-client/adapter" "github.com/davecgh/go-spew/spew" - "testing" - "time" ) var onboardingClient, _ = craftgate.New("api-key", "secret-key", "https://sandbox-api.craftgate.io") @@ -41,7 +42,6 @@ func Test_CreateSubMerchantMember(t *testing.T) { Email: "haluk.demir@example.com", PhoneNumber: "905551111111", Iban: "TR930006701000000001111111", - IdentityNumber: "11111111110", LegalCompanyTitle: "Dem Zeytinyağı Üretim Ltd. Şti.", Name: "Dem Zeytinyağı Üretim Ltd. Şti.", MemberType: craftgate.MemberType_LIMITED_OR_JOINT_STOCK_COMPANY, @@ -68,7 +68,6 @@ func Test_CreateBuyerAndSubMerchantMember(t *testing.T) { Email: "haluk.demir@example.com", PhoneNumber: "905551111111", Iban: "TR930006701000000001111111", - IdentityNumber: "11111111110", LegalCompanyTitle: "Dem Zeytinyağı Üretim Ltd. Şti.", Name: "Dem Zeytinyağı Üretim Ltd. Şti.", MemberType: craftgate.MemberType_LIMITED_OR_JOINT_STOCK_COMPANY, @@ -94,7 +93,6 @@ func Test_UpdateSubMerchantMember(t *testing.T) { Email: "haluk.demir@example.com", PhoneNumber: "905551111111", Iban: "TR930006701000000001111111", - IdentityNumber: "11111111110", LegalCompanyTitle: "Dem Zeytinyağı Üretim Ltd. Şti.", Name: "Dem Zeytinyağı Üretim Ltd. Şti.", MemberType: craftgate.MemberType_LIMITED_OR_JOINT_STOCK_COMPANY, @@ -121,7 +119,6 @@ func Test_UpdateBuyerMember(t *testing.T) { Email: "haluk.demir@example.com", PhoneNumber: "905551111111", Iban: "TR930006701000000001111111", - IdentityNumber: "11111111110", LegalCompanyTitle: "Dem Zeytinyağı Üretim Ltd. Şti.", Name: "Dem Zeytinyağı Üretim Ltd. Şti.", MemberType: craftgate.MemberType_PERSONAL, diff --git a/tests/payment_test.go b/tests/payment_test.go index 881d4f5..7af850d 100644 --- a/tests/payment_test.go +++ b/tests/payment_test.go @@ -399,6 +399,55 @@ func TestPayment_InitApmPayment(t *testing.T) { } } +func TestPayment_InitMetropolApmPayment(t *testing.T) { + request := adapter.InitApmPaymentRequest{ + ApmType: craftgate.ApmType_METROPOL, + Price: 1.25, + PaidPrice: 1.25, + Currency: craftgate.Currency_TRY, + PaymentGroup: craftgate.PaymentGroup_LISTING_OR_SUBSCRIPTION, + ConversationId: "foo-bar", + Items: []craftgate.PaymentItem{ + { + Name: "Item 1", + Price: 1, + ExternalId: "1", + }, + { + Name: "Item 2", + Price: 0.25, + ExternalId: "2", + }, + }, + AdditionalParams: map[string]string{ + "cardNumber": "6375780115068760", + }, + } + res, err := paymentClient.Payment.InitApmPayment(context.Background(), request) + _, _ = spew.Printf("%#v\n", res) + + if err != nil { + t.Errorf("Error %s", err) + } +} + +func TestPayment_CompleteMetropolApmPayment(t *testing.T) { + request := adapter.CompleteApmPaymentRequest{ + PaymentId: 126, + AdditionalParams: map[string]string{ + "otpCode": "00000", + "productId": "1", + "walletId": "1", + }, + } + res, err := paymentClient.Payment.CompleteApmPayment(context.Background(), request) + _, _ = spew.Printf("%#v\n", res) + + if err != nil { + t.Errorf("Error %s", err) + } +} + func TestPayment_InitKlarnaApmPayment(t *testing.T) { request := adapter.InitApmPaymentRequest{ ApmType: craftgate.ApmType_KLARNA, @@ -533,7 +582,7 @@ func TestPayment_CompleteApmPayment(t *testing.T) { } } -func TestPayment_InitPosApmPayment(t *testing.T) { +func TestPayment_InitYkbWorldPayPosApmPayment(t *testing.T) { request := adapter.InitPosApmPaymentRequest{ Price: 1.25, PaidPrice: 1.25, @@ -566,6 +615,39 @@ func TestPayment_InitPosApmPayment(t *testing.T) { } } +func TestPayment_InitGarantiPayPosApmPayment(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_GARANTI_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{ + "integrationType": "WEB2APP", + }, + } + 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, @@ -671,6 +753,20 @@ func TestPayment_UpdateStoredCard(t *testing.T) { } } +func TestPayment_CloneStoredCard(t *testing.T) { + request := adapter.CloneStoredCardRequest{ + SourceCardUserKey: "6bcbac4b-6460-418d-b060-2d9896c08156", + SourceCardToken: "aa57f470-7423-449e-87b7-afb1fba151fb", + TargetMerchantId: 1, + } + res, err := paymentClient.Payment.CloneStoredCard(context.Background(), request) + _, _ = spew.Printf("%#v\n", res) + + if err != nil { + t.Errorf("Error %s", err) + } +} + func TestPayment_DeleteStoredCard(t *testing.T) { request := adapter.DeleteStoredCardRequest{ CardUserKey: "d94018bb-baa9-4418-84f8-760942f669af", @@ -903,3 +999,12 @@ func TestPayment_ApproveBnplPayment(t *testing.T) { t.Errorf("Error %s", err) } } + +func TestPayment_RetrieveMultiPayment(t *testing.T) { + res, err := paymentClient.Payment.RetrieveMultiPayment(context.Background(), "6d7e66b5-9b1c-4c1d-879a-2557b651096e") + _, _ = spew.Printf("%#v\n", res) + + if err != nil { + t.Errorf("Error %s", err) + } +} diff --git a/tests/settlement_reporting_test.go b/tests/settlement_reporting_test.go index d477e32..ef651fd 100644 --- a/tests/settlement_reporting_test.go +++ b/tests/settlement_reporting_test.go @@ -15,6 +15,8 @@ func TestSettlementReporting_SearchPayoutCompletedTransactions(t *testing.T) { request := adapter.SearchPayoutCompletedTransactionsRequest{ StartDate: time.Now().AddDate(0, 0, -180), EndDate: time.Now(), + Page: 0, + Size: 10, } res, err := settlementReportingClient.SettlementReporting.SearchPayoutCompletedTransactions(context.Background(), request)