印度包网
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

196 lines
6.4 KiB

package eanipay
import "strings"
const (
baseURL = "https://gateway.eanishop.com"
// baseURL = "https://gateway.eanishop.com"
payURL = "/pg/v2/payment/create"
queryPayURL = "/pg/v2/payment/query"
withdrawURL = "/pg/v2/payout/create"
queryWithdrawURL = "/pg/v2/payout/query"
appID = "c553240e3e3842ad98eb8ae23c3745b5"
appSecret = "8e77714f16d2487f9846cc6c3432ead5"
)
type PayReq struct {
MerchantTradeNo string `json:"merchantTradeNo"`
Amount string `json:"amount"`
Currency string `json:"currency"`
Description string `json:"description"`
Payer Payer `json:"payer"`
PayMethod struct {
Type string `json:"type"` // UPI
} `json:"payMethod"`
TradeEnv struct {
IP string `json:"ip"`
} `json:"tradeEnv"` // 如果具体环境信息比较复杂,可以直接使用json.RawMessage
MerchantAttach string `json:"merchantAttach,omitempty"` // omitempty表示如果字段为空,则在JSON中不显示
NotifyUrl string `json:"notifyUrl"`
ReturnUrl string `json:"returnUrl"`
}
type Payer struct {
UserID string `json:"userId" validate:"required,max=64"`
Name string `json:"name" validate:"required,max=80"`
Email string `json:"email" validate:"required,email,max=80"`
Phone string `json:"phone" validate:"required,max=20"`
}
type PayResp struct {
Code string `json:"code"`
ErrorMessage string `json:"errorMessage"`
Data PaymentData `json:"data"`
}
type PaymentData struct {
PaymentNo string `json:"paymentNo"`
MerchantTradeNo string `json:"merchantTradeNo"`
Amount string `json:"amount"`
Currency string `json:"currency"`
Action Action `json:"action"`
}
type Action struct {
PayMethodType string `json:"payMethodType"`
Type string `json:"type"`
URL string `json:"url"`
Method string `json:"method"`
}
type PayCallbackReq struct {
Event string `json:"event"`
Code string `json:"code"`
ErrorMessage string `json:"errorMessage"`
Data struct {
PaymentNo string `json:"paymentNo"`
MerchantTradeNo string `json:"merchantTradeNo"`
Amount string `json:"amount"`
Currency string `json:"currency"`
RefundStatus string `json:"refundStatus"`
Status string `json:"status"` // PENDING 待⽀付 PROCESSING ⽀付中 PAID ⽀付成功 FAILURE ⽀付失败 CANCELLED 已取消
MerchantAttach string `json:"merchantAttach"`
CreatedTime string `json:"createdTime"`
PaidTime string `json:"paidTime"`
} `json:"data"`
}
type QueryPayReq struct {
MerchantTradeNo string `json:"merchantTradeNo"`
}
type QueryPayResp struct {
Code string `json:"code"`
ErrorMessage string `json:"errorMessage"`
Data struct {
PaymentNo string `json:"paymentNo"`
MerchantTradeNo string `json:"merchantTradeNo"`
Amount string `json:"amount"`
Currency string `json:"currency"`
RefundStatus string `json:"refundStatus"`
Status string `json:"status"` // PENDING 待⽀付 PROCESSING ⽀付中 PAID ⽀付成功 FAILURE ⽀付失败 CANCELLED 已取消
MerchantAttach string `json:"merchantAttach"`
CreatedTime string `json:"createdTime"`
PaidTime string `json:"paidTime"`
} `json:"data"`
}
type WithdrawReq struct {
MerchantTradeNo string `json:"merchantTradeNo"`
Amount string `json:"amount"`
Currency string `json:"currency"`
Description string `json:"description"`
PayoutMethod struct {
Type string `json:"type"` // BANK_ACCOUNT
Mode string `json:"mode"` // IMPS
BankCode string `json:"bankCode"`
BankName string `json:"bankName"`
AccountNumber string `json:"accountNumber"`
PayeeName string `json:"payeeName"`
PayeePhone string `json:"payeePhone"`
PayeeEmail string `json:"payeeEmail"`
PayeeAddress string `json:"payeeAddress"`
// VPA string `json:"vpa"`
} `json:"payoutMethod"`
MerchantAttach string `json:"merchantAttach,omitempty"`
NotifyUrl string `json:"notifyUrl"`
}
type WithdrawResp struct {
Code string `json:"code"` // OK
ErrorMessage string `json:"errorMessage"`
Data struct {
PayoutNo string `json:"payoutNo"`
MerchantTradeNo string `json:"merchantTradeNo"`
Amount string `json:"amount"`
Currency string `json:"currency"`
} `json:"data"`
}
type WithdrawCallbackReq struct {
Event string `json:"event"`
Code string `json:"code"`
ErrorMessage string `json:"errorMessage"`
Data struct {
PayoutNo string `json:"payoutNo"`
MerchantTradeNo string `json:"merchantTradeNo"`
Amount string `json:"amount"`
Currency string `json:"currency"`
TotalFee string `json:"totalFee"`
Status string `json:"status"` // PENDING 待处理 PROCESSING 处理中 PAID 代付成功 FAILURE 代付失败 REVERSED 代付退票 CANCELLED 代付取消
MerchantAttach string `json:"merchantAttach"`
CreatedTime string `json:"createdTime"`
PaidTime string `json:"paidTime"`
} `json:"data"`
}
type QueryWithdrawReq struct {
MerchantTradeNo string `json:"merchantTradeNo"`
}
type QueryWithdrawResp struct {
Code string `json:"code"`
ErrorMessage string `json:"errorMessage"`
Data struct {
PayoutNo string `json:"payoutNo"`
MerchantTradeNo string `json:"merchantTradeNo"`
Amount string `json:"amount"`
Currency string `json:"currency"`
TotalFee string `json:"totalFee"`
Status string `json:"status"` // PENDING 待处理 PROCESSING 处理中 PAID 代付成功 FAILURE 代付失败 REVERSED 代付退票 CANCELLED 代付取消
MerchantAttach string `json:"merchantAttach"`
CreatedTime string `json:"createdTime"`
PaidTime string `json:"paidTime"`
} `json:"data"`
}
type SignData struct {
AppId string
Sign string
Timestamp string
Nonce string
}
func parseData(input string) SignData {
input = strings.TrimPrefix(input, "V2_SHA256 ")
pairs := strings.Split(input, ",")
data := SignData{}
for _, pair := range pairs {
keyValue := strings.Split(pair, "=")
if len(keyValue) == 2 {
key := keyValue[0]
value := keyValue[1]
switch key {
case "appId":
data.AppId = value
case "sign":
data.Sign = value
case "timestamp":
data.Timestamp = value
case "nonce":
data.Nonce = value
}
}
}
return data
}