Files
waf-platform/EdgeUser/internal/web/actions/default/finance/pay/index.go

95 lines
2.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
package pay
import (
"errors"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/userconfigs"
"github.com/TeaOSLab/EdgeUser/internal/ttlcache"
"github.com/TeaOSLab/EdgeUser/internal/web/actions/actionutils"
"github.com/iwind/TeaGo/maps"
"github.com/iwind/TeaGo/rands"
stringutil "github.com/iwind/TeaGo/utils/string"
"github.com/skip2/go-qrcode"
"time"
)
var qrcodeKeySalt = rands.HexString(32)
type IndexAction struct {
actionutils.ParentAction
}
func (this *IndexAction) Init() {
this.Nav("", "", "")
}
func (this *IndexAction) RunGet(params struct {
Code string
From string
ReturnURL string
}) {
this.Data["fromURL"] = params.From
this.Data["returnURL"] = params.ReturnURL
orderResp, err := this.RPC().UserOrderRPC().FindEnabledUserOrder(this.UserContext(), &pb.FindEnabledUserOrderRequest{Code: params.Code})
if err != nil {
this.ErrorPage(err)
return
}
var order = orderResp.UserOrder
if order == nil {
this.ErrorPage(errors.New("can not find order with code '" + params.Code + "'"))
return
}
var methodMap = maps.Map{
"name": "",
}
var qrcodeKey = ""
var qrcodeTitle = ""
if order.OrderMethod != nil {
methodMap = maps.Map{
"name": order.OrderMethod.Name,
}
qrcodeTitle = order.OrderMethod.QrcodeTitle
if len(qrcodeTitle) == 0 && len(order.OrderMethod.ParentCode) > 0 {
var parentDef = userconfigs.FindPresetPayMethodWithCode(order.OrderMethod.ParentCode)
if parentDef != nil {
qrcodeTitle = parentDef.QRCodeTitle
}
}
if order.OrderMethod.ClientType == userconfigs.PayClientTypeMobile {
data, err := qrcode.Encode(order.PayURL, qrcode.Medium, 256)
if err != nil {
this.ErrorPage(errors.New("二维码生成失败:" + err.Error()))
return
}
qrcodeKey = stringutil.Md5(qrcodeKeySalt + ":order:" + order.Code)
ttlcache.DefaultCache.Write(qrcodeKey, data, time.Now().Unix()+600 /** 只保留10分钟防止内存占用过高 **/)
}
}
this.Data["order"] = maps.Map{
"code": order.Code,
"amount": order.Amount,
"canPay": order.CanPay,
"payURL": order.PayURL,
"typeName": userconfigs.FindOrderTypeName(order.Type),
"method": methodMap,
"isExpired": order.IsExpired,
"status": order.Status,
"statusName": userconfigs.FindOrderStatusName(order.Status),
"urlQRCodeKey": qrcodeKey,
"qrcodeTitle": qrcodeTitle,
}
this.Show()
}