From 559179fa3c7cec46aab1308a0f622491241dd7c0 Mon Sep 17 00:00:00 2001 From: Imre Nagi Date: Thu, 28 May 2020 20:29:38 +0700 Subject: [PATCH 1/2] Add request builder for all xendit VA Signed-off-by: Imre Nagi --- datastore/inmemory/config.go | 3 ++- example/server/payment-methods.yml | 15 +++++++++++++-- gateway/midtrans/facade.go | 2 +- gateway/xendit/bca.go | 24 ++++++++++++++++++++++++ gateway/xendit/bni.go | 24 ++++++++++++++++++++++++ gateway/xendit/bri.go | 24 ++++++++++++++++++++++++ gateway/xendit/facade.go | 10 ++++++++++ gateway/xendit/mandiri.go | 24 ++++++++++++++++++++++++ gateway/xendit/permata.go | 24 ++++++++++++++++++++++++ manage/charger.go | 3 +-- types.go | 3 ++- 11 files changed, 149 insertions(+), 7 deletions(-) create mode 100644 gateway/xendit/bca.go create mode 100644 gateway/xendit/bni.go create mode 100644 gateway/xendit/bri.go create mode 100644 gateway/xendit/mandiri.go create mode 100644 gateway/xendit/permata.go diff --git a/datastore/inmemory/config.go b/datastore/inmemory/config.go index e1d17f6..f4234cc 100644 --- a/datastore/inmemory/config.go +++ b/datastore/inmemory/config.go @@ -78,8 +78,9 @@ func (r PaymentConfigRepository) FindByPaymentType(ctx context.Context, paymentT case payment.SourceBCAVA, payment.SourcePermataVA, payment.SourceBNIVA, + payment.SourceBRIVA, payment.SourceOtherVA, - payment.SourceEchannel: + payment.SourceMandiriVA: for _, bt := range r.config.BankTransfers { if bt.PaymentType == paymentType { return &bt, nil diff --git a/example/server/payment-methods.yml b/example/server/payment-methods.yml index f74a8af..a13fade 100644 --- a/example/server/payment-methods.yml +++ b/example/server/payment-methods.yml @@ -34,6 +34,17 @@ card_payment: val_currency: 2200 currency: "IDR" bank_transfers: + - gateway: xendit + payment_type: "bri_va" + display_name: "BRI" + admin_fee: + IDR: + val_percentage: 0 + val_currency: 4000 + currency: "IDR" + waiting_time: + duration: 1 + unit: day - gateway: midtrans payment_type: "bca_va" display_name: "BCA" @@ -46,8 +57,8 @@ bank_transfers: duration: 1 unit: day - gateway: midtrans - payment_type: "echannel" - display_name: "Mandiri Bill" + payment_type: "mandiri_va" + display_name: "Mandiri" admin_fee: IDR: val_percentage: 0 diff --git a/gateway/midtrans/facade.go b/gateway/midtrans/facade.go index b959251..4f361e2 100644 --- a/gateway/midtrans/facade.go +++ b/gateway/midtrans/facade.go @@ -18,7 +18,7 @@ func NewSnapRequestFromInvoice(inv *invoice.Invoice) (*gomidtrans.SnapReq, error reqBuilder, err = NewBCAVA(snapRequestBuilder) case payment.SourcePermataVA: reqBuilder, err = NewPermataVA(snapRequestBuilder) - case payment.SourceEchannel: + case payment.SourceMandiriVA: reqBuilder, err = NewMandiriBill(snapRequestBuilder) case payment.SourceBNIVA: reqBuilder, err = NewBNIVA(snapRequestBuilder) diff --git a/gateway/xendit/bca.go b/gateway/xendit/bca.go new file mode 100644 index 0000000..1831da0 --- /dev/null +++ b/gateway/xendit/bca.go @@ -0,0 +1,24 @@ +package xendit + +import ( + xinvoice "github.com/xendit/xendit-go/invoice" +) + +func NewBCAVAInvoice(rb *InvoiceRequestBuilder) (*BCAVAInvoice, error) { + return &BCAVAInvoice{ + rb: rb, + }, nil +} + +type BCAVAInvoice struct { + rb *InvoiceRequestBuilder +} + +func (o *BCAVAInvoice) Build() (*xinvoice.CreateParams, error) { + o.rb.AddPaymentMethod("BCA") + req, err := o.rb.Build() + if err != nil { + return nil, err + } + return req, nil +} diff --git a/gateway/xendit/bni.go b/gateway/xendit/bni.go new file mode 100644 index 0000000..8ad8770 --- /dev/null +++ b/gateway/xendit/bni.go @@ -0,0 +1,24 @@ +package xendit + +import ( + xinvoice "github.com/xendit/xendit-go/invoice" +) + +func NewBNIVAInvoice(rb *InvoiceRequestBuilder) (*BNIVAInvoice, error) { + return &BNIVAInvoice{ + rb: rb, + }, nil +} + +type BNIVAInvoice struct { + rb *InvoiceRequestBuilder +} + +func (o *BNIVAInvoice) Build() (*xinvoice.CreateParams, error) { + o.rb.AddPaymentMethod("BNI") + req, err := o.rb.Build() + if err != nil { + return nil, err + } + return req, nil +} diff --git a/gateway/xendit/bri.go b/gateway/xendit/bri.go new file mode 100644 index 0000000..a8967f0 --- /dev/null +++ b/gateway/xendit/bri.go @@ -0,0 +1,24 @@ +package xendit + +import ( + xinvoice "github.com/xendit/xendit-go/invoice" +) + +func NewBRIVAInvoice(rb *InvoiceRequestBuilder) (*BRIVAInvoice, error) { + return &BRIVAInvoice{ + rb: rb, + }, nil +} + +type BRIVAInvoice struct { + rb *InvoiceRequestBuilder +} + +func (o *BRIVAInvoice) Build() (*xinvoice.CreateParams, error) { + o.rb.AddPaymentMethod("BRI") + req, err := o.rb.Build() + if err != nil { + return nil, err + } + return req, nil +} diff --git a/gateway/xendit/facade.go b/gateway/xendit/facade.go index 730e66a..cddfb0f 100644 --- a/gateway/xendit/facade.go +++ b/gateway/xendit/facade.go @@ -41,6 +41,16 @@ func NewInvoiceRequestFromInvoice(inv *invoice.Invoice) (*xinvoice.CreateParams, reqBuilder, err = NewOVOInvoice(req) case payment.SourceAlfamart: reqBuilder, err = NewAlfamartInvoice(req) + case payment.SourceBCAVA: + reqBuilder, err = NewBCAVAInvoice(req) + case payment.SourceBRIVA: + reqBuilder, err = NewBRIVAInvoice(req) + case payment.SourceBNIVA: + reqBuilder, err = NewBNIVAInvoice(req) + case payment.SourcePermataVA: + reqBuilder, err = NewPermataVAInvoice(req) + case payment.SourceMandiriVA: + reqBuilder, err = NewMandiriVAInvoice(req) } if err != nil { return nil, err diff --git a/gateway/xendit/mandiri.go b/gateway/xendit/mandiri.go new file mode 100644 index 0000000..29d0897 --- /dev/null +++ b/gateway/xendit/mandiri.go @@ -0,0 +1,24 @@ +package xendit + +import ( + xinvoice "github.com/xendit/xendit-go/invoice" +) + +func NewMandiriVAInvoice(rb *InvoiceRequestBuilder) (*MandiriVAInvoice, error) { + return &MandiriVAInvoice{ + rb: rb, + }, nil +} + +type MandiriVAInvoice struct { + rb *InvoiceRequestBuilder +} + +func (o *MandiriVAInvoice) Build() (*xinvoice.CreateParams, error) { + o.rb.AddPaymentMethod("MANDIRI") + req, err := o.rb.Build() + if err != nil { + return nil, err + } + return req, nil +} diff --git a/gateway/xendit/permata.go b/gateway/xendit/permata.go new file mode 100644 index 0000000..a222acc --- /dev/null +++ b/gateway/xendit/permata.go @@ -0,0 +1,24 @@ +package xendit + +import ( + xinvoice "github.com/xendit/xendit-go/invoice" +) + +func NewPermataVAInvoice(rb *InvoiceRequestBuilder) (*PermataVAInvoice, error) { + return &PermataVAInvoice{ + rb: rb, + }, nil +} + +type PermataVAInvoice struct { + rb *InvoiceRequestBuilder +} + +func (o *PermataVAInvoice) Build() (*xinvoice.CreateParams, error) { + o.rb.AddPaymentMethod("PERMATA") + req, err := o.rb.Build() + if err != nil { + return nil, err + } + return req, nil +} diff --git a/manage/charger.go b/manage/charger.go index 92e3c4f..5183cc0 100644 --- a/manage/charger.go +++ b/manage/charger.go @@ -114,8 +114,7 @@ func (c xenditCharger) Create(ctx context.Context, inv *invoice.Invoice) (*invoi PaymentURL: xres.CheckoutURL, TransactionID: xres.EWalletTransactionID, }, nil - case payment.SourceOvo, - payment.SourceAlfamart: + default: invoiceRequest, err := factory.NewInvoiceRequestFromInvoice(inv) if err != nil { return nil, err diff --git a/types.go b/types.go index b782c17..1c7e7c4 100644 --- a/types.go +++ b/types.go @@ -19,13 +19,14 @@ const ( SourcePermataVA PaymentType = "permata_va" SourceBCAVA PaymentType = "bca_va" SourceOtherVA PaymentType = "other_va" - SourceEchannel PaymentType = "echannel" SourceAlfamart PaymentType = "alfamart" SourceGopay PaymentType = "gopay" SourceAkulaku PaymentType = "akulaku" SourceOvo PaymentType = "ovo" SourceDana PaymentType = "dana" SourceLinkAja PaymentType = "linkaja" + SourceBRIVA PaymentType = "bri_va" + SourceMandiriVA PaymentType = "mandiri_va" ) // Bank is a bank From b3433ae1ed0de1938aad52a860535a8ecd3bd2b4 Mon Sep 17 00:00:00 2001 From: Imre Nagi Date: Thu, 28 May 2020 20:33:38 +0700 Subject: [PATCH 2/2] Update readme Signed-off-by: Imre Nagi --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 91662d6..b682c4a 100644 --- a/README.md +++ b/README.md @@ -93,13 +93,13 @@ This tables shows which payment channels that has been implemented by this proxy | ------------------------------- | ----------------------------------- | ------------------------ | | Credit Card without installment | :white_check_mark: | :heavy_exclamation_mark: | | Credit Card with installment | :white_check_mark: | :x: | -| BCA VA | :white_check_mark: | :heavy_exclamation_mark: | -| Mandiri VA | :white_check_mark: | :heavy_exclamation_mark: | -| BNI VA | :white_check_mark: | :heavy_exclamation_mark: | -| Permata VA | :white_check_mark: | :heavy_exclamation_mark: | -| Other VA | :white_check_mark: | :heavy_exclamation_mark: | -| BRI VA | :x: | :heavy_exclamation_mark: | -| Alfamart, Alfamidi, Dan+Dan | :white_check_mark: | :heavy_exclamation_mark: | +| BCA VA | :white_check_mark: | :white_check_mark: | +| Mandiri VA | :white_check_mark: | :white_check_mark: | +| BNI VA | :white_check_mark: | :white_check_mark: | +| Permata VA | :white_check_mark: | :white_check_mark: | +| Other VA | :white_check_mark: | :x: | +| BRI VA | :x: | :white_check_mark: | +| Alfamart, Alfamidi, Dan+Dan | :white_check_mark: | :white_check_mark: | | QRIS | :white_check_mark: via Gopay Option | :x: | | Gopay | :white_check_mark: | :x: | | OVO | :x: | :white_check_mark: |