mirror of
https://github.com/GMWalletApp/epusdt.git
synced 2026-07-07 18:26:16 +00:00
feat(epay): support type selectors and preserve callback type
This commit is contained in:
@@ -71,6 +71,16 @@ func ResolveOrderApiKey(order *mdb.Orders) (*mdb.ApiKey, error) {
|
||||
return row, nil
|
||||
}
|
||||
|
||||
func epayResultType(order *mdb.Orders) string {
|
||||
if order == nil {
|
||||
return "alipay"
|
||||
}
|
||||
if epayType := strings.TrimSpace(order.EpayType); epayType != "" {
|
||||
return epayType
|
||||
}
|
||||
return "alipay"
|
||||
}
|
||||
|
||||
func BuildEPayResultParams(order *mdb.Orders, apiKeyRow *mdb.ApiKey) (map[string]string, error) {
|
||||
if order == nil || apiKeyRow == nil {
|
||||
return nil, constant.EPayReturnSignatureErr
|
||||
@@ -85,7 +95,7 @@ func BuildEPayResultParams(order *mdb.Orders, apiKeyRow *mdb.ApiKey) (map[string
|
||||
PID: pidInt,
|
||||
TradeNo: order.TradeId,
|
||||
OutTradeNo: order.OrderId,
|
||||
Type: "alipay",
|
||||
Type: epayResultType(order),
|
||||
Name: order.Name,
|
||||
Money: fmt.Sprintf("%.4f", order.Amount),
|
||||
TradeStatus: "TRADE_SUCCESS",
|
||||
|
||||
@@ -40,12 +40,13 @@ func TestBuildPublicRedirectURLRewritesOnlyEpayOrders(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildEPayResultParamsMatchesLegacyFields(t *testing.T) {
|
||||
func TestBuildEPayResultParamsUsesOriginalType(t *testing.T) {
|
||||
params, err := BuildEPayResultParams(&mdb.Orders{
|
||||
TradeId: "trade_epay_params",
|
||||
OrderId: "order_epay_params",
|
||||
Name: "VIP",
|
||||
Amount: 1,
|
||||
TradeId: "trade_epay_params",
|
||||
OrderId: "order_epay_params",
|
||||
Name: "VIP",
|
||||
Amount: 1,
|
||||
EpayType: "usdt.tron",
|
||||
}, &mdb.ApiKey{
|
||||
Pid: "1001",
|
||||
SecretKey: "epay-secret",
|
||||
@@ -58,7 +59,7 @@ func TestBuildEPayResultParamsMatchesLegacyFields(t *testing.T) {
|
||||
"pid": "1001",
|
||||
"trade_no": "trade_epay_params",
|
||||
"out_trade_no": "order_epay_params",
|
||||
"type": "alipay",
|
||||
"type": "usdt.tron",
|
||||
"name": "VIP",
|
||||
"money": "1.0000",
|
||||
"trade_status": "TRADE_SUCCESS",
|
||||
@@ -88,6 +89,24 @@ func TestBuildEPayResultParamsMatchesLegacyFields(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildEPayResultParamsFallsBackToAlipayWhenTypeMissing(t *testing.T) {
|
||||
params, err := BuildEPayResultParams(&mdb.Orders{
|
||||
TradeId: "trade_epay_fallback",
|
||||
OrderId: "order_epay_fallback",
|
||||
Name: "VIP",
|
||||
Amount: 1,
|
||||
}, &mdb.ApiKey{
|
||||
Pid: "1001",
|
||||
SecretKey: "epay-secret",
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("BuildEPayResultParams(): %v", err)
|
||||
}
|
||||
if got := params["type"]; got != "alipay" {
|
||||
t.Fatalf("type = %q, want alipay", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildEPayResultParamsRejectsNonNumericPid(t *testing.T) {
|
||||
_, err := BuildEPayResultParams(&mdb.Orders{
|
||||
TradeId: "trade_bad_pid",
|
||||
|
||||
@@ -116,6 +116,10 @@ func CreateTransaction(req *request.CreateTransactionRequest, apiKey *mdb.ApiKey
|
||||
if strings.EqualFold(req.PaymentType, mdb.PaymentTypeEpay) {
|
||||
paymentType = mdb.PaymentTypeEpay
|
||||
}
|
||||
epayType := ""
|
||||
if paymentType == mdb.PaymentTypeEpay {
|
||||
epayType = strings.TrimSpace(req.EpayType)
|
||||
}
|
||||
|
||||
gCreateTransactionLock.Lock()
|
||||
defer gCreateTransactionLock.Unlock()
|
||||
@@ -146,6 +150,7 @@ func CreateTransaction(req *request.CreateTransactionRequest, apiKey *mdb.ApiKey
|
||||
NotifyUrl: notifyURL,
|
||||
RedirectUrl: req.RedirectUrl,
|
||||
Name: req.Name,
|
||||
EpayType: epayType,
|
||||
PaymentType: paymentType,
|
||||
PayProvider: mdb.PaymentProviderOnChain,
|
||||
ApiKeyID: apiKeyID(apiKey),
|
||||
@@ -205,6 +210,7 @@ func CreateTransaction(req *request.CreateTransactionRequest, apiKey *mdb.ApiKey
|
||||
NotifyUrl: notifyURL,
|
||||
RedirectUrl: req.RedirectUrl,
|
||||
Name: req.Name,
|
||||
EpayType: epayType,
|
||||
PaymentType: paymentType,
|
||||
PayProvider: mdb.PaymentProviderOnChain,
|
||||
ApiKeyID: apiKeyID(apiKey),
|
||||
@@ -637,6 +643,7 @@ func SwitchNetwork(req *request.SwitchNetworkRequest) (*response.CheckoutCounter
|
||||
NotifyUrl: "",
|
||||
RedirectUrl: parent.RedirectUrl,
|
||||
Name: parent.Name,
|
||||
EpayType: parent.EpayType,
|
||||
CallBackConfirm: mdb.CallBackConfirmOk, // don't trigger callback on sub-order
|
||||
PaymentType: parent.PaymentType,
|
||||
PayProvider: mdb.PaymentProviderOnChain,
|
||||
@@ -916,6 +923,7 @@ func switchToOkPay(parent *mdb.Orders, token string) (*response.CheckoutCounterR
|
||||
NotifyUrl: "",
|
||||
RedirectUrl: parent.RedirectUrl,
|
||||
Name: parent.Name,
|
||||
EpayType: parent.EpayType,
|
||||
CallBackConfirm: mdb.CallBackConfirmOk,
|
||||
PaymentType: parent.PaymentType,
|
||||
PayProvider: mdb.PaymentProviderOkPay,
|
||||
|
||||
Reference in New Issue
Block a user