@@ -0,0 +1,46 @@ | |||||
# Binaries for programs and plugins | |||||
*.exe | |||||
*.exe~ | |||||
*.dll | |||||
*.so | |||||
*.dylib | |||||
# Test binary, built with `go test -c` | |||||
*.test | |||||
# Output of the go coverage tool, specifically when used with LiteIDE | |||||
*.out | |||||
.idea | |||||
.vscode | |||||
*.log | |||||
.DS_Store | |||||
Thumbs.db | |||||
*.swp | |||||
*.swn | |||||
*.swo | |||||
*.swm | |||||
*.7z | |||||
*.zip | |||||
*.rar | |||||
*.tar | |||||
*.tar.gz | |||||
go.sum | |||||
/etc/cfg.yaml | |||||
images | |||||
test/test.json | |||||
etc/cfg.yml | |||||
t.json | |||||
t1.json | |||||
t2.json | |||||
t3.json | |||||
t.go | |||||
wait-for-it.sh | |||||
test.go | |||||
xorm | |||||
test.csv | |||||
nginx.conf | |||||
.devcontainer | |||||
.devcontainer/Dockerfile | |||||
.devcontainer/sources.list | |||||
/t1.go | |||||
/tmp/* | |||||
.idea/* | |||||
/.idea/modules.xml |
@@ -0,0 +1,84 @@ | |||||
package db | |||||
import ( | |||||
"code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/md" | |||||
"database/sql" | |||||
"fmt" | |||||
_ "github.com/go-sql-driver/mysql" //必须导入mysql驱动,否则会panic | |||||
"os" | |||||
"time" | |||||
"xorm.io/xorm" | |||||
"xorm.io/xorm/log" | |||||
) | |||||
var Db *xorm.Engine | |||||
//根据DB配置文件初始化数据库 | |||||
func InitDB(c *md.DBCfg) error { | |||||
var ( | |||||
err error | |||||
f *os.File | |||||
) | |||||
//创建Orm引擎 | |||||
if Db, err = xorm.NewEngine("mysql", fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4", c.User, c.Psw, c.Host, c.Name)); err != nil { | |||||
return err | |||||
} | |||||
Db.SetConnMaxLifetime(c.MaxLifetime * time.Second) //设置最长连接时间 | |||||
Db.SetMaxOpenConns(c.MaxOpenConns) //设置最大打开连接数 | |||||
Db.SetMaxIdleConns(c.MaxIdleConns) //设置连接池的空闲数大小 | |||||
if err = Db.Ping(); err != nil { //尝试ping数据库 | |||||
return err | |||||
} | |||||
if c.ShowLog { //根据配置文件设置日志 | |||||
Db.ShowSQL(true) //设置是否打印sql | |||||
Db.Logger().SetLevel(0) //设置日志等级 | |||||
//修改日志文件存放路径文件名是%s.log | |||||
path := fmt.Sprintf(c.Path, c.Name) | |||||
f, err = os.OpenFile(path, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0777) | |||||
if err != nil { | |||||
os.RemoveAll(c.Path) | |||||
if f, err = os.OpenFile(c.Path, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0777); err != nil { | |||||
return err | |||||
} | |||||
} | |||||
logger := log.NewSimpleLogger(f) | |||||
logger.ShowSQL(true) | |||||
Db.SetLogger(logger) | |||||
} | |||||
return nil | |||||
} | |||||
/********************************************* 公用方法 *********************************************/ | |||||
// QueryNativeString 查询原生sql | |||||
func QueryNativeString(Db *xorm.Engine, sql string, args ...interface{}) ([]map[string]string, error) { | |||||
results, err := Db.SQL(sql, args...).QueryString() | |||||
return results, err | |||||
} | |||||
// UpdateComm common update | |||||
func UpdateComm(Db *xorm.Engine, id interface{}, model interface{}) (int64, error) { | |||||
row, err := Db.ID(id).Update(model) | |||||
return row, err | |||||
} | |||||
// InsertComm common insert | |||||
func InsertComm(Db *xorm.Engine, model interface{}) (int64, error) { | |||||
row, err := Db.InsertOne(model) | |||||
return row, err | |||||
} | |||||
// InsertCommWithSession common insert | |||||
func InsertCommWithSession(session *xorm.Session, model interface{}) (int64, error) { | |||||
row, err := session.InsertOne(model) | |||||
return row, err | |||||
} | |||||
// ExecuteOriginalSql 执行原生sql | |||||
func ExecuteOriginalSql(session *xorm.Session, sql string) (sql.Result, error) { | |||||
result, err := session.Exec(sql) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
return result, nil | |||||
} |
@@ -0,0 +1,18 @@ | |||||
package model | |||||
import "time" | |||||
type PayChannel struct { | |||||
Id int `json:"id" xorm:"not null pk autoincr INT(11)"` | |||||
Name string `json:"name" xorm:"not null comment('渠道名称') VARCHAR(255)"` | |||||
IsUse int `json:"is_use" xorm:"not null default 1 comment('是否开启;1:开启;0:关闭') TINYINT(1)"` | |||||
ThirdPartyId string `json:"third_party_id" xorm:"not null comment('第三方聚合支付的渠道id') VARCHAR(20)"` | |||||
Kind string `json:"kind" xorm:"not null comment('渠道种类(self:自有支付 zhiYing:智莺支付 thirdParty 第三方聚合支付 )') VARCHAR(255)"` | |||||
ModuleIdentifier string `json:"module_identifier" xorm:"not null comment('模块标识符') VARCHAR(255)"` | |||||
ModuleName string `json:"module_name" xorm:"not null comment('模块名称') VARCHAR(255)"` | |||||
CommissionRate string `json:"commission_rate" xorm:"not null comment('抽成比例(千分之)') VARCHAR(255)"` | |||||
Memo string `json:"memo" xorm:"not null comment('备注') VARCHAR(255)"` | |||||
Ext string `json:"ext" xorm:"comment('拓展字段(json存储)') TEXT"` | |||||
CreateAt time.Time `json:"create_at" xorm:"default 'CURRENT_TIMESTAMP' comment('创建时间') TIMESTAMP"` | |||||
UpdateAt time.Time `json:"update_at" xorm:"default 'CURRENT_TIMESTAMP' comment('更新时间') TIMESTAMP"` | |||||
} |
@@ -0,0 +1,10 @@ | |||||
package model | |||||
type PayChannelMaster struct { | |||||
Id int `json:"id" xorm:"not null pk autoincr INT(11)"` | |||||
ChannelId int `json:"channel_id" xorm:"not null default 1 comment('支付通道id') INT(11)"` | |||||
Identifier string `json:"identifier" xorm:"not null comment('场景标识符') VARCHAR(255)"` | |||||
MasterId int `json:"master_id" xorm:"not null default 1 comment('站长id') INT(11)"` | |||||
MasterNickname string `json:"master_nickname" xorm:"not null comment('站长名称') VARCHAR(255)"` | |||||
AppId int `json:"app_id" xorm:"not null default 1 comment('应用id(mid)') INT(20)"` | |||||
} |
@@ -1,3 +1,9 @@ | |||||
module code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git | module code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git | ||||
go 1.16 | go 1.16 | ||||
require ( | |||||
github.com/go-sql-driver/mysql v1.6.0 | |||||
xorm.io/builder v0.3.10 // indirect | |||||
xorm.io/xorm v1.3.0 | |||||
) |
@@ -0,0 +1,16 @@ | |||||
package md | |||||
import "time" | |||||
//数据库配置结构体 | |||||
type DBCfg struct { | |||||
Host string `yaml:"host"` //ip及端口 | |||||
Name string `yaml:"name"` //库名 | |||||
User string `yaml:"user"` //用户 | |||||
Psw string `yaml:"psw"` //密码 | |||||
ShowLog bool `yaml:"show_log"` //是否显示SQL语句 | |||||
MaxLifetime time.Duration `yaml:"max_lifetime"` | |||||
MaxOpenConns int `yaml:"max_open_conns"` | |||||
MaxIdleConns int `yaml:"max_idle_conns"` | |||||
Path string `yaml:"path"` //日志文件存放路径 | |||||
} |
@@ -0,0 +1,34 @@ | |||||
package pay | |||||
import ( | |||||
"code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/db" | |||||
"code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/md" | |||||
) | |||||
var cfg = md.DBCfg{ | |||||
Host: "", | |||||
Name: "", | |||||
User: "", | |||||
Psw: "", | |||||
ShowLog: false, | |||||
MaxLifetime: 0, | |||||
MaxOpenConns: 0, | |||||
MaxIdleConns: 0, | |||||
Path: "", | |||||
} | |||||
func Init(host, name, user, psw string) error { | |||||
cfg.Host = host | |||||
cfg.Name = name | |||||
cfg.User = user | |||||
cfg.Psw = psw | |||||
cfg.ShowLog = true | |||||
cfg.MaxLifetime = 30 | |||||
cfg.MaxOpenConns = 100 | |||||
cfg.MaxIdleConns = 100 | |||||
cfg.Path = "tmp/%s.log" | |||||
if err := db.InitDB(&cfg); err != nil { | |||||
return err | |||||
} | |||||
return nil | |||||
} |
@@ -0,0 +1,20 @@ | |||||
package pay | |||||
import ( | |||||
"code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/db" | |||||
"code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/db/model" | |||||
"errors" | |||||
) | |||||
func JudgePayChannel(mid, paySceneIdentifier string) (model.PayChannel, error) { | |||||
var payChannelMaster = model.PayChannelMaster{} | |||||
var payChannel = model.PayChannel{} | |||||
_, err := db.Db.Where("app_id = ?", mid).And("identifier = ?", paySceneIdentifier).Get(&payChannelMaster) | |||||
if err != nil { | |||||
return payChannel, err | |||||
} | |||||
if payChannelMaster.ChannelId == 0 { | |||||
return payChannel, errors.New("请联系服务商绑定支付渠道") | |||||
} | |||||
return payChannel, nil | |||||
} |
@@ -0,0 +1,17 @@ | |||||
package pay | |||||
import ( | |||||
"testing" | |||||
) | |||||
func TestPay(t *testing.T) { | |||||
err := Init("119.23.182.117:3306", "zyos_website", "root", "Fnuo123com@") | |||||
if err != nil { | |||||
t.Errorf("Reverse == %s", err) | |||||
} | |||||
channel, err := JudgePayChannel("35618318", "mall") | |||||
if err != nil { | |||||
t.Errorf("Reverse == %s", err) | |||||
} | |||||
t.Log(channel.Name) | |||||
} |