diff --git a/gateways/paygent/paygent.go b/gateways/paygent/paygent.go index 1abbd4d..1256312 100644 --- a/gateways/paygent/paygent.go +++ b/gateways/paygent/paygent.go @@ -588,3 +588,83 @@ func (paygent *Paygent) PayPayCancelAndRefundMessage(transactionID string, amoun response.Params = results.Params return response, err } + +func (paygent *Paygent) ApplePayAuth(amount int, applePayToken string, params gomerchant.AuthorizeParams) (gomerchant.AuthorizeResponse, error) { + var ( + response gomerchant.AuthorizeResponse + requestParams = gomerchant.Params{ + "trading_id": params.OrderID, + "payment_amount": amount, + //Fixed value, 10 means one time payment + "payment_class": 10, + "apple_pay_payment_token_data": applePayToken, + } + ) + + results, err := paygent.Request("320", requestParams) + if err == nil { + if paymentID, ok := results.Get("payment_id"); ok { + response.TransactionID = fmt.Sprint(paymentID) + } + } + response.Params = results.Params + return response, err +} + +func (paygent *Paygent) ApplePayCapture(transactionID string, params gomerchant.CaptureParams) (gomerchant.CaptureResponse, error) { + var ( + response gomerchant.CaptureResponse + requestParams = gomerchant.Params{"payment_id": transactionID} + ) + + results, err := paygent.Request("322", requestParams) + + if err == nil { + if paymentID, ok := results.Get("payment_id"); ok { + response.TransactionID = fmt.Sprint(paymentID) + } + } + response.Params = results.Params + + return response, err +} + +func (paygent *Paygent) ApplePayVoid(transactionID string, params gomerchant.VoidParams) (response gomerchant.VoidResponse, err error) { + var results Response + + if params.Captured { + results, err = paygent.Request("323", gomerchant.Params{"payment_id": transactionID}) + } else { + results, err = paygent.Request("321", gomerchant.Params{"payment_id": transactionID}) + } + + response.Params = results.Params + if paymentID, ok := getPaymentID(results); ok { + response.TransactionID = paymentID + } + + return response, err +} + +func (paygent *Paygent) ApplePayRefund(transactionID string, amount uint, params gomerchant.RefundParams) (response gomerchant.RefundResponse, err error) { + var ( + results Response + requestParams = gomerchant.Params{ + "payment_id": transactionID, + "payment_amount": amount, + } + ) + + if params.Captured { + results, err = paygent.Request("325", requestParams) + } else { + results, err = paygent.Request("324", requestParams) + } + + response.Params = results.Params + if paymentID, ok := getPaymentID(results); ok { + response.TransactionID = paymentID + } + + return response, err +} diff --git a/gateways/paygent/url.go b/gateways/paygent/url.go index 027987c..685802f 100644 --- a/gateways/paygent/url.go +++ b/gateways/paygent/url.go @@ -46,4 +46,11 @@ var TelegramServiceURLs = map[string]string{ "420": "/n/paypay/request", "421": "/n/paypay/request", "422": "/n/paypay/request", + //apple pay + "320": "/n/applepay/request", + "321": "/n/applepay/request", + "322": "/n/applepay/request", + "323": "/n/applepay/request", + "324": "/n/applepay/request", + "325": "/n/applepay/request", }