Compare commits

..

20 Commits

Author SHA1 Message Date
wolter c8b7989838 feat: 订单查询和通知,填写卡密 2024-11-29 10:25:51 +08:00
wolter 667651240a feat: 签名校验调整fix 订单查询和通问题 2024-11-28 17:52:57 +08:00
wolter 97d727c3af feat: 签名校验调整fix 2024-11-28 10:08:47 +08:00
wolter 40a0220800 feat: 签名校验调整 2024-11-27 15:29:19 +08:00
wolter 9c125f5562 feat: 设置rpc timeout 2024-11-08 11:47:30 +08:00
wolter 76f7b9e15c feat: Dockerfile 2024-11-07 14:11:00 +08:00
wolter dbbe1acbc2 feat: 记录下单请求数据 2024-11-07 11:48:03 +08:00
wolter d715eb4a30 feat: 过期时间返回 2024-11-07 10:41:04 +08:00
wolter ad517b9d56 feat: 订单查询 2024-11-07 10:13:15 +08:00
wolter 5e8d35df25 feat: Dockerfile 2024-11-06 11:18:56 +08:00
wolter e5dac17d5f feat: 发货通知接口调整 2024-11-06 10:58:51 +08:00
wolter 86b9079ffc feat: 发货通知接口 2024-11-05 18:14:44 +08:00
wolter 7aace0acfa fix: Dockerfile 2024-11-05 17:39:46 +08:00
wolter bdf42ccf99 fix: 下单接口fix 2024-11-05 16:21:50 +08:00
wolter c5d4c7b989 fix: 下单接口 2024-11-05 16:05:45 +08:00
wolter 87314541c5 feat: 更新dockerfile 2024-11-05 14:20:18 +08:00
wolter d97e940255 feat: 添加配置文件1 2024-11-05 14:11:07 +08:00
wolter c25c67c070 feat: 添加配置文件 2024-11-05 13:40:58 +08:00
wolter 13e9f9d023 Merge branch 'refs/heads/master' into feat/dev 2024-11-05 11:01:13 +08:00
wolter 6482c984fc feat: 下单接口 2024-11-05 10:45:15 +08:00
24 changed files with 2241 additions and 558 deletions

View File

@ -1,32 +1,25 @@
FROM registry.cn-chengdu.aliyuncs.com/go_ls/go-zero:v1 AS builder
LABEL stage=gobuilder
ENV CGO_ENABLED 0
ENV GOPROXY https://goproxy.cn,direct
WORKDIR /src
COPY ../.. .
RUN go mod tidy
RUN go build -ldflags="-s -w" -o /src/cmd/api/yl cmd/api/yl.go
FROM registry.cn-chengdu.aliyuncs.com/go_ls/alpha:v1 AS runtime
# 创建最终镜像用于运行编译后的Go程序
FROM alpine
RUN echo 'http://mirrors.ustc.edu.cn/alpine/v3.5/main' > /etc/apk/repositories \
&& echo 'http://mirrors.ustc.edu.cn/alpine/v3.5/community' >>/etc/apk/repositories \
&& apk update && apk add tzdata \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
# 设置工作目录
WORKDIR /app
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
ENV TZ Asia/Shanghai
COPY --from=builder /src /src
# 将编译好的二进制文件从构建阶段复制到运行阶段
COPY cmd/api/yl /app/cmd/api/yl
COPY cmd/api/config /app/cmd/api/config
RUN mkdir "/var/log/supervisor"
ADD ./sh/startup.sh /opt/startup.sh
RUN sed -i 's/\r//g' /opt/startup.sh
ADD ./sh/supervisord.conf /etc/supervisord.conf
WORKDIR /src
EXPOSE 10102
#CMD ["sh","/opt/startup.sh"]
ENV TZ=Asia/Shanghai
# 设置容器启动时运行的命令
ENTRYPOINT ["/app/cmd/api/yl"]

View File

@ -0,0 +1,27 @@
name: yl
Host: 0.0.0.0
Port: 10102
Cache:
- Host: 47.97.27.195:6379
Pass: lansexiongdi@666
Nacos:
Timeout: 5000
Endpoints:
- 120.55.12.245:10001
Sys:
PrimaryKey: "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC5FGH7Tq5u7pA/eh6AjAS0InykvWDJt095go8yK3w7+TRIhSYDdbRHlTgOQm4nWuMPfz3U2Rs1vJQwyyEYdylcYJ2zFLr7Vb1BdvkJ3Kz/2yJ6sz3BNq6xAHaeCKzA/WZxnc/ypfkGlrmfr2tNqCM9CUHUWryihBjLxwRiWLmo0aKgYpKLKYNixLgyqUYAifD3APncAduv6sSjUPMTyXMOlP1DXgVwX6IaUG/yV8/56Ew72Vdi/y4qZmCKMmXq4PovWrs8ISOEuhxbfLrGWbGCAVYPq7d7XaH+AOY4dhJZm7OZ43UGWw80QKGEPkvU4Oquzu8BqBh12md7Zsd6r0XzAgMBAAECggEAcLgTPKUc437z51UOwqeELdlbJFIaYn/8LTrwz1NgpH4P86L0FeNX2sjsjPK0d8+IvmV2WO2o/r9NWbI9A9N/Iz3MjcawYmZDj11QK0t1KZZil2wWzlfpaO+pTnJmFFvASq4ceeHPms2tW63QokkmvQOoTha9EBV3rJQW/XagDEolty57kkfmB31cQHJuAt+BF5EzBqv3q3jnqhsj8J/ddT0hadyKq65u85VomLH92asu/KKMKYYXC8aHjgX48chAmQUAHGM/HCD2owLHwtei2kPWNDx85ecBsglIX3wy0yhH1dnL+o3eeskVLl89ye3QCJPHJBaNUUfbgucgWT0bsQKBgQD1pPMAe31ZXajl9WlHMtn8qhpAGzi/GiiH6YrrHMQECC2GGuAakBko1Vhc+2HU35gwlPOhwMIOCapB0cCqcZVo3+71AKo78YvZLQ7yMuSsp0/Wn2N79NZ6+++wtHGPP9eHrLuWm23l15W7W0RcQptTaQupbculMQZ8b6cAjh6d1QKBgQDA4c4Xl2ePbQdgMMOuKTPPKF3QI1VhCVtxSV+Gj9MZBZedstz9+ZO3oxHhy8D5S9it1hE6dn6/a+7OWibZ/gBr1S0+11LcwKDb7q30dimr9bQs/srIywpoIIN8wVEkX4P9JLOWgQeAtq53IMba+cElef916aqyJpXuIek9lvUQpwKBgQCD7alNMwWpf3H8v4dhY+BLoRgkIfqiOGxYQogHqhVkjPfWNIzz9zxr/9lLZv+uEsBsJzOKRjpyy6ITY5H0eLhj8REnqMnFE/+mDlsenVLPn7Rzcns90ct3leOvpdnvs7wP9CdzxdqKPPUAAQ5/9o3xiFNpFbzv5Zq0LkslMy8iWQKBgQCiRJWctUxzllcRLpVBTPqAOkaKV195zmR2rzLFQvRmZZUDH7nZlQEYCgF+Q2tqj8uPm7tMwumo4wW55pAu7witr19sMbxNaWUrAeao9kvilkfpXsV9HYv4w/m6l+xKvGyPKDRJ1u1X9Nhb8mA5UsqSW8t2CIoJbHrQJwlRPlGXmwKBgQDg4rcsM2PmShOg8lSrHXPATXiZyyqpPJLpXbV6DRKyt7U6KWjyrplQN7yOoIUgsuD2OC/q67y7w1P3OY7X0RDnMr6MtIV0JyBJHg24eyBTqeLai2DqoHlsBOSvpJDZf+g/DXCjvHMWp1h0wqdj3aLthmU0dHM/CEqr/o7d8GwrGQ=="
Url: "http://pre.22233.cn/"
KEY: "da4953198bce4bc8eca9ff7101ae7eb8"
YouleHost: https://vshopmain.sdycsdyc.cn
MarketConfig:
AppId: "2783278"
PosId: "2783278"
SupplierSkuId:
872: "yl20240730"
DB:
Master:
DataSource: root:lansexiongdi6,@tcp(47.97.27.195:3306)/transfer?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai
Slave:
DataSource: root:lansexiongdi6,@tcp(47.97.27.195:3306)/transfer?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai

View File

@ -21,5 +21,13 @@ service yl {
@doc "卡密同步发放接口"
@handler yl
post /key/send (Req) returns (Resp)
@doc "卡密异步发放接口"
@handler ylAsync
post /key/asyncSend (AsyncReq) returns (AsyncResp)
@doc "订单查询接口"
@handler getOrder
post /order/get (GetOrderReq) returns (GetOrderRsp)
}

View File

@ -28,4 +28,47 @@ type Resp{
}
type AsyncReq {
DeliverOrderNo string `json:"deliverOrderNo"` // 平台订单号
Price int64 `json:"price"` //结算价格(单位:厘)
RequestTime int64 `json:"requestTime"` // 请求时间
CreateTime int64 `json:"createTime"` // 订单创建时间,对账时间请用此时间
skuId int64 `json:"skuId"` // 平台sku
SupplierSkuId int64 `json:"supplierSkuId"` // 供货商sku
SupplierId int64 `json:"supplierId"` // 供货商id
Account string `json:"account"` // 充值账号
ExtendParams string `json:"extendParams"` // 额外参数
Count int64 `json:"count"` //数量(此字段只目前支持是金豆,积分等虚拟资产,其他商品不支持)
Sign string `json:"sign"`
}
type AsyncResp {
SupplierOrderNo string `json:"supplierOrderNo"` // 供货商订单号
Msg string `json:"msg"` // 返回信息
Status int `json:"status"` // 错误码: 0-成功 1-失败
}
type GetOrderReq {
DeliverOrderNo string `json:"deliverOrderNo"` // 平台订单号
SupplierId int64 `json:"supplierId"` // 供货商id
RequestTime int64 `json:"requestTime"` // 请求时间
Sign string `json:"sign"`
SupplierOrderNo string `json:"supplierOrderNo"` // 供货商订单号
}
type GetOrderRsp {
DeliverOrderNo string `json:"deliverOrderNo"` // 平台订单号
SupplierOrderNo string `json:"supplierOrderNo"` // 供货商订单号
SupplierSkuId int64 `json:"supplierSkuId"` // 供货商sku
Count int64 `json:"count"` //数量(此字段只目前支持是金豆,积分等虚拟资产,其他商品不支持)
SendStatus int `json:"sendStatus"` // 发货状态: 0-发货中 1-发货成功 2-发货失败
Price int64 `json:"price"` //结算价格(单位:厘)
StatusTime int64 `json:"statusTime"` // 成功/失败时间
Msg string `json:"msg"` // 失败原因
SupplierId int64 `json:"supplierId"` // 供货商id
CardNo string `json:"cardNo"` // 卡号,可为空字符串
CardKey string `json:"cardKey"` // 卡密,可为空字符串
CardExpireTime string `json:"cardExpireTime"` // 卡密过期时间,可为空字符串
CardExchangeUrl string `json:"cardExchangeUrl"` // 卡密兑换地址,可为空字符串
}

View File

@ -14,6 +14,16 @@ type Config struct {
Url string
Key string
}
YouleHost string
MarketConfig MarketConfig
DB struct {
Master struct {
DataSource string
}
Slave struct {
DataSource string
}
}
}
type Rpc struct {
@ -21,5 +31,12 @@ type Rpc struct {
}
type Nacos struct {
Timeout int64
Endpoints []string
}
type MarketConfig struct {
AppId string
PosId string
SupplierSkuId map[string]string
}

View File

@ -1,4 +1,6 @@
// Code generated by goctl. DO NOT EDIT.
// goctl 1.7.2
package handler
import (
@ -15,12 +17,24 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
rest.WithMiddlewares(
[]rest.Middleware{serverCtx.SignMiddleware},
[]rest.Route{
{
// 卡密异步发放接口
Method: http.MethodPost,
Path: "/key/asyncSend",
Handler: yl.YlAsyncHandler(serverCtx),
},
{
// 卡密同步发放接口
Method: http.MethodPost,
Path: "/key/send",
Handler: yl.YlHandler(serverCtx),
},
{
// 订单查询接口
Method: http.MethodPost,
Path: "/order/get",
Handler: yl.GetOrderHandler(serverCtx),
},
}...,
),
rest.WithPrefix("/market"),

View File

@ -0,0 +1,36 @@
package yl
import (
"errors"
"net/http"
"rs/genModel"
"rs/untils/response"
"github.com/zeromicro/go-zero/rest/httpx"
"rs/cmd/api/internal/logic/yl"
"rs/cmd/api/internal/svc"
"rs/cmd/api/internal/types"
)
// 订单查询接口
func GetOrderHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.GetOrderReq
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := yl.NewGetOrderLogic(r.Context(), svcCtx)
resp, err := l.GetOrder(&req)
if err != nil {
if errors.Is(err, genModel.ErrNotFound) {
response.Err(w, response.HTTP_REUEST_NOT_FOUND, "")
} else {
response.Err(w, response.HTTP_REUEST_FAIL, err.Error())
}
} else {
response.Suc(w, response.HTTP_SUCCESS, resp)
}
}
}

View File

@ -0,0 +1,30 @@
package yl
import (
"net/http"
"rs/untils/response"
"github.com/zeromicro/go-zero/rest/httpx"
"rs/cmd/api/internal/logic/yl"
"rs/cmd/api/internal/svc"
"rs/cmd/api/internal/types"
)
// 卡密异步发放接口
func YlAsyncHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.AsyncReq
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := yl.NewYlAsyncLogic(r.Context(), svcCtx)
resp, err := l.YlAsync(&req)
if err != nil {
response.Err(w, response.HTTP_REUEST_FAIL, err.Error())
} else {
response.Suc(w, response.HTTP_SUCCESS, resp)
}
}
}

View File

@ -0,0 +1,135 @@
package yl
import (
"context"
"encoding/json"
"fmt"
"github.com/zeromicro/go-zero/core/logx"
"rs/cmd/api/internal/logic/vo"
"rs/cmd/api/internal/svc"
"rs/cmd/api/internal/types"
"rs/rpc/transfer"
"strings"
"time"
)
type GetOrderLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 订单查询接口
func NewGetOrderLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetOrderLogic {
return &GetOrderLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetOrderLogic) GetOrder(req *types.GetOrderReq) (resp *types.GetOrderRsp, err error) {
var (
status int
)
order, err := l.svcCtx.BaseServiceContext.YlOrdersMarketRepo.FindOneByDeliverOrderNoSupplierOrderNo(l.ctx, req.DeliverOrderNo, req.SupplierOrderNo)
if err != nil {
return
}
if order.Status != 1 {
return nil, fmt.Errorf("订单发货失败")
}
// 响应参数
data := transfer.MarketKeySendRes{}
err = json.Unmarshal([]byte(order.Resp.String), &data)
if err != nil {
return
}
if data.Data.ShortUrl != "" {
status = 1
}
startTime, err := time.Parse("20060102", data.Data.VoucherSdate)
if err != nil {
startTime = time.Now()
}
endTime, err := time.Parse("20060102", data.Data.VoucherEdate)
if err != nil {
endTime = startTime.AddDate(0, 0, 30).Add(23*time.Hour + 59*time.Minute + 59*time.Second)
}
// 请求参数
asyncReq := types.AsyncReq{}
err = json.Unmarshal([]byte(order.Request), &asyncReq)
if err != nil {
return
}
resp = &types.GetOrderRsp{
DeliverOrderNo: req.DeliverOrderNo,
SupplierOrderNo: req.SupplierOrderNo,
SupplierSkuId: asyncReq.SupplierSkuId,
Account: asyncReq.Account,
SendStatus: status,
Price: asyncReq.Price,
StatusTime: order.UpdateTime.Unix(),
Msg: "",
SupplierId: asyncReq.SupplierId,
CardNo: "",
CardKey: l.getCode(data.Data.VoucherCode),
CardExpireTime: endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second).Format(time.DateTime),
CardExchangeUrl: data.Data.ShortUrl,
}
return
}
// 营销系统查询
func (l *GetOrderLogic) GetOrder2(req *types.GetOrderReq) (resp *types.GetOrderRsp, err error) {
request := transfer.MarketQueryReq{
AppId: l.svcCtx.Config.MarketConfig.AppId,
ReqCode: "voucher.query",
MemId: fmt.Sprintf("%d", req.SupplierId),
ReqSerialNo: req.DeliverOrderNo,
Timestamp: time.Unix(req.RequestTime, 0).Format("20060102150405"),
//VoucherId: "yl20240730",
//VoucherCode: "AAAESSGEVVpTHsbe",
}
request.Sign = l.svcCtx.Config.Sys.PrimaryKey
result, err := l.svcCtx.TransferRpc.MarketQuery(l.ctx, &request)
if err != nil {
return
}
if result.ErrCode != vo.RES_SUCCESS {
return nil, fmt.Errorf("请求失败:%v", result.Msg)
}
resp = &types.GetOrderRsp{
DeliverOrderNo: req.DeliverOrderNo,
SupplierOrderNo: req.SupplierOrderNo,
//SupplierSkuId: req,
//Count: req.,
SendStatus: 1,
Price: 0,
StatusTime: 0,
Msg: "",
SupplierId: 0,
CardNo: "",
CardKey: "",
CardExpireTime: "",
CardExchangeUrl: result.Data.VoucherCode,
}
return
}
func (l *GetOrderLogic) getCode(voucherCode string) string {
if strings.Contains(voucherCode, "http") {
temp := strings.Split(strings.TrimSpace(voucherCode), "/")
return temp[len(temp)-1]
}
return voucherCode
}

View File

@ -0,0 +1,278 @@
package yl
import (
"context"
"database/sql"
"encoding/json"
"errors"
"fmt"
"github.com/bytedance/sonic"
"rs/genModel"
"rs/untils/sign"
"rs/cmd/api/internal/logic/vo"
"rs/rpc/transfer"
"rs/untils/httpclient"
"strconv"
"strings"
"time"
"rs/cmd/api/internal/svc"
"rs/cmd/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type YlAsyncLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 卡密异步发放接口
func NewYlAsyncLogic(ctx context.Context, svcCtx *svc.ServiceContext) *YlAsyncLogic {
return &YlAsyncLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *YlAsyncLogic) YlAsync(req *types.AsyncReq) (resp *types.AsyncResp, err error) {
var (
reqData transfer.MarketKeySendReq
VoucherId string
supplierOrderNo = req.DeliverOrderNo
result *transfer.MarketKeySendRes
)
defer func() {
var status int64
var msg string
if err != nil {
status = 2
msg = err.Error()
} else {
status = 1
}
// 记录订单
l.saveOrder(req, result, supplierOrderNo, VoucherId, msg, status)
}()
if v, ok := l.svcCtx.Config.MarketConfig.SupplierSkuId[strconv.Itoa(int(req.SupplierSkuId))]; ok {
VoucherId = v
} else {
return nil, fmt.Errorf("供货商sku 未配置")
}
reqData = transfer.MarketKeySendReq{
AppId: l.svcCtx.Config.MarketConfig.AppId,
ReqCode: "voucher.create",
MemId: fmt.Sprintf("%d", req.SupplierId),
ReqSerialNo: req.DeliverOrderNo,
Timestamp: time.Unix(req.CreateTime, 0).Format("20060102150405"),
PosId: l.svcCtx.Config.MarketConfig.PosId,
VoucherId: VoucherId,
VoucherNum: 1,
//MobileNo: extendParam.MobileNo,
//SendMsg: extendParam.SendMsg,
}
if reqData.SendMsg == "" {
reqData.SendMsg = "2"
}
reqData.Sign = l.svcCtx.Config.Sys.PrimaryKey
result, err = l.svcCtx.TransferRpc.MarketKeySend(l.ctx, &reqData)
if err != nil {
return nil, fmt.Errorf("rpc请求失败:%v", err.Error())
}
if result.ErrCode != vo.RES_SUCCESS {
return nil, fmt.Errorf("请求失败:%v", result.Msg)
}
if result.Data == nil {
return nil, fmt.Errorf("请求失败:%v", result.Msg)
}
if result.Data.VoucherCode == "" {
return nil, fmt.Errorf("请求失败未取到数据:%v", result.Msg)
}
// 异步通知
go func() {
time.Sleep(2 * time.Second)
l.asyncSendMarket(supplierOrderNo, req, result.Data)
}()
return &types.AsyncResp{
Msg: "",
Status: 0,
SupplierOrderNo: supplierOrderNo,
}, nil
}
func (l *YlAsyncLogic) getExchangeCode(voucherCode string) string {
if !strings.Contains(voucherCode, "http") {
return voucherCode
}
temp := strings.Split(voucherCode, "/")
return temp[len(temp)-1]
}
// 返回数据,通知下游系统
func (l *YlAsyncLogic) asyncSendMarket(supplierOrderNo string, asyncReq *types.AsyncReq, data *transfer.MarketKeySendRes_Data) {
startTime, err := time.Parse("20060102", data.VoucherSdate)
if err != nil {
startTime = time.Now()
}
endTime, err := time.Parse("20060102", data.VoucherEdate)
if err != nil {
endTime = startTime.AddDate(0, 0, 30).Add(23*time.Hour + 59*time.Minute + 59*time.Second)
}
var (
reqDataMap map[string]interface{}
header = map[string]string{"Content-Type": "application/json;charset=UTF-8"}
targetUrl = l.svcCtx.Config.YouleHost + "/supplier/order/sendResultNotify"
req = &types.NotifyReq{
DeliverOrderNo: asyncReq.DeliverOrderNo,
SupplierOrderNo: supplierOrderNo,
SupplierSkuId: asyncReq.SupplierSkuId,
RequestTime: time.Now().Unix(),
Account: asyncReq.Account,
Status: 1,
Msg: "",
Price: asyncReq.Price,
SupplierId: asyncReq.SupplierId,
CardNo: "",
CardKey: l.getCode(data.VoucherCode),
CardExpireTime: endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second).Format(time.DateTime),
CardExchangeUrl: data.ShortUrl,
Sign: "",
}
)
b, _ := json.Marshal(req)
err = json.Unmarshal(b, &reqDataMap)
if err != nil {
return
}
req.Sign, err = sign.GetSign(reqDataMap, l.svcCtx.Config.Sys.Key)
if err != nil {
l.Logger.Errorf("签名失败:%v", err.Error())
return
}
body, err := sonic.Marshal(req)
if err != nil {
l.Logger.Errorf("解析json失败:%v", err.Error())
return
}
resp, err := httpclient.FastHttpPost(targetUrl, header, body, 0)
if err != nil {
l.Logger.Errorf("请求失败:%v", err.Error())
return
}
l.Logger.Infof("发货通知完成url=%s,请求数据:%v 请求返回数据:%v", targetUrl, string(body), string(resp))
return
}
// 写入数据
func (l *YlAsyncLogic) saveOrder(req *types.AsyncReq, rsp *transfer.MarketKeySendRes, supplierOrderNo, VoucherId, msg string, status int64) {
// 查询订单
order, err := l.svcCtx.BaseServiceContext.YlOrdersMarketRepo.FindOneByDeliverOrderNoSupplierOrderNo(l.ctx, req.DeliverOrderNo, supplierOrderNo)
if err != nil {
if !errors.Is(err, genModel.ErrNotFound) {
l.Logger.Errorf("supplierOrderNo = %s 查询订单失败:%v", supplierOrderNo, err.Error())
}
}
b, _ := json.Marshal(req)
rp, _ := json.Marshal(rsp)
if order != nil {
// 订单存在,更新
if order.Status != status {
order.Status = status
}
if order.Resp.String != string(rp) {
order.Resp.String = string(rp)
order.Resp.Valid = true
}
if order.Request != string(b) {
order.Request = string(b)
}
if msg != "" {
order.ErrMsg.String += msg
order.ErrMsg.Valid = true
}
if VoucherId != order.VoucherId {
order.VoucherId = VoucherId
}
err = l.svcCtx.BaseServiceContext.YlOrdersMarketRepo.Update(l.ctx, order)
if err != nil {
l.Logger.Errorf("DeliverOrderNo = %s 更新订单失败:%v", order.DeliverOrderNo, err.Error())
}
} else {
// 订单不存在,插入
data := &genModel.YlOrdersMarket{
DeliverOrderNo: req.DeliverOrderNo,
SupplierOrderNo: supplierOrderNo,
Request: string(b),
Resp: sql.NullString{
String: string(rp),
Valid: true,
},
ErrMsg: sql.NullString{
String: msg,
Valid: true,
},
Status: status,
VoucherId: VoucherId,
}
_, err = l.svcCtx.BaseServiceContext.YlOrdersMarketRepo.Insert(l.ctx, data)
if err != nil {
l.Logger.Errorf("data = %s 插入订单失败:%v", data, err.Error())
}
}
}
// 更新状态和响应数据
func (l *YlAsyncLogic) updateOrder(req *types.AsyncReq, rsp *transfer.MarketKeySendRes, supplierOrderNo string, status int64) {
order, err := l.svcCtx.BaseServiceContext.YlOrdersMarketRepo.FindOneByDeliverOrderNoSupplierOrderNo(l.ctx, req.DeliverOrderNo, supplierOrderNo)
if err != nil {
if !errors.Is(err, genModel.ErrNotFound) {
l.Logger.Errorf("data = %s 查询订单失败:%v", order, err.Error())
}
}
if order != nil {
l.Logger.Errorf("DeliverOrderNo = %s 订单已存在", order.DeliverOrderNo)
return
}
r, _ := json.Marshal(rsp)
order.Status = status
order.Resp = sql.NullString{
String: string(r),
Valid: true,
}
err = l.svcCtx.BaseServiceContext.YlOrdersMarketRepo.Update(l.ctx, order)
if err != nil {
l.Logger.Errorf("order = %s 插入订单失败:%v", order, err.Error())
}
}
func (l *YlAsyncLogic) getCode(voucherCode string) string {
if strings.Contains(voucherCode, "http") {
temp := strings.Split(strings.TrimSpace(voucherCode), "/")
return temp[len(temp)-1]
}
return voucherCode
}

View File

@ -6,6 +6,7 @@ import (
"io"
"net/http"
"rs/cmd/api/internal/config"
"rs/cmd/api/internal/types"
"rs/untils/response"
"rs/untils/sign"
)
@ -20,6 +21,11 @@ func NewSignMiddleware(c *config.Config) *SignMiddleware {
}
}
var signMiddleware = map[string]interface{}{
"/market/order/get": new(types.GetOrderReq),
"/market/key/asyncSend": new(types.AsyncReq),
}
func (m *SignMiddleware) Handle(next http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var (
@ -33,6 +39,16 @@ func (m *SignMiddleware) Handle(next http.HandlerFunc) http.HandlerFunc {
if err != nil {
response.Err(w, response.HTTP_AUTH_FAIL, "获取请求参数失败")
}
// 特殊处理, 订单查询接口,只获取需要字段校验
if v, ok := signMiddleware[r.RequestURI]; ok {
err = json.Unmarshal(reqData, v)
if err != nil {
response.Err(w, response.HTTP_AUTH_FAIL, "获取请求参数失败")
return
}
reqData, err = json.Marshal(v)
}
err = json.Unmarshal(reqData, &reqDataMap)
if err != nil {
response.Err(w, response.HTTP_AUTH_FAIL, "获取请求参数失败")
@ -43,6 +59,11 @@ func (m *SignMiddleware) Handle(next http.HandlerFunc) http.HandlerFunc {
if _, ok := reqDataMap["sign"]; !ok {
response.Err(w, response.HTTP_AUTH_FAIL, err.Error())
}
// 订单查询过滤supplierOrderNo 不参与签名
if r.RequestURI == "/market/order/get" {
delete(reqDataMap, "supplierOrderNo")
}
signString := reqDataMap["sign"].(string)
sysSign, err := sign.GetSign(reqDataMap, m.c.Sys.Key)

View File

@ -1,12 +1,14 @@
package svc
import (
"github.com/zeromicro/go-zero/core/stores/sqlx"
"github.com/zeromicro/go-zero/rest"
"github.com/zeromicro/go-zero/zrpc"
_ "github.com/zeromicro/zero-contrib/zrpc/registry/nacos"
"rs/cmd/api/internal/config"
"rs/cmd/api/internal/middleware"
"rs/cmd/api/internal/types"
"rs/genModel"
"rs/rpc/transferClient"
)
@ -16,13 +18,21 @@ type ServiceContext struct {
}
func NewServiceContext(c config.Config) *ServiceContext {
var timeOut int64 = 2000
if c.Nacos.Timeout > 2000 {
timeOut = c.Nacos.Timeout
}
client := transferClient.NewTransfer(zrpc.MustNewClient(zrpc.RpcClientConf{
Endpoints: c.Nacos.Endpoints,
Timeout: timeOut,
}))
sqlConn := sqlx.NewMysql(c.DB.Master.DataSource)
base := types.BaseServiceContext{
Config: c,
TransferRpc: client,
Config: c,
TransferRpc: client,
YlOrdersMarketRepo: genModel.NewYlOrdersMarketModel(sqlConn, c.Cache),
}
return &ServiceContext{
BaseServiceContext: &base,

View File

@ -13,6 +13,7 @@ type BaseServiceContext struct {
Merchant genModel.MerchantModel
TransferOrder genModel.ServerOrderModel
MerchantWechat genModel.MerchantWechatModel
YlOrdersMarketRepo genModel.YlOrdersMarketModel
}
type DecryptReqData struct {
@ -36,3 +37,25 @@ type KeySendExtendParam struct {
MobileNo string `json:"mobileNo"`
SendMsg string `json:"sendMsg"`
}
type NotifyReq struct {
DeliverOrderNo string `json:"deliverOrderNo"` // 平台订单号
SupplierOrderNo string `json:"supplierOrderNo"` // 供货商订单号
SupplierSkuId int64 `json:"supplierSkuId"` // 供货商sku
RequestTime int64 `json:"requestTime"` // 请求时间
Account string `json:"account"` // 充值账号
Status int `json:"status"` //错误码: 1-发货成功 2-发货失败
Msg string `json:"msg"` // 错误信息
Price int64 `json:"price"` //结算价格(单位:厘)
SupplierId int64 `json:"supplierId"` // 供货商id
CardNo string `json:"cardNo"` // 卡号,可为空字符串
CardKey string `json:"cardKey"` // 卡密,可为空字符串
CardExpireTime string `json:"cardExpireTime"` // 卡密过期时间,可为空字符串
CardExchangeUrl string `json:"cardExchangeUrl"` // 卡密兑换地址,可为空字符串
Sign string `json:"sign"`
}
type NotifyResp struct {
Status int `json:"status"` // 错误码: 0-成功 1-失败
Msg string `json:"msg"` // 返回信息
}

View File

@ -1,9 +1,55 @@
// Code generated by goctl. DO NOT EDIT.
// goctl 1.7.2
package types
type AsyncReq struct {
DeliverOrderNo string `json:"deliverOrderNo"` // 平台订单号
Price int64 `json:"price"` //结算价格(单位:厘)
RequestTime int64 `json:"requestTime"` // 请求时间
CreateTime int64 `json:"createTime"` // 订单创建时间,对账时间请用此时间
SkuId int64 `json:"skuId"` // 平台sku
SupplierSkuId int64 `json:"supplierSkuId"` // 供货商sku
SupplierId int64 `json:"supplierId"` // 供货商id
Account string `json:"account"` // 充值账号
ExtendParams string `json:"extendParams"` // 额外参数
Count int64 `json:"count"` //数量(此字段只目前支持是金豆,积分等虚拟资产,其他商品不支持)
Sign string `json:"sign"`
}
type AsyncResp struct {
SupplierOrderNo string `json:"supplierOrderNo"` // 供货商订单号
Msg string `json:"msg"` // 返回信息
Status int `json:"status"` // 错误码: 0-成功 1-失败
}
type Empty struct {
}
type GetOrderReq struct {
DeliverOrderNo string `json:"deliverOrderNo"` // 平台订单号
SupplierId int64 `json:"supplierId"` // 供货商id
RequestTime int64 `json:"requestTime"` // 请求时间
Sign string `json:"sign"`
SupplierOrderNo string `json:"supplierOrderNo"` // 供货商订单号
}
type GetOrderRsp struct {
DeliverOrderNo string `json:"deliverOrderNo"` // 平台订单号
SupplierOrderNo string `json:"supplierOrderNo"` // 供货商订单号
SupplierSkuId int64 `json:"supplierSkuId"` // 供货商sku
Account string `json:"account"` //充值账号
SendStatus int `json:"sendStatus"` // 发货状态: 0-发货中 1-发货成功 2-发货失败
Price int64 `json:"price"` //结算价格(单位:厘)
StatusTime int64 `json:"statusTime"` // 成功/失败时间
Msg string `json:"msg"` // 失败原因
SupplierId int64 `json:"supplierId"` // 供货商id
CardNo string `json:"cardNo"` // 卡号,可为空字符串
CardKey string `json:"cardKey"` // 卡密,可为空字符串
CardExpireTime string `json:"cardExpireTime"` // 卡密过期时间,可为空字符串
CardExchangeUrl string `json:"cardExchangeUrl"` // 卡密兑换地址,可为空字符串
}
type Req struct {
DeliverOrderNo string `json:"deliverOrderNo"`
RequestTime int64 `json:"requestTime"`

View File

@ -3,8 +3,6 @@ package main
import (
"flag"
"fmt"
until "rs/untils"
"rs/cmd/api/internal/config"
"rs/cmd/api/internal/handler"
"rs/cmd/api/internal/svc"
@ -13,7 +11,7 @@ import (
"github.com/zeromicro/go-zero/rest"
)
var configFile = flag.String("f", fmt.Sprintf("%s%s", "etc/", until.GetConfig()), "the config file")
var configFile = flag.String("f", "cmd/api/config/config.yaml", "the config file")
func main() {
flag.Parse()

View File

@ -0,0 +1,27 @@
package genModel
import (
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/sqlx"
)
var _ YlOrdersMarketModel = (*customYlOrdersMarketModel)(nil)
type (
// YlOrdersMarketModel is an interface to be customized, add more methods here,
// and implement the added methods in customYlOrdersMarketModel.
YlOrdersMarketModel interface {
ylOrdersMarketModel
}
customYlOrdersMarketModel struct {
*defaultYlOrdersMarketModel
}
)
// NewYlOrdersMarketModel returns a model for the database table.
func NewYlOrdersMarketModel(conn sqlx.SqlConn, c cache.CacheConf, opts ...cache.Option) YlOrdersMarketModel {
return &customYlOrdersMarketModel{
defaultYlOrdersMarketModel: newYlOrdersMarketModel(conn, c, opts...),
}
}

View File

@ -0,0 +1,154 @@
// Code generated by goctl. DO NOT EDIT.
// versions:
// goctl version: 1.7.2
package genModel
import (
"context"
"database/sql"
"fmt"
"strings"
"time"
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/sqlc"
"github.com/zeromicro/go-zero/core/stores/sqlx"
"github.com/zeromicro/go-zero/core/stringx"
)
var (
ylOrdersMarketFieldNames = builder.RawFieldNames(&YlOrdersMarket{})
ylOrdersMarketRows = strings.Join(ylOrdersMarketFieldNames, ",")
ylOrdersMarketRowsExpectAutoSet = strings.Join(stringx.Remove(ylOrdersMarketFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), ",")
ylOrdersMarketRowsWithPlaceHolder = strings.Join(stringx.Remove(ylOrdersMarketFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), "=?,") + "=?"
cacheTransferYlOrdersMarketIdPrefix = "cache:transfer:ylOrdersMarket:id:"
cacheTransferYlOrdersMarketDeliverOrderNoSupplierOrderNoPrefix = "cache:transfer:ylOrdersMarket:deliverOrderNo:supplierOrderNo:"
)
type (
ylOrdersMarketModel interface {
Insert(ctx context.Context, data *YlOrdersMarket) (sql.Result, error)
FindOne(ctx context.Context, id uint64) (*YlOrdersMarket, error)
FindOneByDeliverOrderNoSupplierOrderNo(ctx context.Context, deliverOrderNo string, supplierOrderNo string) (*YlOrdersMarket, error)
Update(ctx context.Context, data *YlOrdersMarket) error
Delete(ctx context.Context, id uint64) error
}
defaultYlOrdersMarketModel struct {
sqlc.CachedConn
table string
}
YlOrdersMarket struct {
Id uint64 `db:"id"`
DeliverOrderNo string `db:"deliver_order_no"` // 平台订单号
SupplierOrderNo string `db:"supplier_order_no"` // 供货商订单号
Request string `db:"request"` // 请求数据
Resp sql.NullString `db:"resp"` // rpc返回数据
ErrMsg sql.NullString `db:"err_msg"` // 错误信息
Status int64 `db:"status"` // 发货状态: 0-发货中 1-发货成功 2-发货失败
VoucherId string `db:"voucher_id"` // 批次号
CreateTime time.Time `db:"create_time"`
UpdateTime time.Time `db:"update_time"`
}
)
func newYlOrdersMarketModel(conn sqlx.SqlConn, c cache.CacheConf, opts ...cache.Option) *defaultYlOrdersMarketModel {
return &defaultYlOrdersMarketModel{
CachedConn: sqlc.NewConn(conn, c, opts...),
table: "`yl_orders_market`",
}
}
func (m *defaultYlOrdersMarketModel) Delete(ctx context.Context, id uint64) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
transferYlOrdersMarketDeliverOrderNoSupplierOrderNoKey := fmt.Sprintf("%s%v:%v", cacheTransferYlOrdersMarketDeliverOrderNoSupplierOrderNoPrefix, data.DeliverOrderNo, data.SupplierOrderNo)
transferYlOrdersMarketIdKey := fmt.Sprintf("%s%v", cacheTransferYlOrdersMarketIdPrefix, id)
_, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
return conn.ExecCtx(ctx, query, id)
}, transferYlOrdersMarketDeliverOrderNoSupplierOrderNoKey, transferYlOrdersMarketIdKey)
return err
}
func (m *defaultYlOrdersMarketModel) FindOne(ctx context.Context, id uint64) (*YlOrdersMarket, error) {
transferYlOrdersMarketIdKey := fmt.Sprintf("%s%v", cacheTransferYlOrdersMarketIdPrefix, id)
var resp YlOrdersMarket
err := m.QueryRowCtx(ctx, &resp, transferYlOrdersMarketIdKey, func(ctx context.Context, conn sqlx.SqlConn, v any) error {
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", ylOrdersMarketRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id)
})
switch err {
case nil:
return &resp, nil
case sqlc.ErrNotFound:
return nil, ErrNotFound
default:
return nil, err
}
}
func (m *defaultYlOrdersMarketModel) FindOneByDeliverOrderNoSupplierOrderNo(ctx context.Context, deliverOrderNo string, supplierOrderNo string) (*YlOrdersMarket, error) {
transferYlOrdersMarketDeliverOrderNoSupplierOrderNoKey := fmt.Sprintf("%s%v:%v", cacheTransferYlOrdersMarketDeliverOrderNoSupplierOrderNoPrefix, deliverOrderNo, supplierOrderNo)
var resp YlOrdersMarket
err := m.QueryRowIndexCtx(ctx, &resp, transferYlOrdersMarketDeliverOrderNoSupplierOrderNoKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v any) (i any, e error) {
query := fmt.Sprintf("select %s from %s where `deliver_order_no` = ? and `supplier_order_no` = ? limit 1", ylOrdersMarketRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, deliverOrderNo, supplierOrderNo); err != nil {
return nil, err
}
return resp.Id, nil
}, m.queryPrimary)
switch err {
case nil:
return &resp, nil
case sqlc.ErrNotFound:
return nil, ErrNotFound
default:
return nil, err
}
}
func (m *defaultYlOrdersMarketModel) Insert(ctx context.Context, data *YlOrdersMarket) (sql.Result, error) {
transferYlOrdersMarketDeliverOrderNoSupplierOrderNoKey := fmt.Sprintf("%s%v:%v", cacheTransferYlOrdersMarketDeliverOrderNoSupplierOrderNoPrefix, data.DeliverOrderNo, data.SupplierOrderNo)
transferYlOrdersMarketIdKey := fmt.Sprintf("%s%v", cacheTransferYlOrdersMarketIdPrefix, data.Id)
ret, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?)", m.table, ylOrdersMarketRowsExpectAutoSet)
return conn.ExecCtx(ctx, query, data.DeliverOrderNo, data.SupplierOrderNo, data.Request, data.Resp, data.ErrMsg, data.Status, data.VoucherId)
}, transferYlOrdersMarketDeliverOrderNoSupplierOrderNoKey, transferYlOrdersMarketIdKey)
return ret, err
}
func (m *defaultYlOrdersMarketModel) Update(ctx context.Context, newData *YlOrdersMarket) error {
data, err := m.FindOne(ctx, newData.Id)
if err != nil {
return err
}
transferYlOrdersMarketDeliverOrderNoSupplierOrderNoKey := fmt.Sprintf("%s%v:%v", cacheTransferYlOrdersMarketDeliverOrderNoSupplierOrderNoPrefix, data.DeliverOrderNo, data.SupplierOrderNo)
transferYlOrdersMarketIdKey := fmt.Sprintf("%s%v", cacheTransferYlOrdersMarketIdPrefix, data.Id)
_, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, ylOrdersMarketRowsWithPlaceHolder)
return conn.ExecCtx(ctx, query, newData.DeliverOrderNo, newData.SupplierOrderNo, newData.Request, newData.Resp, newData.ErrMsg, newData.Status, newData.VoucherId, newData.Id)
}, transferYlOrdersMarketDeliverOrderNoSupplierOrderNoKey, transferYlOrdersMarketIdKey)
return err
}
func (m *defaultYlOrdersMarketModel) formatPrimary(primary any) string {
return fmt.Sprintf("%s%v", cacheTransferYlOrdersMarketIdPrefix, primary)
}
func (m *defaultYlOrdersMarketModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary any) error {
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", ylOrdersMarketRows, m.table)
return conn.QueryRowCtx(ctx, v, query, primary)
}
func (m *defaultYlOrdersMarketModel) tableName() string {
return m.table
}

19
go.mod
View File

@ -3,7 +3,9 @@ module rs
go 1.21
require (
github.com/jinzhu/copier v0.4.0
github.com/bytedance/sonic v1.11.9
github.com/spf13/cast v1.6.0
github.com/valyala/fasthttp v1.57.0
github.com/zeromicro/go-zero v1.6.4
github.com/zeromicro/zero-contrib/zrpc/registry/nacos v0.0.0-20231030135404-af9ae855016f
google.golang.org/grpc v1.63.2
@ -13,9 +15,9 @@ require (
require (
filippo.io/edwards25519 v1.1.0 // indirect
github.com/aliyun/alibaba-cloud-sdk-go v1.61.1704 // indirect
github.com/andybalholm/brotli v1.1.1 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/buger/jsonparser v1.1.1 // indirect
github.com/bytedance/sonic v1.11.9 // indirect
github.com/bytedance/sonic/loader v0.1.1 // indirect
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
@ -45,6 +47,7 @@ require (
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/compress v1.17.11 // indirect
github.com/klauspost/cpuid/v2 v2.0.9 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
@ -63,8 +66,8 @@ require (
github.com/prometheus/procfs v0.12.0 // indirect
github.com/redis/go-redis/v9 v9.4.0 // indirect
github.com/spaolacci/murmur3 v1.1.0 // indirect
github.com/spf13/cast v1.6.0 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
go.etcd.io/etcd/api/v3 v3.5.13 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.13 // indirect
go.etcd.io/etcd/client/v3 v3.5.13 // indirect
@ -84,12 +87,12 @@ require (
go.uber.org/multierr v1.9.0 // indirect
go.uber.org/zap v1.24.0 // indirect
golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect
golang.org/x/net v0.24.0 // indirect
golang.org/x/net v0.30.0 // indirect
golang.org/x/oauth2 v0.17.0 // indirect
golang.org/x/sync v0.6.0 // indirect
golang.org/x/sys v0.19.0 // indirect
golang.org/x/term v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/sync v0.8.0 // indirect
golang.org/x/sys v0.26.0 // indirect
golang.org/x/term v0.25.0 // indirect
golang.org/x/text v0.19.0 // indirect
golang.org/x/time v0.5.0 // indirect
google.golang.org/appengine v1.6.8 // indirect
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect

38
go.sum
View File

@ -755,6 +755,8 @@ github.com/alicebob/miniredis/v2 v2.32.1/go.mod h1:AqkLNAfUm0K07J28hnAyyQKf/x0Yk
github.com/aliyun/alibaba-cloud-sdk-go v1.61.1704 h1:PpfENOj/vPfhhy9N2OFRjpue0hjM5XqAp2thFmkXXIk=
github.com/aliyun/alibaba-cloud-sdk-go v1.61.1704/go.mod h1:RcDobYh8k5VP6TNybz9m++gL3ijVI5wueVr0EM10VsU=
github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA=
github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0=
github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI=
@ -867,6 +869,8 @@ github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4Nij
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fullstorydev/grpcurl v1.8.7/go.mod h1:pVtM4qe3CMoLaIzYS8uvTuDj2jVYmXqMUkZeijnXp/E=
@ -1095,8 +1099,6 @@ github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7
github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E=
github.com/jhump/protoreflect v1.12.0/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI=
github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo=
github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8=
github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
@ -1125,6 +1127,8 @@ github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47e
github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=
github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4=
github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
@ -1339,6 +1343,10 @@ github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
github.com/urfave/cli/v2 v2.11.0/go.mod h1:f8iq5LtQ/bLxafbdBSLPPNsgaW0l/2fYYEHhAyPlwvo=
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
github.com/valyala/fasthttp v1.57.0 h1:Xw8SjWGEP/+wAAgyy5XTvgrWlOD1+TxbbvNADYCm1Tg=
github.com/valyala/fasthttp v1.57.0/go.mod h1:h6ZBaPRlzpZ6O3H5t2gEk1Qi33+TmLvfwgLLp0t9CpE=
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g=
github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4=
@ -1346,6 +1354,8 @@ github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgk
github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM=
github.com/xhit/go-str2duration v1.2.0/go.mod h1:3cPSlfZlUHVlneIVfePFWcJZsuwf+P1v2SRTV4cUmp4=
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@ -1589,8 +1599,8 @@ golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ=
golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4=
golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@ -1644,8 +1654,8 @@ golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@ -1748,8 +1758,8 @@ golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@ -1763,8 +1773,8 @@ golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo=
golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o=
golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q=
golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24=
golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@ -1783,8 +1793,8 @@ golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@ -1865,8 +1875,8 @@ golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s=
golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4=
golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc=
golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM=
golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA=
golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0=
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

View File

@ -79,7 +79,7 @@ message MarketQueryRes {
message MarketQueryReq {
string app_id = 1;
uint64 sign = 2;
string sign = 2;
string req_code = 3;
string mem_id = 4;
string req_serial_no = 5;
@ -103,7 +103,7 @@ message MarketKeyDiscardRes {
message MarketKeyDiscardReq {
string app_id = 1;
uint64 sign = 2;
string sign = 2;
string req_code = 3;
string mem_id = 4;
string req_serial_no = 5;

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
// - protoc-gen-go-grpc v1.3.0
// - protoc v3.6.1
// - protoc-gen-go-grpc v1.4.0
// - protoc (unknown)
// source: transfer.proto
package transfer
@ -15,8 +15,8 @@ import (
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
// Requires gRPC-Go v1.32.0 or later.
const _ = grpc.SupportPackageIsVersion7
// Requires gRPC-Go v1.62.0 or later.
const _ = grpc.SupportPackageIsVersion8
const (
Transfer_ZltxOrderRecharge_FullMethodName = "/transfer.Transfer/zltxOrderRecharge"
@ -31,6 +31,9 @@ const (
Transfer_MarketKeyDiscard_FullMethodName = "/transfer.Transfer/marketKeyDiscard"
Transfer_MarketQuery_FullMethodName = "/transfer.Transfer/marketQuery"
Transfer_RsCouponGrant_FullMethodName = "/transfer.Transfer/rsCouponGrant"
Transfer_NewMarketOrder_FullMethodName = "/transfer.Transfer/newMarketOrder"
Transfer_NewMarketQuery_FullMethodName = "/transfer.Transfer/newMarketQuery"
Transfer_NewMarketDiscard_FullMethodName = "/transfer.Transfer/newMarketDiscard"
)
// TransferClient is the client API for Transfer service.
@ -49,6 +52,9 @@ type TransferClient interface {
MarketKeyDiscard(ctx context.Context, in *MarketKeyDiscardReq, opts ...grpc.CallOption) (*MarketKeyDiscardRes, error)
MarketQuery(ctx context.Context, in *MarketQueryReq, opts ...grpc.CallOption) (*MarketQueryRes, error)
RsCouponGrant(ctx context.Context, in *RsCouponGrantReq, opts ...grpc.CallOption) (*RsCouponGrantRes, error)
NewMarketOrder(ctx context.Context, in *NewMarketOrderReq, opts ...grpc.CallOption) (*NewMarketOrderRes, error)
NewMarketQuery(ctx context.Context, in *NewMarketQueryReq, opts ...grpc.CallOption) (*NewMarketOrderRes, error)
NewMarketDiscard(ctx context.Context, in *NewMarketDiscardReq, opts ...grpc.CallOption) (*NewMarketDiscardRes, error)
}
type transferClient struct {
@ -60,8 +66,9 @@ func NewTransferClient(cc grpc.ClientConnInterface) TransferClient {
}
func (c *transferClient) ZltxOrderRecharge(ctx context.Context, in *ZltxOrderRechargeReq, opts ...grpc.CallOption) (*DefaultRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(DefaultRes)
err := c.cc.Invoke(ctx, Transfer_ZltxOrderRecharge_FullMethodName, in, out, opts...)
err := c.cc.Invoke(ctx, Transfer_ZltxOrderRecharge_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@ -69,8 +76,9 @@ func (c *transferClient) ZltxOrderRecharge(ctx context.Context, in *ZltxOrderRec
}
func (c *transferClient) ZltxOrderRechargeQuery(ctx context.Context, in *ZltxOrderRechargeQueryReq, opts ...grpc.CallOption) (*ZltxOrderRechargeQueryRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(ZltxOrderRechargeQueryRes)
err := c.cc.Invoke(ctx, Transfer_ZltxOrderRechargeQuery_FullMethodName, in, out, opts...)
err := c.cc.Invoke(ctx, Transfer_ZltxOrderRechargeQuery_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@ -78,8 +86,9 @@ func (c *transferClient) ZltxOrderRechargeQuery(ctx context.Context, in *ZltxOrd
}
func (c *transferClient) ZltxOrderCard(ctx context.Context, in *ZltxOrderCardReq, opts ...grpc.CallOption) (*DefaultRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(DefaultRes)
err := c.cc.Invoke(ctx, Transfer_ZltxOrderCard_FullMethodName, in, out, opts...)
err := c.cc.Invoke(ctx, Transfer_ZltxOrderCard_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@ -87,8 +96,9 @@ func (c *transferClient) ZltxOrderCard(ctx context.Context, in *ZltxOrderCardReq
}
func (c *transferClient) ZltxOrderCardQuery(ctx context.Context, in *ZltxOrderCardQueryReq, opts ...grpc.CallOption) (*ZltxOrderCardQueryRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(ZltxOrderCardQueryRes)
err := c.cc.Invoke(ctx, Transfer_ZltxOrderCardQuery_FullMethodName, in, out, opts...)
err := c.cc.Invoke(ctx, Transfer_ZltxOrderCardQuery_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@ -96,8 +106,9 @@ func (c *transferClient) ZltxOrderCardQuery(ctx context.Context, in *ZltxOrderCa
}
func (c *transferClient) ZltxOrderSms(ctx context.Context, in *ZltxOrderSmsReq, opts ...grpc.CallOption) (*ZltxOrderSmsRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(ZltxOrderSmsRes)
err := c.cc.Invoke(ctx, Transfer_ZltxOrderSms_FullMethodName, in, out, opts...)
err := c.cc.Invoke(ctx, Transfer_ZltxOrderSms_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@ -105,8 +116,9 @@ func (c *transferClient) ZltxOrderSms(ctx context.Context, in *ZltxOrderSmsReq,
}
func (c *transferClient) ZltxRechargeInfo(ctx context.Context, in *DefaultReq, opts ...grpc.CallOption) (*ZltxRechargeInfoRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(ZltxRechargeInfoRes)
err := c.cc.Invoke(ctx, Transfer_ZltxRechargeInfo_FullMethodName, in, out, opts...)
err := c.cc.Invoke(ctx, Transfer_ZltxRechargeInfo_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@ -114,8 +126,9 @@ func (c *transferClient) ZltxRechargeInfo(ctx context.Context, in *DefaultReq, o
}
func (c *transferClient) ZltxRechargeProduct(ctx context.Context, in *DefaultReq, opts ...grpc.CallOption) (*ZltxRechargeProductRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(ZltxRechargeProductRes)
err := c.cc.Invoke(ctx, Transfer_ZltxRechargeProduct_FullMethodName, in, out, opts...)
err := c.cc.Invoke(ctx, Transfer_ZltxRechargeProduct_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@ -123,8 +136,9 @@ func (c *transferClient) ZltxRechargeProduct(ctx context.Context, in *DefaultReq
}
func (c *transferClient) ZltxRsMiXue(ctx context.Context, in *RsCouponGrantReq, opts ...grpc.CallOption) (*RsCouponGrantRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(RsCouponGrantRes)
err := c.cc.Invoke(ctx, Transfer_ZltxRsMiXue_FullMethodName, in, out, opts...)
err := c.cc.Invoke(ctx, Transfer_ZltxRsMiXue_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@ -132,8 +146,9 @@ func (c *transferClient) ZltxRsMiXue(ctx context.Context, in *RsCouponGrantReq,
}
func (c *transferClient) MarketKeySend(ctx context.Context, in *MarketKeySendReq, opts ...grpc.CallOption) (*MarketKeySendRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(MarketKeySendRes)
err := c.cc.Invoke(ctx, Transfer_MarketKeySend_FullMethodName, in, out, opts...)
err := c.cc.Invoke(ctx, Transfer_MarketKeySend_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@ -141,8 +156,9 @@ func (c *transferClient) MarketKeySend(ctx context.Context, in *MarketKeySendReq
}
func (c *transferClient) MarketKeyDiscard(ctx context.Context, in *MarketKeyDiscardReq, opts ...grpc.CallOption) (*MarketKeyDiscardRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(MarketKeyDiscardRes)
err := c.cc.Invoke(ctx, Transfer_MarketKeyDiscard_FullMethodName, in, out, opts...)
err := c.cc.Invoke(ctx, Transfer_MarketKeyDiscard_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@ -150,8 +166,9 @@ func (c *transferClient) MarketKeyDiscard(ctx context.Context, in *MarketKeyDisc
}
func (c *transferClient) MarketQuery(ctx context.Context, in *MarketQueryReq, opts ...grpc.CallOption) (*MarketQueryRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(MarketQueryRes)
err := c.cc.Invoke(ctx, Transfer_MarketQuery_FullMethodName, in, out, opts...)
err := c.cc.Invoke(ctx, Transfer_MarketQuery_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@ -159,8 +176,39 @@ func (c *transferClient) MarketQuery(ctx context.Context, in *MarketQueryReq, op
}
func (c *transferClient) RsCouponGrant(ctx context.Context, in *RsCouponGrantReq, opts ...grpc.CallOption) (*RsCouponGrantRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(RsCouponGrantRes)
err := c.cc.Invoke(ctx, Transfer_RsCouponGrant_FullMethodName, in, out, opts...)
err := c.cc.Invoke(ctx, Transfer_RsCouponGrant_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *transferClient) NewMarketOrder(ctx context.Context, in *NewMarketOrderReq, opts ...grpc.CallOption) (*NewMarketOrderRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(NewMarketOrderRes)
err := c.cc.Invoke(ctx, Transfer_NewMarketOrder_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *transferClient) NewMarketQuery(ctx context.Context, in *NewMarketQueryReq, opts ...grpc.CallOption) (*NewMarketOrderRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(NewMarketOrderRes)
err := c.cc.Invoke(ctx, Transfer_NewMarketQuery_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *transferClient) NewMarketDiscard(ctx context.Context, in *NewMarketDiscardReq, opts ...grpc.CallOption) (*NewMarketDiscardRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(NewMarketDiscardRes)
err := c.cc.Invoke(ctx, Transfer_NewMarketDiscard_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
@ -183,6 +231,9 @@ type TransferServer interface {
MarketKeyDiscard(context.Context, *MarketKeyDiscardReq) (*MarketKeyDiscardRes, error)
MarketQuery(context.Context, *MarketQueryReq) (*MarketQueryRes, error)
RsCouponGrant(context.Context, *RsCouponGrantReq) (*RsCouponGrantRes, error)
NewMarketOrder(context.Context, *NewMarketOrderReq) (*NewMarketOrderRes, error)
NewMarketQuery(context.Context, *NewMarketQueryReq) (*NewMarketOrderRes, error)
NewMarketDiscard(context.Context, *NewMarketDiscardReq) (*NewMarketDiscardRes, error)
mustEmbedUnimplementedTransferServer()
}
@ -226,6 +277,15 @@ func (UnimplementedTransferServer) MarketQuery(context.Context, *MarketQueryReq)
func (UnimplementedTransferServer) RsCouponGrant(context.Context, *RsCouponGrantReq) (*RsCouponGrantRes, error) {
return nil, status.Errorf(codes.Unimplemented, "method RsCouponGrant not implemented")
}
func (UnimplementedTransferServer) NewMarketOrder(context.Context, *NewMarketOrderReq) (*NewMarketOrderRes, error) {
return nil, status.Errorf(codes.Unimplemented, "method NewMarketOrder not implemented")
}
func (UnimplementedTransferServer) NewMarketQuery(context.Context, *NewMarketQueryReq) (*NewMarketOrderRes, error) {
return nil, status.Errorf(codes.Unimplemented, "method NewMarketQuery not implemented")
}
func (UnimplementedTransferServer) NewMarketDiscard(context.Context, *NewMarketDiscardReq) (*NewMarketDiscardRes, error) {
return nil, status.Errorf(codes.Unimplemented, "method NewMarketDiscard not implemented")
}
func (UnimplementedTransferServer) mustEmbedUnimplementedTransferServer() {}
// UnsafeTransferServer may be embedded to opt out of forward compatibility for this service.
@ -455,6 +515,60 @@ func _Transfer_RsCouponGrant_Handler(srv interface{}, ctx context.Context, dec f
return interceptor(ctx, in, info, handler)
}
func _Transfer_NewMarketOrder_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(NewMarketOrderReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(TransferServer).NewMarketOrder(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Transfer_NewMarketOrder_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(TransferServer).NewMarketOrder(ctx, req.(*NewMarketOrderReq))
}
return interceptor(ctx, in, info, handler)
}
func _Transfer_NewMarketQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(NewMarketQueryReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(TransferServer).NewMarketQuery(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Transfer_NewMarketQuery_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(TransferServer).NewMarketQuery(ctx, req.(*NewMarketQueryReq))
}
return interceptor(ctx, in, info, handler)
}
func _Transfer_NewMarketDiscard_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(NewMarketDiscardReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(TransferServer).NewMarketDiscard(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Transfer_NewMarketDiscard_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(TransferServer).NewMarketDiscard(ctx, req.(*NewMarketDiscardReq))
}
return interceptor(ctx, in, info, handler)
}
// Transfer_ServiceDesc is the grpc.ServiceDesc for Transfer service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
@ -510,6 +624,18 @@ var Transfer_ServiceDesc = grpc.ServiceDesc{
MethodName: "rsCouponGrant",
Handler: _Transfer_RsCouponGrant_Handler,
},
{
MethodName: "newMarketOrder",
Handler: _Transfer_NewMarketOrder_Handler,
},
{
MethodName: "newMarketQuery",
Handler: _Transfer_NewMarketQuery_Handler,
},
{
MethodName: "newMarketDiscard",
Handler: _Transfer_NewMarketDiscard_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "transfer.proto",

View File

@ -0,0 +1,97 @@
package httpclient
import (
"fmt"
"github.com/valyala/fasthttp"
"time"
)
func FastHttpPost(url string, header map[string]string, body []byte, timeout int) ([]byte, error) {
req := fasthttp.AcquireRequest()
defer fasthttp.ReleaseRequest(req) // 用完需要释放资源
// 默认是application/x-www-form-urlencoded
req.Header.SetMethod("POST")
for k, v := range header {
req.Header.Set(k, v)
}
req.SetRequestURI(url)
req.SetBody(body)
resp := fasthttp.AcquireResponse()
defer fasthttp.ReleaseResponse(resp) // 用完需要释放资源
var err error
if timeout <= 0 {
if err = fasthttp.Do(req, resp); err != nil {
return nil, err
}
} else {
if err = fasthttp.DoTimeout(req, resp, time.Duration(timeout)*time.Second); err != nil {
return nil, err
}
}
b := resp.Body()
//fmt.Println(string(b),"http请求")
return b, nil
}
func FastHttpPostForm(url string, header map[string]string, body map[string]string, timeout int) ([]byte, error) {
req := fasthttp.AcquireRequest()
defer fasthttp.ReleaseRequest(req) // 用完需要释放资源
// 默认是application/x-www-form-urlencoded
req.Header.SetMethod("POST")
for k, v := range header {
req.Header.Set(k, v)
}
req.SetRequestURI(url)
args := &fasthttp.Args{}
for k, v := range body {
args.Add(k, v)
}
req.SetBody(args.QueryString())
resp := fasthttp.AcquireResponse()
defer fasthttp.ReleaseResponse(resp) // 用完需要释放资源
var err error
if timeout == 0 {
if err = fasthttp.Do(req, resp); err != nil {
return nil, err
}
} else {
if err := fasthttp.DoTimeout(req, resp, time.Duration(timeout)*time.Second); err != nil {
return nil, err
}
}
b := resp.Body()
return b, nil
}
func FastHttpGet(url string, header map[string]string, body map[string]string, timeout int) ([]byte, error) {
req := fasthttp.AcquireRequest()
defer fasthttp.ReleaseRequest(req) // 用完需要释放资源
// 默认是application/x-www-form-urlencoded
req.Header.SetMethod("GET")
for k, v := range header {
req.Header.Set(k, v)
}
if len(body) > 0 {
url += "?"
for k, v := range body {
url += k + "=" + v + "&"
}
url = url[0 : len(url)-1]
}
fmt.Println(url)
req.SetRequestURI(url)
resp := fasthttp.AcquireResponse()
defer fasthttp.ReleaseResponse(resp) // 用完需要释放资源
var err error
if timeout == 0 {
if err = fasthttp.Do(req, resp); err != nil {
return nil, err
}
} else {
if err := fasthttp.DoTimeout(req, resp, time.Duration(timeout)*time.Second); err != nil {
return nil, err
}
}
b := resp.Body()
return b, nil
}

View File

@ -1,13 +1,15 @@
package response
const (
HTTP_SUCCESS = "000000"
HTTP_AUTH_FAIL = "000101"
HTTP_REUEST_FAIL = "000102"
HTTP_SUCCESS = "000000"
HTTP_AUTH_FAIL = "000101"
HTTP_REUEST_FAIL = "000102"
HTTP_REUEST_NOT_FOUND = "100030"
)
var CodeMsg = map[string]string{
HTTP_SUCCESS: "操作成功",
HTTP_AUTH_FAIL: "验签失败",
HTTP_REUEST_FAIL: "操作失败",
HTTP_SUCCESS: "操作成功",
HTTP_AUTH_FAIL: "验签失败",
HTTP_REUEST_FAIL: "操作失败",
HTTP_REUEST_NOT_FOUND: "订单不存在",
}