Skip to content

Commit

Permalink
Add BKM Express Integration
Browse files Browse the repository at this point in the history
  • Loading branch information
deryacakmak committed Jul 1, 2024
1 parent 1c27e83 commit 1e90ff2
Show file tree
Hide file tree
Showing 4 changed files with 148 additions and 0 deletions.
59 changes: 59 additions & 0 deletions adapter/bkm_express.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package adapter

import (
"context"
"fmt"
"net/http"
)

type BkmExpress struct {
Client *Client
}

func (api *BkmExpress) Init(ctx context.Context, request InitBkmExpressRequest) (*InitBkmExpressResponse, error) {
newRequest, err := api.Client.NewRequest(ctx, http.MethodPost, "/payment/v1/bkm-express/init", request)
if err != nil {
return nil, err
}

response := &Response[InitBkmExpressResponse]{}
err = api.Client.Do(ctx, newRequest, response)
if err != nil {
return nil, err
}

return response.Data, nil
}

func (api *BkmExpress) Complete(ctx context.Context, request CompleteBkmExpressRequest) (*PaymentResponse, error) {
newRequest, err := api.Client.NewRequest(ctx, http.MethodPost, "/payment/v1/bkm-express/complete", request)
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
}

func (api *BkmExpress) RetrievePayment(ctx context.Context, ticketId string) error {
newRequest, err := api.Client.NewRequest(ctx, http.MethodGet, fmt.Sprintf("/payment/v1/bkm-express/payments/%s", ticketId), nil)
if err != nil {
return fmt.Errorf("failed to create new request: %w", err)
}
response := &Void{}

Check failure on line 48 in adapter/bkm_express.go

View workflow job for this annotation

GitHub Actions / build

SA4031(related information): this is the value of response (staticcheck)

Check failure on line 48 in adapter/bkm_express.go

View workflow job for this annotation

GitHub Actions / build

SA4031(related information): this is the value of response (staticcheck)

err = api.Client.Do(ctx, newRequest, response)
if err != nil {
return fmt.Errorf("request failed: %w", err)
}
if response == nil {

Check failure on line 54 in adapter/bkm_express.go

View workflow job for this annotation

GitHub Actions / build

SA4031: this nil check is never true (staticcheck)

Check failure on line 54 in adapter/bkm_express.go

View workflow job for this annotation

GitHub Actions / build

SA4031: this nil check is never true (staticcheck)
return fmt.Errorf("empty response")
}

return nil
}
1 change: 1 addition & 0 deletions adapter/craftgate.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ type Client struct {
BankAccountTracking *BankAccountTracking
Merchant *Merchant
Juzdan *Juzdan
BkmExpress *BkmExpress
}

func New(apiKey, apiSecret, baseURL string, opts ...ClientOption) (*Client, error) {
Expand Down
25 changes: 25 additions & 0 deletions adapter/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -1284,6 +1284,12 @@ type CheckMasterpassUserResponse struct {
AccountStatus *string `json:"accountStatus"`
}

type InitBkmExpressResponse struct {
Id *string `json:"id"`
Path *string `json:"path"`
Token *string `json:"token"`
}

type InstallmentPrice struct {
InstallmentPrice *float64 `json:"installmentPrice"`
BankCommissionRate *float64 `json:"bankCommissionRate"`
Expand Down Expand Up @@ -1950,6 +1956,19 @@ type MasterpassCreatePayment struct {
AdditionalParams map[string]interface{} `json:"additionalParams,omitempty"`
}

type InitBkmExpressRequest 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"`
PaymentPhase PaymentPhase `json:"paymentPhase,omitempty"`
BuyerMemberId int64 `json:"buyerMemberId,omitempty"`
BankOrderId string `json:"bankOrderId,omitempty"`
Items []PaymentItem `json:"items"`
EnabledInstallment bool `json:"enabledInstallments"`
}

type CreateMerchantRequest struct {
Name string `json:"name"`
LegalCompanyTitle string `json:"legalCompanyTitle"`
Expand All @@ -1962,6 +1981,12 @@ type CreateMerchantRequest struct {
ContactPhoneNumber string `json:"contactPhoneNumber"`
}

type CompleteBkmExpressRequest struct {
Status bool `json:"status"`
Message string `json:"message"`
TicketId string `json:"ticketId"`
}

type MerchantApiCredential struct {
Name string `json:"name"`
ApiKey string `json:"apiKey"`
Expand Down
63 changes: 63 additions & 0 deletions tests/bkm_express_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package tests

import (
"context"
"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"
"testing"
)

var bkmExpressClient, _ = craftgate.New("api-key", "secret-key", "https://sandbox-api.craftgate.io")

func TestBkm_Express_Init(t *testing.T) {
request := adapter.InitBkmExpressRequest{
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",
},
},
}
res, err := bkmExpressClient.BkmExpress.Init(context.Background(), request)
_, _ = spew.Printf("%#v\n", res)

if err != nil {
t.Errorf("Error %s", err)
}
}

func TestBkm_Express_Complete(t *testing.T) {
request := adapter.CompleteBkmExpressRequest{
Status: true,
Message: "İşlem Başarılı",
TicketId: "404308dcfdc163-0545-46d7-8f86-5a11718e56ec",
}

res, err := bkmExpressClient.BkmExpress.Complete(context.Background(), request)

require.NotNil(t, res.AuthCode)
require.NotNil(t, res.HostReference)
if err != nil {
t.Errorf("Error %s", err)
}
}

func TestBkm_Express_RetrievePayment(t *testing.T) {
err := bkmExpressClient.BkmExpress.RetrievePayment(context.Background(), "dcfdc163-0545-46d7-8f86-5a11718e56ec")
if err != nil {
t.Fatalf("RetrievePayment failed: %v", err)
}
}

0 comments on commit 1e90ff2

Please sign in to comment.