xxx
This commit is contained in:
parent
164bf9fe3d
commit
38d27f53bb
|
@ -7,7 +7,7 @@ import (
|
|||
"gitea.cdlsxd.cn/sdk/plugin/proto"
|
||||
"github.com/carlmjohnson/requests"
|
||||
"plugins/alipay_cpn/internal/po"
|
||||
"plugins/utils"
|
||||
"plugins/utils/helper"
|
||||
)
|
||||
|
||||
// 插件通信信息,若不对应则会报错panic
|
||||
|
@ -49,7 +49,7 @@ func (s *AlipayCpnService) Order(ctx context.Context, request *proto.OrderReques
|
|||
err = requests.URL(baseUri).Post().BodyForm(uv).ToString(&sp).Fetch(ctx)
|
||||
|
||||
var response *po.OrderResp
|
||||
sp = utils.ToChinese(sp)
|
||||
sp = helper.ToChinese(sp)
|
||||
if err = json.Unmarshal([]byte(sp), &response); err != nil {
|
||||
return nil, fmt.Errorf("请求异常,msg:" + err.Error())
|
||||
}
|
||||
|
@ -82,7 +82,7 @@ func (s *AlipayCpnService) Query(ctx context.Context, request *proto.QueryReques
|
|||
}
|
||||
|
||||
var response po.QueryResp
|
||||
sp = utils.ToChinese(sp)
|
||||
sp = helper.ToChinese(sp)
|
||||
if err = json.Unmarshal([]byte(sp), &response); err != nil {
|
||||
return nil, fmt.Errorf("请求异常,msg:" + err.Error())
|
||||
}
|
||||
|
|
|
@ -7,8 +7,8 @@ import (
|
|||
"gitea.cdlsxd.cn/sdk/plugin/proto"
|
||||
"github.com/carlmjohnson/requests"
|
||||
"plugins/alipay_redpack/internal/po"
|
||||
"plugins/utils"
|
||||
"plugins/utils/alipay"
|
||||
"plugins/utils/helper"
|
||||
)
|
||||
|
||||
// 插件通信信息,若不对应则会报错panic
|
||||
|
@ -51,7 +51,7 @@ func (s *AlipayRedPackService) Order(ctx context.Context, request *proto.OrderRe
|
|||
err = requests.URL(baseUri).Post().BodyForm(uv).ToString(&sp).Fetch(ctx)
|
||||
|
||||
var response *po.OrderResp
|
||||
sp = utils.ToChinese(sp)
|
||||
sp = helper.ToChinese(sp)
|
||||
if err = json.Unmarshal([]byte(sp), &response); err != nil {
|
||||
return nil, fmt.Errorf("请求异常,msg:" + err.Error())
|
||||
}
|
||||
|
@ -84,7 +84,7 @@ func (s *AlipayRedPackService) Query(ctx context.Context, request *proto.QueryRe
|
|||
}
|
||||
|
||||
var response po.QueryResp
|
||||
sp = utils.ToChinese(sp)
|
||||
sp = helper.ToChinese(sp)
|
||||
if err = json.Unmarshal([]byte(sp), &response); err != nil {
|
||||
return nil, fmt.Errorf("请求异常,msg:" + err.Error())
|
||||
}
|
||||
|
|
|
@ -1,8 +1,25 @@
|
|||
package vo
|
||||
|
||||
// SubCode @link https://docs.qq.com/doc/DTU5mdGJ2b0xndXNJ
|
||||
// @link https://open.unionpay.com/tjweb/api/interface?apiSvcId=3161&id=19701
|
||||
type SubCode string
|
||||
|
||||
const (
|
||||
SubCodeUP07006 SubCode = "UP07006"
|
||||
SubCodeUP07007 SubCode = "UP07007"
|
||||
SubCodeUP07008 SubCode = "UP07008"
|
||||
SubCodeUP07009 SubCode = "UP07009"
|
||||
SubCodeUP07011 SubCode = "UP07011"
|
||||
SubCodeUP07016 SubCode = "UP07016"
|
||||
SubCodeUP07017 SubCode = "UP07017"
|
||||
SubCodeUP07018 SubCode = "UP07018"
|
||||
SubCodeUP07019 SubCode = "UP07019"
|
||||
SubCodeUP07021 SubCode = "UP07021"
|
||||
SubCodeUP07097 SubCode = "UP07097"
|
||||
SubCodeUP07098 SubCode = "UP07098"
|
||||
SubCodeUP07099 SubCode = "UP07099"
|
||||
SubCodeUP07400 SubCode = "UP07400"
|
||||
|
||||
SubCodeUp02094 SubCode = "UP02094"
|
||||
SubCodeUp02099 SubCode = "UP02099"
|
||||
SubCodeUp06003 SubCode = "UP06003"
|
||||
|
@ -49,9 +66,38 @@ const (
|
|||
SubCodeUp00080 SubCode = "UP00080"
|
||||
SubCodeUp02025 SubCode = "UP02025"
|
||||
SubCodeUp02071 SubCode = "UP02071"
|
||||
|
||||
SubCodeUP07600 SubCode = "UP07600"
|
||||
SubCodeUP07601 SubCode = "UP07601"
|
||||
SubCodeUP07602 SubCode = "UP07602"
|
||||
SubCodeUP07603 SubCode = "UP07603"
|
||||
SubCodeUP07604 SubCode = "UP07604"
|
||||
SubCodeUP07605 SubCode = "UP07605"
|
||||
SubCodeUP07606 SubCode = "UP07606"
|
||||
SubCodeUP07607 SubCode = "UP07607"
|
||||
SubCodeUP07608 SubCode = "UP07608"
|
||||
SubCodeUP07609 SubCode = "UP07609"
|
||||
SubCodeUP07610 SubCode = "UP07610"
|
||||
SubCodeUP07611 SubCode = "UP07611"
|
||||
SubCodeUP07612 SubCode = "UP07612"
|
||||
)
|
||||
|
||||
var codeMsg = map[SubCode]string{
|
||||
SubCodeUP07006: "积分撤销业务异常",
|
||||
SubCodeUP07007: "积分退货业务异常",
|
||||
SubCodeUP07008: "积分调账业务异常",
|
||||
SubCodeUP07009: "积分归并业务异常",
|
||||
SubCodeUP07011: "调用外部系统服务异常",
|
||||
SubCodeUP07016: "积分赠送调用封顶规则失败",
|
||||
SubCodeUP07017: "调用热点账户动账失败",
|
||||
SubCodeUP07018: "幂等校验异常",
|
||||
SubCodeUP07019: "账户校验异常",
|
||||
SubCodeUP07021: "积分消费撤销业务异常",
|
||||
SubCodeUP07097: "积分业务系统熔断",
|
||||
SubCodeUP07098: "积分业务系统限流",
|
||||
SubCodeUP07099: "系统异常",
|
||||
SubCodeUP07400: "积分查询为空",
|
||||
|
||||
SubCodeUp02094: "交易重复",
|
||||
SubCodeUp02099: "交易单品信息无效",
|
||||
SubCodeUp06003: "线上折扣活动不存在",
|
||||
|
@ -98,6 +144,20 @@ var codeMsg = map[SubCode]string{
|
|||
SubCodeUp00080: "线上折扣系统内部错误",
|
||||
SubCodeUp02025: "原交易不存在",
|
||||
SubCodeUp02071: "交易无效",
|
||||
|
||||
SubCodeUP07600: "调用规则查询积分信息异常/积分ID不存在",
|
||||
SubCodeUP07601: "调用账户系统查询异常",
|
||||
SubCodeUP07602: "调用账户系统动账异常",
|
||||
SubCodeUP07603: "调用账户系统冲账异常",
|
||||
SubCodeUP07604: "调用热点账户系统异常",
|
||||
SubCodeUP07605: "调用统一用户系统异常",
|
||||
SubCodeUP07606: "调用热点账户系统异常",
|
||||
SubCodeUP07607: "触发用户规则",
|
||||
SubCodeUP07608: "原交易不存在",
|
||||
SubCodeUP07609: "接入方余额不足",
|
||||
SubCodeUP07610: "接入方关联积分Id不匹配",
|
||||
SubCodeUP07611: "用统一用户-用户红包开关权限未开启",
|
||||
SubCodeUP07612: "用统一用户-调用商户权限异常",
|
||||
}
|
||||
|
||||
func (code SubCode) GetMsg() string {
|
||||
|
|
|
@ -45,8 +45,7 @@ func (p *UnionPayCpnService) Order(ctx context.Context, request *proto.OrderRequ
|
|||
return nil, err
|
||||
}
|
||||
var response po.OrderResp
|
||||
url := fmt.Sprintf("%s%s", baseUri, orderMethod)
|
||||
err = requests.URL(url).Headers(headers(c, uv, orderBizMethod)).BodyJSON(uv).ToJSON(&response).Fetch(ctx)
|
||||
err = requests.URL(baseUri + orderMethod).Headers(headers(c, uv, orderBizMethod)).Post().BodyJSON(uv).ToJSON(&response).Fetch(ctx)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("请求异常,msg:" + err.Error())
|
||||
}
|
||||
|
@ -67,11 +66,10 @@ func (p *UnionPayCpnService) Query(ctx context.Context, request *proto.QueryRequ
|
|||
return nil, err
|
||||
}
|
||||
var response po.QueryResp
|
||||
url := fmt.Sprintf("%s%s", baseUri, queryMethod)
|
||||
|
||||
h := new(http.Client)
|
||||
h.Timeout = 20 * time.Second
|
||||
err = requests.URL(url).Client(h).Headers(headers(c, uv, queryBizMethod)).BodyJSON(uv).ToJSON(&response).Fetch(ctx)
|
||||
err = requests.URL(baseUri + queryMethod).Client(h).Headers(headers(c, uv, queryBizMethod)).BodyJSON(uv).ToJSON(&response).Fetch(ctx)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("请求异常,msg:" + err.Error())
|
||||
}
|
||||
|
|
|
@ -39,11 +39,11 @@ func TestOrder(t *testing.T) {
|
|||
request := &proto.OrderRequest{
|
||||
Config: config(),
|
||||
Order: &proto.OrderRequest_Order{
|
||||
OrderNo: "240403164049635931",
|
||||
Account: "18666173766",
|
||||
OrderNo: "202409141047181834200102",
|
||||
Account: "18512869479",
|
||||
Quantity: 1,
|
||||
Amount: 1,
|
||||
Extra: []byte(`{"transDtTm":"20230710165534","validEndDtTm":"20230710165535","transDigest":"测试红包"}`),
|
||||
Extra: []byte(`{"transDtTm":"20240914151102","validEndDtTm":"20241031235959","transDigest":"测试红包"}`),
|
||||
},
|
||||
Product: &proto.OrderRequest_Product{
|
||||
ProductNo: "",
|
||||
|
|
|
@ -1,8 +1,25 @@
|
|||
package vo
|
||||
|
||||
// SubCode @link https://docs.qq.com/doc/DTU5mdGJ2b0xndXNJ
|
||||
// @link https://open.unionpay.com/tjweb/api/interface?apiSvcId=3161&id=19701
|
||||
type SubCode string
|
||||
|
||||
const (
|
||||
SubCodeUP07006 SubCode = "UP07006"
|
||||
SubCodeUP07007 SubCode = "UP07007"
|
||||
SubCodeUP07008 SubCode = "UP07008"
|
||||
SubCodeUP07009 SubCode = "UP07009"
|
||||
SubCodeUP07011 SubCode = "UP07011"
|
||||
SubCodeUP07016 SubCode = "UP07016"
|
||||
SubCodeUP07017 SubCode = "UP07017"
|
||||
SubCodeUP07018 SubCode = "UP07018"
|
||||
SubCodeUP07019 SubCode = "UP07019"
|
||||
SubCodeUP07021 SubCode = "UP07021"
|
||||
SubCodeUP07097 SubCode = "UP07097"
|
||||
SubCodeUP07098 SubCode = "UP07098"
|
||||
SubCodeUP07099 SubCode = "UP07099"
|
||||
SubCodeUP07400 SubCode = "UP07400"
|
||||
|
||||
SubCodeUp02094 SubCode = "UP02094"
|
||||
SubCodeUp02099 SubCode = "UP02099"
|
||||
SubCodeUp06003 SubCode = "UP06003"
|
||||
|
@ -49,9 +66,38 @@ const (
|
|||
SubCodeUp00080 SubCode = "UP00080"
|
||||
SubCodeUp02025 SubCode = "UP02025"
|
||||
SubCodeUp02071 SubCode = "UP02071"
|
||||
|
||||
SubCodeUP07600 SubCode = "UP07600"
|
||||
SubCodeUP07601 SubCode = "UP07601"
|
||||
SubCodeUP07602 SubCode = "UP07602"
|
||||
SubCodeUP07603 SubCode = "UP07603"
|
||||
SubCodeUP07604 SubCode = "UP07604"
|
||||
SubCodeUP07605 SubCode = "UP07605"
|
||||
SubCodeUP07606 SubCode = "UP07606"
|
||||
SubCodeUP07607 SubCode = "UP07607"
|
||||
SubCodeUP07608 SubCode = "UP07608"
|
||||
SubCodeUP07609 SubCode = "UP07609"
|
||||
SubCodeUP07610 SubCode = "UP07610"
|
||||
SubCodeUP07611 SubCode = "UP07611"
|
||||
SubCodeUP07612 SubCode = "UP07612"
|
||||
)
|
||||
|
||||
var codeMsg = map[SubCode]string{
|
||||
SubCodeUP07006: "积分撤销业务异常",
|
||||
SubCodeUP07007: "积分退货业务异常",
|
||||
SubCodeUP07008: "积分调账业务异常",
|
||||
SubCodeUP07009: "积分归并业务异常",
|
||||
SubCodeUP07011: "调用外部系统服务异常",
|
||||
SubCodeUP07016: "积分赠送调用封顶规则失败",
|
||||
SubCodeUP07017: "调用热点账户动账失败",
|
||||
SubCodeUP07018: "幂等校验异常",
|
||||
SubCodeUP07019: "账户校验异常",
|
||||
SubCodeUP07021: "积分消费撤销业务异常",
|
||||
SubCodeUP07097: "积分业务系统熔断",
|
||||
SubCodeUP07098: "积分业务系统限流",
|
||||
SubCodeUP07099: "系统异常",
|
||||
SubCodeUP07400: "积分查询为空",
|
||||
|
||||
SubCodeUp02094: "交易重复",
|
||||
SubCodeUp02099: "交易单品信息无效",
|
||||
SubCodeUp06003: "线上折扣活动不存在",
|
||||
|
@ -98,6 +144,20 @@ var codeMsg = map[SubCode]string{
|
|||
SubCodeUp00080: "线上折扣系统内部错误",
|
||||
SubCodeUp02025: "原交易不存在",
|
||||
SubCodeUp02071: "交易无效",
|
||||
|
||||
SubCodeUP07600: "调用规则查询积分信息异常/积分ID不存在",
|
||||
SubCodeUP07601: "调用账户系统查询异常",
|
||||
SubCodeUP07602: "调用账户系统动账异常",
|
||||
SubCodeUP07603: "调用账户系统冲账异常",
|
||||
SubCodeUP07604: "调用热点账户系统异常",
|
||||
SubCodeUP07605: "调用统一用户系统异常",
|
||||
SubCodeUP07606: "调用热点账户系统异常",
|
||||
SubCodeUP07607: "触发用户规则",
|
||||
SubCodeUP07608: "原交易不存在",
|
||||
SubCodeUP07609: "接入方余额不足",
|
||||
SubCodeUP07610: "接入方关联积分Id不匹配",
|
||||
SubCodeUP07611: "用统一用户-用户红包开关权限未开启",
|
||||
SubCodeUP07612: "用统一用户-调用商户权限异常",
|
||||
}
|
||||
|
||||
func (code SubCode) GetMsg() string {
|
||||
|
|
|
@ -3,7 +3,7 @@ package alipay
|
|||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"plugins/utils"
|
||||
"plugins/utils/helper"
|
||||
"sync"
|
||||
)
|
||||
|
||||
|
@ -49,7 +49,7 @@ func GetCert(appId string) (*CertConfig, error) {
|
|||
return nil, fmt.Errorf("get current dir error: %v", err)
|
||||
}
|
||||
filePath := fmt.Sprintf("%s/%s/%s/%s", dir, "cert", "alipay", appId)
|
||||
if !utils.FileExists(filePath) {
|
||||
if !helper.FileExists(filePath) {
|
||||
return nil, fmt.Errorf("appId[%s]支付宝密钥文件信息不存在,请联系技术人员处理", appId)
|
||||
}
|
||||
mchCertPath := fmt.Sprintf("%s/%s_%s.crt", filePath, "appCertPublicKey", appId)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package utils
|
||||
package helper
|
||||
|
||||
import (
|
||||
"golang.org/x/text/encoding/simplifiedchinese"
|
|
@ -1,4 +1,4 @@
|
|||
package utils
|
||||
package helper
|
||||
|
||||
import "testing"
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
package helper
|
||||
|
||||
import "os"
|
||||
|
||||
const (
|
||||
DefaultTimeZone = "Asia/Shanghai" // 时区
|
||||
)
|
||||
|
||||
func GetEnv(name string) string {
|
||||
return os.Getenv(name)
|
||||
}
|
||||
|
||||
func GetEnvWithDefault(name string, defaultValue string) string {
|
||||
value := GetEnv(name)
|
||||
if value == "" {
|
||||
return defaultValue
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
func GetTimeZone() string {
|
||||
return GetEnvWithDefault("TZ", DefaultTimeZone)
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
package helper
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
DefaultParseFormatLayout = "2006-1-02 15:04:05" // 默认解析时间格式
|
||||
DefaultFormatLayout = "2006-01-02 15:04:05" // 默认时间格式
|
||||
)
|
||||
|
||||
func Parse(localTimeStr string) (time.Time, error) {
|
||||
if localTimeStr == "" {
|
||||
return time.Time{}, fmt.Errorf("时间参数未传递")
|
||||
}
|
||||
layouts := []string{
|
||||
DefaultParseFormatLayout,
|
||||
DefaultFormatLayout,
|
||||
"2006-01-02 15:04",
|
||||
"2006-1-02 15:04",
|
||||
"2006-01-02",
|
||||
"2006-1-02",
|
||||
time.RFC3339Nano,
|
||||
}
|
||||
var (
|
||||
localTime time.Time
|
||||
err error
|
||||
)
|
||||
loc, _ := time.LoadLocation(GetTimeZone())
|
||||
for _, layout := range layouts {
|
||||
localTime, err = time.ParseInLocation(layout, localTimeStr, loc)
|
||||
if err == nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
return time.Time{}, fmt.Errorf("时间转换错误:%v", err)
|
||||
}
|
||||
|
||||
return localTime, nil
|
||||
}
|
||||
|
||||
// Duration [微信]方24小时内未完成验证,自动关闭批次单,24小时后,不再触发查询了
|
||||
// [我方]不管什么渠道,首次间隔5s查询,第二次后间隔5s,第三次间隔10s,大于2分钟后间隔1分钟,大于5分钟后间隔5分钟,总共只查询30分钟,后续不在查询
|
||||
func Duration(t *time.Time) (int, error) {
|
||||
if t == nil {
|
||||
return 5, nil
|
||||
}
|
||||
rt := *t
|
||||
if rt.IsZero() {
|
||||
return 5, nil
|
||||
}
|
||||
duration := time.Since(rt).Abs().Minutes()
|
||||
seconds := time.Since(rt).Abs().Seconds()
|
||||
switch {
|
||||
case duration > 30:
|
||||
return 0, fmt.Errorf("已超过30分钟")
|
||||
case duration > 5:
|
||||
return 5 * 60, nil
|
||||
case duration > 2:
|
||||
return 2 * 60, nil
|
||||
case seconds > 5 && seconds <= 10:
|
||||
return 5, nil
|
||||
default:
|
||||
return 10, nil
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package helper
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestDuration(t *testing.T) {
|
||||
str := "2024-09-13 16:46:00"
|
||||
timeObj, err := Parse(str)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log(timeObj)
|
||||
got, err := Duration(&timeObj)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log(got)
|
||||
}
|
||||
|
||||
func TestParse(t *testing.T) {
|
||||
got, err := Parse("2024-10-31 23:59:59")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log(got)
|
||||
t.Log(time.Now().Format("20060102150405"))
|
||||
t.Log(got.Format("20060102150405"))
|
||||
}
|
|
@ -8,7 +8,7 @@ import (
|
|||
"github.com/wechatpay-apiv3/wechatpay-go/core/option"
|
||||
"github.com/wechatpay-apiv3/wechatpay-go/utils"
|
||||
"os"
|
||||
putils "plugins/utils"
|
||||
putils "plugins/utils/helper"
|
||||
)
|
||||
|
||||
type Server struct {
|
||||
|
|
Loading…
Reference in New Issue