Compare commits
No commits in common. "b8da95788bd8e7590de7e9eaa5d67f2d4218153d" and "7a3823a2a754cf853e116f1490138be22e8e9d5d" have entirely different histories.
b8da95788b
...
7a3823a2a7
43
Dockerfile
43
Dockerfile
|
@ -1,43 +0,0 @@
|
||||||
|
|
||||||
## 使用官方Go镜像作为构建环境
|
|
||||||
#FROM golang:1.21.0 AS builder
|
|
||||||
#
|
|
||||||
## 设置工作目录
|
|
||||||
#WORKDIR /app
|
|
||||||
#
|
|
||||||
## 复制项目源码
|
|
||||||
#COPY . .
|
|
||||||
#
|
|
||||||
## 复制go模块依赖文件
|
|
||||||
#COPY go.mod go.sum ./
|
|
||||||
#
|
|
||||||
## 安装go模块依赖
|
|
||||||
#RUN go env -w GOPROXY=https://goproxy.cn,direct
|
|
||||||
#RUN go mod tidy
|
|
||||||
#
|
|
||||||
## 编译Go应用程序,生成静态链接的二进制文件
|
|
||||||
#RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o server .
|
|
||||||
|
|
||||||
# 创建最终镜像,用于运行编译后的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 \
|
|
||||||
|
|
||||||
ENV server = "admin"
|
|
||||||
|
|
||||||
# 设置工作目录
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
# 将编译好的二进制文件从构建阶段复制到运行阶段
|
|
||||||
COPY /server .
|
|
||||||
#COPY --from=builder /app/server .
|
|
||||||
COPY .env .
|
|
||||||
|
|
||||||
|
|
||||||
ENV TZ=Asia/Shanghai
|
|
||||||
# 设置容器启动时运行的命令
|
|
||||||
ENTRYPOINT ["/app/server", "-a", "$server"]
|
|
|
@ -1,86 +1,9 @@
|
||||||
package console
|
package console
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"PaymentCenter/app/constants/common"
|
|
||||||
"PaymentCenter/app/data"
|
|
||||||
"PaymentCenter/app/http/entities"
|
|
||||||
"PaymentCenter/app/models/ordersmodel"
|
|
||||||
"PaymentCenter/app/utils"
|
|
||||||
"github.com/qit-team/snow-core/command"
|
"github.com/qit-team/snow-core/command"
|
||||||
"strconv"
|
|
||||||
"time"
|
|
||||||
"xorm.io/builder"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func RegisterCommand(c *command.Command) {
|
func RegisterCommand(c *command.Command) {
|
||||||
c.AddFunc("test", test)
|
c.AddFunc("test", test)
|
||||||
c.AddFunc("closeOrder", closeOrder)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 关闭长时间支付中的订单
|
|
||||||
func closeOrder() {
|
|
||||||
var now = time.Now().Format(time.DateTime)
|
|
||||||
utils.Log(nil, "关闭订单", now)
|
|
||||||
// 查询未支付的订单
|
|
||||||
repo := data.NewOrderRepo(ordersmodel.GetInstance().GetDb())
|
|
||||||
// 拼接条件
|
|
||||||
cond := builder.NewCond()
|
|
||||||
cond = cond.And(builder.Eq{"status": common.ORDER_STATUS_PAYING}, builder.Lt{"create_time": time.Now().Add(-time.Hour)})
|
|
||||||
|
|
||||||
order := make([]ordersmodel.Orders, 0)
|
|
||||||
total, err := repo.OrderList(cond, entities.PageRequest{}, &order)
|
|
||||||
if err != nil {
|
|
||||||
utils.Log(nil, "关闭订单,查询未支付订单失败", err)
|
|
||||||
} else if total > 0 {
|
|
||||||
orderIds := make([]int64, 0)
|
|
||||||
for _, v := range order {
|
|
||||||
orderIds = append(orderIds, v.Id)
|
|
||||||
}
|
|
||||||
// 修改订单状态为关闭
|
|
||||||
cond = builder.NewCond()
|
|
||||||
cond = cond.And(builder.In("id", orderIds))
|
|
||||||
_, err = repo.OrderUpdate(&ordersmodel.Orders{Status: common.ORDER_STATUS_CLOSE}, cond, "status")
|
|
||||||
if err != nil {
|
|
||||||
utils.Log(nil, "关闭订单,修改订单状态失败", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
utils.Log(nil, "关闭订单,修改订单状态成功", "count="+strconv.Itoa(len(order)))
|
|
||||||
}
|
|
||||||
|
|
||||||
// 定时查询支付中的订单, 主动查询订单支付状态
|
|
||||||
func queryOrder() {
|
|
||||||
var now = time.Now().Format(time.DateTime)
|
|
||||||
utils.Log(nil, "主动查询订单支付状态", now)
|
|
||||||
// 查询未支付的订单
|
|
||||||
repo := data.NewOrderRepo(ordersmodel.GetInstance().GetDb())
|
|
||||||
// 拼接条件
|
|
||||||
cond := builder.NewCond()
|
|
||||||
cond = cond.And(builder.Eq{"status": common.ORDER_STATUS_PAYING}, builder.Gt{"create_time": time.Now().Add(-time.Second)})
|
|
||||||
order := make([]ordersmodel.Orders, 0)
|
|
||||||
total, err := repo.OrderList(cond, entities.PageRequest{}, &order)
|
|
||||||
if err != nil {
|
|
||||||
utils.Log(nil, "主动查询订单支付状态,查询未付中订单失败", err)
|
|
||||||
return
|
|
||||||
} else if total > 0 {
|
|
||||||
// 发起查询上游支付
|
|
||||||
for _, v := range order {
|
|
||||||
go func(order ordersmodel.Orders) {
|
|
||||||
// 发起查询
|
|
||||||
utils.Log(nil, "主动查询订单支付状态,发起查询", order.Id)
|
|
||||||
// 解析上游结果
|
|
||||||
|
|
||||||
// 修改订单状态
|
|
||||||
}(v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 回调下游
|
|
||||||
func callbackOrder() {
|
|
||||||
var now = time.Now().Format(time.DateTime)
|
|
||||||
utils.Log(nil, "回调下游", now)
|
|
||||||
// 查询回调失败的订单
|
|
||||||
|
|
||||||
// 发起回调
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,5 @@ import (
|
||||||
func RegisterSchedule(c *cron.Cron) {
|
func RegisterSchedule(c *cron.Cron) {
|
||||||
//c.AddFunc("0 30 * * * *", test)
|
//c.AddFunc("0 30 * * * *", test)
|
||||||
//c.AddFunc("@hourly", test)
|
//c.AddFunc("@hourly", test)
|
||||||
//c.AddFunc("@every 10s", test)
|
c.AddFunc("@every 10s", test)
|
||||||
c.AddFunc("@every 60s", closeOrder)
|
|
||||||
c.AddFunc("@every 10s", queryOrder)
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@ package common
|
||||||
const (
|
const (
|
||||||
TOKEN_PRE = "player_token_"
|
TOKEN_PRE = "player_token_"
|
||||||
TOKEN_Admin = "Admin_token_"
|
TOKEN_Admin = "Admin_token_"
|
||||||
ADMIN_V1 = "/pay/admin/api/v1"
|
ADMIN_V1 = "/admin/pay/api/v1"
|
||||||
|
|
||||||
// 支付渠道枚举,1微信JSAPI,2微信H5,3微信app,4微信Native,5微信小程序,6支付宝网页&移动应用,7支付宝小程序,8支付宝JSAPI
|
// 支付渠道枚举,1微信JSAPI,2微信H5,3微信app,4微信Native,5微信小程序,6支付宝网页&移动应用,7支付宝小程序,8支付宝JSAPI
|
||||||
PAY_CHANNEL_UNKNOWN = 0
|
PAY_CHANNEL_UNKNOWN = 0
|
||||||
|
@ -15,16 +15,4 @@ const (
|
||||||
PAY_CHANNEL_ALIPAY_WEB = 6
|
PAY_CHANNEL_ALIPAY_WEB = 6
|
||||||
PAY_CHANNEL_ALIPAY_MINI = 7
|
PAY_CHANNEL_ALIPAY_MINI = 7
|
||||||
PAY_CHANNEL_ALIPAY_JSAPI = 8
|
PAY_CHANNEL_ALIPAY_JSAPI = 8
|
||||||
|
|
||||||
// 统一登陆信息
|
|
||||||
ADMIN_USER_ID = "User-Id"
|
|
||||||
ADMIN_USER_NAME = "User-Name"
|
|
||||||
ADMIN_USER_INCLUDEUSERS = "Include-Users"
|
|
||||||
|
|
||||||
// '订单状态,待支付、支付中、支付成功、支付失败、订单关闭',
|
|
||||||
ORDER_STATUS_WAITPAY = 1
|
|
||||||
ORDER_STATUS_PAYING = 2
|
|
||||||
ORDER_STATUS_PAYED = 3
|
|
||||||
ORDER_STATUS_FAILED = 4
|
|
||||||
ORDER_STATUS_CLOSE = 5
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -24,10 +24,6 @@ const (
|
||||||
|
|
||||||
// 商户
|
// 商户
|
||||||
MerchantNotFound = 1100
|
MerchantNotFound = 1100
|
||||||
|
|
||||||
AppNotFound = 1200
|
|
||||||
|
|
||||||
PayChannelNotFound = 1300
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var MsgEN = map[int]string{
|
var MsgEN = map[int]string{
|
||||||
|
@ -47,8 +43,6 @@ var MsgZH = map[int]string{
|
||||||
NotLogin: "未登录",
|
NotLogin: "未登录",
|
||||||
|
|
||||||
MerchantNotFound: "商户不存在",
|
MerchantNotFound: "商户不存在",
|
||||||
AppNotFound: "应用不存在",
|
|
||||||
PayChannelNotFound: "支付方式不存在",
|
|
||||||
}
|
}
|
||||||
var MsgMap map[string]map[int]string = map[string]map[int]string{"en": MsgZH}
|
var MsgMap map[string]map[int]string = map[string]map[int]string{"en": MsgZH}
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,3 @@ func (m *AppRepo) AppDelete(app *appmodel.App, conn builder.Cond) (int64, error)
|
||||||
func (m *AppRepo) AppUpdate(app *appmodel.App, conn builder.Cond, columns ...string) (int64, error) {
|
func (m *AppRepo) AppUpdate(app *appmodel.App, conn builder.Cond, columns ...string) (int64, error) {
|
||||||
return m.repo.Where(conn).MustCols(columns...).Update(app)
|
return m.repo.Where(conn).MustCols(columns...).Update(app)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *AppRepo) AppGet(app *appmodel.App, conn builder.Cond) (bool, error) {
|
|
||||||
return m.repo.Where(conn).Get(app)
|
|
||||||
}
|
|
||||||
|
|
|
@ -25,19 +25,15 @@ func (m *PayChannelRepo) PayChannelList(conn builder.Cond, pageFilter entities.P
|
||||||
return repo.Desc("create_time").FindAndCount(payChannelList)
|
return repo.Desc("create_time").FindAndCount(payChannelList)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *PayChannelRepo) PayChannelInsertOne(payChannel *paychannelmodel.PayChannel) (int64, error) {
|
func (m *PayChannelRepo) PayChannelInsertOne(merchant *paychannelmodel.PayChannel) (int64, error) {
|
||||||
return m.repo.InsertOne(payChannel)
|
return m.repo.InsertOne(merchant)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *PayChannelRepo) PayChannelDelete(payChannel *paychannelmodel.PayChannel, conn builder.Cond) (int64, error) {
|
func (m *PayChannelRepo) PayChannelDelete(merchant *paychannelmodel.PayChannel, conn builder.Cond) (int64, error) {
|
||||||
return m.repo.Where(conn).Delete(payChannel)
|
return m.repo.Where(conn).Delete(merchant)
|
||||||
}
|
}
|
||||||
|
|
||||||
// columns 参数为要更新的字段,即使为空
|
// columns 参数为要更新的字段,即使为空
|
||||||
func (m *PayChannelRepo) PayChannelUpdate(payChannel *paychannelmodel.PayChannel, conn builder.Cond, columns ...string) (int64, error) {
|
func (m *PayChannelRepo) PayChannelUpdate(merchant *paychannelmodel.PayChannel, conn builder.Cond, columns ...string) (int64, error) {
|
||||||
return m.repo.Where(conn).MustCols(columns...).Update(payChannel)
|
return m.repo.Where(conn).MustCols(columns...).Update(merchant)
|
||||||
}
|
|
||||||
|
|
||||||
func (m *PayChannelRepo) PayChannelGet(payChannel *paychannelmodel.PayChannel, conn builder.Cond) (bool, error) {
|
|
||||||
return m.repo.Where(conn).Get(payChannel)
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,6 @@ import (
|
||||||
func MerchantList(c *gin.Context) {
|
func MerchantList(c *gin.Context) {
|
||||||
req, _ := controllers.GetRequest(c).(*backend.MerchantListRequest)
|
req, _ := controllers.GetRequest(c).(*backend.MerchantListRequest)
|
||||||
req.SetDefault()
|
req.SetDefault()
|
||||||
req.GroupInfo = controllers.GetAdminUserIncludeUsers(c)
|
|
||||||
merchantList, total, code := services.MerchantList(*req)
|
merchantList, total, code := services.MerchantList(*req)
|
||||||
|
|
||||||
result := make([]backend.MerchantResponse, 0, len(merchantList))
|
result := make([]backend.MerchantResponse, 0, len(merchantList))
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package controllers
|
package controllers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"PaymentCenter/app/constants/common"
|
|
||||||
"PaymentCenter/app/utils"
|
"PaymentCenter/app/utils"
|
||||||
"PaymentCenter/config"
|
"PaymentCenter/config"
|
||||||
"bytes"
|
"bytes"
|
||||||
|
@ -18,7 +17,6 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"reflect"
|
"reflect"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
|
||||||
|
|
||||||
"PaymentCenter/app/constants/errorcode"
|
"PaymentCenter/app/constants/errorcode"
|
||||||
|
|
||||||
|
@ -209,24 +207,3 @@ func phoneValidation(fl validator.FieldLevel) bool {
|
||||||
reg := regexp.MustCompile(phoneRegex)
|
reg := regexp.MustCompile(phoneRegex)
|
||||||
return reg.MatchString(phone)
|
return reg.MatchString(phone)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 管理后台,获取用户id
|
|
||||||
func GetAdminId(c *gin.Context) int {
|
|
||||||
userIdStr, _ := c.Get(common.ADMIN_USER_ID)
|
|
||||||
if userIdStr != nil {
|
|
||||||
var userId, _ = strconv.Atoi(userIdStr.(string))
|
|
||||||
return userId
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取对应数据权限中拥有用户数据ID
|
|
||||||
func GetAdminUserIncludeUsers(c *gin.Context) string {
|
|
||||||
name, _ := c.Get(common.ADMIN_USER_INCLUDEUSERS)
|
|
||||||
if name != nil {
|
|
||||||
var temp, _ = name.(string)
|
|
||||||
return temp
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
|
@ -6,8 +6,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type AppListRequest struct {
|
type AppListRequest struct {
|
||||||
Id int64 `json:"id" form:"id"`
|
MerchantId int64 `json:"merchant_id"`
|
||||||
MerchantId int64 `json:"merchant_id" form:"merchant_id" validate:"required" label:"商户ID"`
|
|
||||||
entities.PageRequest
|
entities.PageRequest
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,7 +50,7 @@ type AppCreateRequest struct {
|
||||||
PrivateKey string `json:"private_key" validate:"required" label:"应用私钥"`
|
PrivateKey string `json:"private_key" validate:"required" label:"应用私钥"`
|
||||||
MerchantPublicKey string `json:"merchant_public_key" label:"商户公钥"`
|
MerchantPublicKey string `json:"merchant_public_key" label:"商户公钥"`
|
||||||
WhiteIp string `json:"white_ip"`
|
WhiteIp string `json:"white_ip"`
|
||||||
NotifyUrl string `json:"notify_url" validate:"required" label:"通知地址"`
|
NotifyUrl string `json:"notify_url"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *AppCreateRequest) RequestToDb() (db appmodel.App) {
|
func (a *AppCreateRequest) RequestToDb() (db appmodel.App) {
|
||||||
|
@ -70,12 +69,13 @@ func (a *AppCreateRequest) RequestToDb() (db appmodel.App) {
|
||||||
|
|
||||||
type AppUpdateRequest struct {
|
type AppUpdateRequest struct {
|
||||||
Id int64 `json:"id" validate:"required" label:"应用ID"`
|
Id int64 `json:"id" validate:"required" label:"应用ID"`
|
||||||
AppName string `json:"app_name" label:"应用名称"`
|
MerchantId int64 `json:"merchant_id" validate:"required" label:"商户ID"`
|
||||||
|
AppName string `json:"app_name" validate:"required" label:"应用名称"`
|
||||||
AppRemark string `json:"app_remark" label:"应用备注"`
|
AppRemark string `json:"app_remark" label:"应用备注"`
|
||||||
Status int `json:"status" label:"应用状态"`
|
Status int `json:"status" validate:"oneof=0 1 2" label:"应用状态"`
|
||||||
KeyType int `json:"key_type" label:"应用密钥类型"`
|
KeyType int `json:"key_type" validate:"required" label:"应用密钥类型"`
|
||||||
PublicKey string `json:"public_key" label:"应用公钥"`
|
PublicKey string `json:"public_key" validate:"required" label:"应用公钥"`
|
||||||
PrivateKey string `json:"private_key" label:"应用私钥"`
|
PrivateKey string `json:"private_key" validate:"required" label:"应用私钥"`
|
||||||
MerchantPublicKey string `json:"merchant_public_key" label:"商户公钥"`
|
MerchantPublicKey string `json:"merchant_public_key" label:"商户公钥"`
|
||||||
WhiteIp string `json:"white_ip"`
|
WhiteIp string `json:"white_ip"`
|
||||||
NotifyUrl string `json:"notify_url"`
|
NotifyUrl string `json:"notify_url"`
|
||||||
|
@ -83,6 +83,7 @@ type AppUpdateRequest struct {
|
||||||
|
|
||||||
func (a *AppUpdateRequest) RequestToDb() (db appmodel.App) {
|
func (a *AppUpdateRequest) RequestToDb() (db appmodel.App) {
|
||||||
db.Id = a.Id
|
db.Id = a.Id
|
||||||
|
db.MerchantId = a.MerchantId
|
||||||
db.AppName = a.AppName
|
db.AppName = a.AppName
|
||||||
db.AppRemark = a.AppRemark
|
db.AppRemark = a.AppRemark
|
||||||
db.Status = a.Status
|
db.Status = a.Status
|
||||||
|
|
|
@ -10,7 +10,6 @@ type MerchantListRequest struct {
|
||||||
Name string `form:"name"`
|
Name string `form:"name"`
|
||||||
Contact string `form:"contact"`
|
Contact string `form:"contact"`
|
||||||
Phone string `form:"phone"`
|
Phone string `form:"phone"`
|
||||||
GroupInfo string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type MerchantResponse struct {
|
type MerchantResponse struct {
|
||||||
|
@ -36,7 +35,6 @@ type MerchantCreateRequest struct {
|
||||||
Contact string `json:"contact" validate:"required" label:"联系人"`
|
Contact string `json:"contact" validate:"required" label:"联系人"`
|
||||||
Phone string `json:"phone" validate:"required,phoneValidation" label:"联系电话"`
|
Phone string `json:"phone" validate:"required,phoneValidation" label:"联系电话"`
|
||||||
Remark string `json:"remark" label:"备注"`
|
Remark string `json:"remark" label:"备注"`
|
||||||
Creator int
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MerchantCreateRequest) RequestToDb() (db merchantmodel.Merchant) {
|
func (m *MerchantCreateRequest) RequestToDb() (db merchantmodel.Merchant) {
|
||||||
|
@ -44,7 +42,6 @@ func (m *MerchantCreateRequest) RequestToDb() (db merchantmodel.Merchant) {
|
||||||
db.Contact = m.Contact
|
db.Contact = m.Contact
|
||||||
db.Phone = m.Phone
|
db.Phone = m.Phone
|
||||||
db.Remark = m.Remark
|
db.Remark = m.Remark
|
||||||
db.Creator = m.Creator
|
|
||||||
return db
|
return db
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,17 +49,16 @@ type PayChannelCreateRequest struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type WechatPayChannel struct {
|
type WechatPayChannel struct {
|
||||||
MchId string `json:"mch_id"` // 商户ID 或者服务商模式的 sp_mchid
|
MchId string `json:"mch_id"` //直连商户号
|
||||||
SerialNo string `json:"serial_no"` // 商户证书的证书序列号
|
MchCertificateSerialNumber string `json:"mch_certificate_serial_number"` //商户证书序列号
|
||||||
ApiV3Key string `json:"api_v_3_key"` // apiV3Key,商户平台获取
|
MchAPIv3Key string `json:"mch_APIv3_key"` //商户APIv3密钥
|
||||||
PrivateKey string `json:"private_key"` // 私钥 apiclient_key.pem 读取后的内容
|
PrivateKeyPath string `json:"private_key_path"` //商户私钥文件路径
|
||||||
}
|
}
|
||||||
|
|
||||||
type AliPayPayChannel struct {
|
type AliPayPayChannel struct {
|
||||||
PrivateKey string `json:"private_key"` // 应用私钥
|
AliPublicKey string `json:"ali_public_key"` //支付宝公钥
|
||||||
AppPublicCert string `json:"app_public_cert"` // 应用公钥
|
PrivateKeyPath string `json:"private_key_path"` //应用私钥
|
||||||
AlipayRootCert string `json:"alipay_root_cert"` // 支付宝根证书
|
SignType string `json:"sign_type"` //商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用RSA2
|
||||||
AlipayPublicCert string `json:"alipay_public_cert"` // 支付宝公钥
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PayChannelCreateRequest) RequestToDb() (db paychannelmodel.PayChannel, err error) {
|
func (p *PayChannelCreateRequest) RequestToDb() (db paychannelmodel.PayChannel, err error) {
|
||||||
|
@ -87,24 +86,19 @@ func (p *PayChannelCreateRequest) RequestToDb() (db paychannelmodel.PayChannel,
|
||||||
}
|
}
|
||||||
|
|
||||||
type PayChannelListRequest struct {
|
type PayChannelListRequest struct {
|
||||||
Id int64 `json:"id" form:"id" `
|
MerchantId int64 `json:"merchant_id"`
|
||||||
MerchantId int64 `json:"merchant_id" form:"merchant_id" validate:"required" label:"商户ID"`
|
|
||||||
entities.PageRequest
|
entities.PageRequest
|
||||||
}
|
}
|
||||||
|
|
||||||
type PayChannelUpdateRequest struct {
|
type PayChannelUpdateRequest struct {
|
||||||
Id int64 `json:"id" validate:"required"`
|
Id int64 `json:"id" validate:"required"`
|
||||||
PayName string `json:"pay_name" validate:"required" label:"支付渠道名称"`
|
PayChannelCreateRequest
|
||||||
ChannelType int `json:"channel_type" validate:"required" label:"支付渠道"` //支付渠道枚举,1微信JSAPI,2微信H5,3微信app,4微信Native,5微信小程序,6支付宝网页&移动应用,7支付宝小程序,8支付宝JSAPI
|
|
||||||
AppId string `json:"app_id" validate:"required" label:"应用appId"`
|
|
||||||
ExpireTime string `json:"expire_time"`
|
|
||||||
AliPayPayChannel AliPayPayChannel `json:"ali_pay_pay_channel,omitempty"`
|
|
||||||
WechatPayChannel WechatPayChannel `json:"wechat_pay_channel,omitempty"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p PayChannelUpdateRequest) RequestToDb() (db paychannelmodel.PayChannel, err error) {
|
func (p PayChannelUpdateRequest) RequestToDb() (db paychannelmodel.PayChannel, err error) {
|
||||||
db.Id = p.Id
|
db.Id = p.Id
|
||||||
db.PayName = p.PayName
|
db.PayName = p.PayName
|
||||||
|
db.MerchantId = p.MerchantId
|
||||||
db.ChannelType = p.ChannelType
|
db.ChannelType = p.ChannelType
|
||||||
db.AppId = p.AppId
|
db.AppId = p.AppId
|
||||||
if p.ExpireTime != "" {
|
if p.ExpireTime != "" {
|
||||||
|
|
|
@ -6,8 +6,10 @@ import (
|
||||||
"PaymentCenter/app/http/controllers"
|
"PaymentCenter/app/http/controllers"
|
||||||
"PaymentCenter/app/http/requestmapping"
|
"PaymentCenter/app/http/requestmapping"
|
||||||
"PaymentCenter/app/utils"
|
"PaymentCenter/app/utils"
|
||||||
"PaymentCenter/config"
|
"context"
|
||||||
|
"errors"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/qit-team/snow-core/redis"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -57,42 +59,20 @@ func Cors() gin.HandlerFunc {
|
||||||
|
|
||||||
func AdminAuth() gin.HandlerFunc {
|
func AdminAuth() gin.HandlerFunc {
|
||||||
return func(c *gin.Context) {
|
return func(c *gin.Context) {
|
||||||
ip, _ := c.RemoteIP()
|
var token = c.GetHeader("token")
|
||||||
utils.Log(c, "请求地址RemoteIP()", ip.String(), config.GetConf().AdminGate)
|
//将token放入redis
|
||||||
clientIp := c.ClientIP()
|
var playerId, err = redis.GetRedis().Get(context.Background(), utils.GetRealKey(common.TOKEN_Admin+token)).Result()
|
||||||
utils.Log(c, "请求地址clientIp", clientIp)
|
if rs, errRedis := redis.GetRedis().SIsMember(context.Background(), "disabled_uids", playerId).Result(); errRedis == nil && rs {
|
||||||
|
err = errors.New(errorcode.GetMsg(errorcode.NotFound, ""))
|
||||||
if config.GetConf().Debug == false && !utils.SliceInStr(ip.String(), config.GetConf().AdminGate) {
|
redis.GetRedis().SRem(context.Background(), "disabled_uids", playerId)
|
||||||
c.Abort()
|
}
|
||||||
|
if err == nil {
|
||||||
|
c.Set("playerId", playerId)
|
||||||
|
c.Next()
|
||||||
|
return
|
||||||
|
} else {
|
||||||
controllers.HandCodeRes(c, nil, errorcode.Forbidden)
|
controllers.HandCodeRes(c, nil, errorcode.Forbidden)
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var userName = c.GetHeader("User-Name")
|
|
||||||
if userName != "" {
|
|
||||||
c.Set(common.ADMIN_USER_NAME, userName)
|
|
||||||
}
|
|
||||||
var IncludeUsers = c.GetHeader("Include-Users")
|
|
||||||
if IncludeUsers != "" {
|
|
||||||
c.Set(common.ADMIN_USER_INCLUDEUSERS, IncludeUsers)
|
|
||||||
}
|
|
||||||
|
|
||||||
var adminId = c.GetHeader("User-Id")
|
|
||||||
// 测试环境直接放行
|
|
||||||
if config.GetConf().Debug == true {
|
|
||||||
c.Set(common.ADMIN_USER_ID, adminId)
|
|
||||||
c.Next()
|
|
||||||
} else {
|
|
||||||
utils.Log(c, "请求header信息", "adminId="+adminId, "IncludeUsers="+IncludeUsers)
|
|
||||||
// 正式环境校验
|
|
||||||
if adminId != "" {
|
|
||||||
c.Set(common.ADMIN_USER_ID, adminId)
|
|
||||||
c.Next()
|
|
||||||
} else {
|
|
||||||
c.Abort()
|
c.Abort()
|
||||||
controllers.HandCodeRes(c, nil, errorcode.NotAuth)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ func RegisterAdminRoute(router *gin.Engine) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
v1 := router.Group("/pay/admin/api/v1", middlewares.AdminAuth(), middlewares.ValidateRequest())
|
v1 := router.Group("/admin/pay/api/v1", middlewares.ValidateRequest())
|
||||||
{
|
{
|
||||||
// 商户管理
|
// 商户管理
|
||||||
merchant := v1.Group("/merchant")
|
merchant := v1.Group("/merchant")
|
||||||
|
|
|
@ -18,7 +18,6 @@ type Merchant struct {
|
||||||
Contact string `xorm:"'contact' varchar(128)"`
|
Contact string `xorm:"'contact' varchar(128)"`
|
||||||
Phone string `xorm:"'phone' varchar(11)"`
|
Phone string `xorm:"'phone' varchar(11)"`
|
||||||
Remark string `xorm:"'remark' varchar(1024)"`
|
Remark string `xorm:"'remark' varchar(1024)"`
|
||||||
Creator int `xorm:"'creator' int(10)"`
|
|
||||||
CreateTime time.Time `xorm:"'create_time' datetime created"`
|
CreateTime time.Time `xorm:"'create_time' datetime created"`
|
||||||
UpdateTime time.Time `xorm:"'update_time' timestamp updated"`
|
UpdateTime time.Time `xorm:"'update_time' timestamp updated"`
|
||||||
DeleteTime time.Time `xorm:"'delete_time' timestamp deleted"`
|
DeleteTime time.Time `xorm:"'delete_time' timestamp deleted"`
|
||||||
|
|
|
@ -18,9 +18,6 @@ func AppList(req backend.AppListRequest) (result []appmodel.App, total int64, co
|
||||||
if req.MerchantId > 0 {
|
if req.MerchantId > 0 {
|
||||||
conn = conn.And(builder.Eq{"merchant_id": req.MerchantId})
|
conn = conn.And(builder.Eq{"merchant_id": req.MerchantId})
|
||||||
}
|
}
|
||||||
if req.Id > 0 {
|
|
||||||
conn = conn.And(builder.Eq{"id": req.Id})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 调用repo
|
// 调用repo
|
||||||
appList := make([]appmodel.App, 0)
|
appList := make([]appmodel.App, 0)
|
||||||
|
@ -29,13 +26,13 @@ func AppList(req backend.AppListRequest) (result []appmodel.App, total int64, co
|
||||||
return appList, count, code
|
return appList, count, code
|
||||||
}
|
}
|
||||||
|
|
||||||
func AppCreate(app *appmodel.App) (code int) {
|
func AppCreate(App *appmodel.App) (code int) {
|
||||||
db := paychannelmodel.GetInstance().GetDb()
|
db := paychannelmodel.GetInstance().GetDb()
|
||||||
repo := data.NewAppRepo(db)
|
repo := data.NewAppRepo(db)
|
||||||
merchantRepo := data.NewMerchantRepo(db)
|
merchantRepo := data.NewMerchantRepo(db)
|
||||||
// 拼接查询条件
|
// 拼接查询条件
|
||||||
conn := builder.NewCond()
|
conn := builder.NewCond()
|
||||||
conn = conn.And(builder.Eq{"id": app.MerchantId})
|
conn = conn.And(builder.Eq{"id": App.MerchantId})
|
||||||
merchant := merchantmodel.Merchant{}
|
merchant := merchantmodel.Merchant{}
|
||||||
has, err := merchantRepo.MerchantDetail(&merchant, conn)
|
has, err := merchantRepo.MerchantDetail(&merchant, conn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -45,25 +42,31 @@ func AppCreate(app *appmodel.App) (code int) {
|
||||||
return errorcode.MerchantNotFound
|
return errorcode.MerchantNotFound
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = repo.AppInsertOne(app)
|
_, err = repo.AppInsertOne(App)
|
||||||
code = handErr(err)
|
code = handErr(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func AppUpdate(app *appmodel.App) (code int) {
|
func AppUpdate(App *appmodel.App) (code int) {
|
||||||
var err error
|
|
||||||
db := paychannelmodel.GetInstance().GetDb()
|
db := paychannelmodel.GetInstance().GetDb()
|
||||||
repo := data.NewAppRepo(db)
|
repo := data.NewAppRepo(db)
|
||||||
|
merchantRepo := data.NewMerchantRepo(db)
|
||||||
// 拼接查询条件
|
// 拼接查询条件
|
||||||
conn := builder.NewCond()
|
conn := builder.NewCond()
|
||||||
conn = conn.And(builder.Eq{"Id": app.Id})
|
conn = conn.And(builder.Eq{"id": App.MerchantId})
|
||||||
if app.AppName != "" {
|
merchant := merchantmodel.Merchant{}
|
||||||
// 编辑页面更新,备注和白名单IP可更新为空
|
has, err := merchantRepo.MerchantDetail(&merchant, conn)
|
||||||
_, err = repo.AppUpdate(app, conn, "app_remark", "white_ip")
|
if err != nil {
|
||||||
} else {
|
return handErr(err)
|
||||||
_, err = repo.AppUpdate(app, conn)
|
|
||||||
}
|
}
|
||||||
|
if !has {
|
||||||
|
return errorcode.MerchantNotFound
|
||||||
|
}
|
||||||
|
|
||||||
|
// 拼接查询条件
|
||||||
|
uconn := builder.NewCond()
|
||||||
|
uconn = uconn.And(builder.Eq{"Id": App.Id})
|
||||||
|
_, err = repo.AppUpdate(App, uconn, "app_remark")
|
||||||
|
|
||||||
code = handErr(err)
|
code = handErr(err)
|
||||||
return
|
return
|
||||||
|
@ -81,19 +84,3 @@ func AppDelete(req entities.IdRequest) (code int) {
|
||||||
code = handErr(err)
|
code = handErr(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func AppGet(app *appmodel.App) (code int) {
|
|
||||||
repo := data.NewAppRepo(appmodel.GetInstance().GetDb())
|
|
||||||
// 拼接查询条件
|
|
||||||
conn := builder.NewCond()
|
|
||||||
conn = conn.And(builder.Eq{"id": app.Id})
|
|
||||||
has, err := repo.AppGet(app, conn)
|
|
||||||
if err != nil {
|
|
||||||
return handErr(err)
|
|
||||||
}
|
|
||||||
if !has {
|
|
||||||
return errorcode.AppNotFound
|
|
||||||
}
|
|
||||||
code = errorcode.Success
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
|
@ -5,7 +5,6 @@ import (
|
||||||
"PaymentCenter/app/http/entities"
|
"PaymentCenter/app/http/entities"
|
||||||
"PaymentCenter/app/http/entities/backend"
|
"PaymentCenter/app/http/entities/backend"
|
||||||
"PaymentCenter/app/models/merchantmodel"
|
"PaymentCenter/app/models/merchantmodel"
|
||||||
"strings"
|
|
||||||
"xorm.io/builder"
|
"xorm.io/builder"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -23,9 +22,6 @@ func MerchantList(req backend.MerchantListRequest) (result []merchantmodel.Merch
|
||||||
if req.Phone != "" {
|
if req.Phone != "" {
|
||||||
conn = conn.And(builder.Like{"phone", req.Phone})
|
conn = conn.And(builder.Like{"phone", req.Phone})
|
||||||
}
|
}
|
||||||
if req.GroupInfo != "" {
|
|
||||||
conn = conn.And(builder.In("creator", strings.Split(req.GroupInfo, ",")))
|
|
||||||
}
|
|
||||||
|
|
||||||
// 调用repo
|
// 调用repo
|
||||||
merchantList := make([]merchantmodel.Merchant, 0)
|
merchantList := make([]merchantmodel.Merchant, 0)
|
||||||
|
|
|
@ -17,9 +17,6 @@ func PayChannelList(req backend.PayChannelListRequest) (result []paychannelmodel
|
||||||
if req.MerchantId > 0 {
|
if req.MerchantId > 0 {
|
||||||
conn = conn.And(builder.Eq{"merchant_id": req.MerchantId})
|
conn = conn.And(builder.Eq{"merchant_id": req.MerchantId})
|
||||||
}
|
}
|
||||||
if req.Id > 0 {
|
|
||||||
conn = conn.And(builder.Eq{"id": req.Id})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 调用repo
|
// 调用repo
|
||||||
paychannelList := make([]paychannelmodel.PayChannel, 0)
|
paychannelList := make([]paychannelmodel.PayChannel, 0)
|
||||||
|
@ -52,11 +49,23 @@ func PayChannelCreate(payChannel *paychannelmodel.PayChannel) (code int) {
|
||||||
func PayChannelUpdate(payChannel *paychannelmodel.PayChannel) (code int) {
|
func PayChannelUpdate(payChannel *paychannelmodel.PayChannel) (code int) {
|
||||||
db := paychannelmodel.GetInstance().GetDb()
|
db := paychannelmodel.GetInstance().GetDb()
|
||||||
repo := data.NewPayChannelRepo(db)
|
repo := data.NewPayChannelRepo(db)
|
||||||
|
merchantRepo := data.NewMerchantRepo(db)
|
||||||
|
// 拼接查询条件
|
||||||
|
conn := builder.NewCond()
|
||||||
|
conn = conn.And(builder.Eq{"id": payChannel.MerchantId})
|
||||||
|
merchant := merchantmodel.Merchant{}
|
||||||
|
has, err := merchantRepo.MerchantDetail(&merchant, conn)
|
||||||
|
if err != nil {
|
||||||
|
return handErr(err)
|
||||||
|
}
|
||||||
|
if !has {
|
||||||
|
return errorcode.MerchantNotFound
|
||||||
|
}
|
||||||
|
|
||||||
// 拼接查询条件
|
// 拼接查询条件
|
||||||
uconn := builder.NewCond()
|
uconn := builder.NewCond()
|
||||||
uconn = uconn.And(builder.Eq{"Id": payChannel.Id})
|
uconn = uconn.And(builder.Eq{"Id": payChannel.Id})
|
||||||
_, err := repo.PayChannelUpdate(payChannel, uconn, "white_ip")
|
_, err = repo.PayChannelUpdate(payChannel, uconn, "white_ip")
|
||||||
|
|
||||||
code = handErr(err)
|
code = handErr(err)
|
||||||
return
|
return
|
||||||
|
@ -74,21 +83,3 @@ func PayChannelDelete(req entities.IdRequest) (code int) {
|
||||||
code = handErr(err)
|
code = handErr(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func PayChannelGet(payChannel *paychannelmodel.PayChannel) (code int) {
|
|
||||||
repo := data.NewPayChannelRepo(paychannelmodel.GetInstance().GetDb())
|
|
||||||
|
|
||||||
// 拼接查询条件
|
|
||||||
conn := builder.NewCond()
|
|
||||||
conn = conn.And(builder.Eq{"Id": payChannel.Id})
|
|
||||||
has, err := repo.PayChannelGet(payChannel, conn)
|
|
||||||
if err != nil {
|
|
||||||
return handErr(err)
|
|
||||||
}
|
|
||||||
if !has {
|
|
||||||
return errorcode.PayChannelNotFound
|
|
||||||
}
|
|
||||||
|
|
||||||
code = errorcode.Success
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
|
@ -410,13 +410,3 @@ func ParseToken(tokenString string) (*jwt.Token, *Claims, error) {
|
||||||
})
|
})
|
||||||
return token, Claims, err
|
return token, Claims, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// 判断切片是否包含指定字符串
|
|
||||||
func SliceInStr(s string, slice []string) bool {
|
|
||||||
for _, v := range slice {
|
|
||||||
if s == v {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
|
@ -4,10 +4,11 @@ import (
|
||||||
"PaymentCenter/app/jobs"
|
"PaymentCenter/app/jobs"
|
||||||
"PaymentCenter/app/jobs/basejob"
|
"PaymentCenter/app/jobs/basejob"
|
||||||
"PaymentCenter/config"
|
"PaymentCenter/config"
|
||||||
|
"github.com/qit-team/snow-core/log/accesslogger"
|
||||||
|
|
||||||
"github.com/qit-team/snow-core/db"
|
"github.com/qit-team/snow-core/db"
|
||||||
"github.com/qit-team/snow-core/kernel/close"
|
"github.com/qit-team/snow-core/kernel/close"
|
||||||
"github.com/qit-team/snow-core/kernel/container"
|
"github.com/qit-team/snow-core/kernel/container"
|
||||||
"github.com/qit-team/snow-core/log/accesslogger"
|
|
||||||
"github.com/qit-team/snow-core/log/logger"
|
"github.com/qit-team/snow-core/log/logger"
|
||||||
"github.com/qit-team/snow-core/redis"
|
"github.com/qit-team/snow-core/redis"
|
||||||
)
|
)
|
||||||
|
@ -25,8 +26,6 @@ func Bootstrap(conf *config.Config) (err error) {
|
||||||
//注册db服务
|
//注册db服务
|
||||||
//第一个参数为注入别名,第二个参数为配置,第三个参数可选为是否懒加载
|
//第一个参数为注入别名,第二个参数为配置,第三个参数可选为是否懒加载
|
||||||
err = db.Pr.Register(db.SingletonMain, conf.Db)
|
err = db.Pr.Register(db.SingletonMain, conf.Db)
|
||||||
//cacher := caches.NewLRUCacher2(caches.NewMemoryStore(), time.Hour, 1000)
|
|
||||||
//db.GetDb().SetDefaultCacher(cacher)
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
|
|
@ -36,7 +36,6 @@ type Config struct {
|
||||||
OpenApi OpenApi `toml:"OpenApi"`
|
OpenApi OpenApi `toml:"OpenApi"`
|
||||||
Jwt Jwt `toml:"Jwt"`
|
Jwt Jwt `toml:"Jwt"`
|
||||||
AliOss AliOss `toml:"AliOss"`
|
AliOss AliOss `toml:"AliOss"`
|
||||||
AdminGate []string `toml:"AdminGate"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type AliOss struct {
|
type AliOss struct {
|
||||||
|
|
Loading…
Reference in New Issue