Skip to content

Commit

Permalink
Adds instant transfer with Compay integration as apm (#78)
Browse files Browse the repository at this point in the history
* Adds instant transfer with Compay integration as apm

* Update

* Update

* Update
  • Loading branch information
semihshn committed Mar 21, 2024
1 parent ea59525 commit 5226ed3
Show file tree
Hide file tree
Showing 3 changed files with 123 additions and 41 deletions.
97 changes: 56 additions & 41 deletions adapter/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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"`
Expand Down Expand Up @@ -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"`
Expand Down Expand Up @@ -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 {
Expand Down
14 changes: 14 additions & 0 deletions adapter/payment.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
53 changes: 53 additions & 0 deletions tests/instant_transfer_payment_test.go
Original file line number Diff line number Diff line change
@@ -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)
}
}

0 comments on commit 5226ed3

Please sign in to comment.