Commit 9bfde828 authored by wangp's avatar wangp

lakala

parent 1dd7c9e0
...@@ -34,8 +34,8 @@ WORKDIR /go/src/system_pay ...@@ -34,8 +34,8 @@ WORKDIR /go/src/system_pay
COPY --from=0 /go/src/system_pay/server ./ COPY --from=0 /go/src/system_pay/server ./
# 拷贝配置文件到当前工作目录 # 拷贝配置文件到当前工作目录
# COPY --from=0 /go/src/system_pay/conf/dev ./conf COPY --from=0 /go/src/system_pay/conf/dev ./conf
COPY --from=0 /go/src/system_pay/conf/prod ./conf #COPY --from=0 /go/src/system_pay/conf/prod ./conf
# 拷贝国际化文件夹到当前工作目录 # 拷贝国际化文件夹到当前工作目录
COPY --from=0 /go/src/system_pay/i18n ./i18n COPY --from=0 /go/src/system_pay/i18n ./i18n
......
...@@ -30,12 +30,12 @@ database: ...@@ -30,12 +30,12 @@ database:
# dbname: "test_food" # dbname: "test_food"
# redis # redis
redis: #redis:
host: '39.96.85.45' # host: '39.96.85.45'
port: 6382 # port: 6382
password: 'saas123456' # password: 'saas123456'
db: 0 # db: 0
pool_size: 200 # pool_size: 200
# mongo # mongo
...@@ -59,8 +59,8 @@ log: ...@@ -59,8 +59,8 @@ log:
# smscontent: '【谛宝医生】登录验证码为:%s' # smscontent: '【谛宝医生】登录验证码为:%s'
# 支付 # 支付
#payurl: payurl:
# domainname: 'http://tpay-v2.pet-dbc.cn:14880' domainname: 'http://tpay-v2.pet-dbc.cn:14880'
# checkorder: 'https://tpay.pet-dbc.cn/v1/pay/unified_order' # checkorder: 'https://tpay.pet-dbc.cn/v1/pay/unified_order'
# orderstate: 'https://tpay.pet-dbc.cn/v1/pay/order_state/' # orderstate: 'https://tpay.pet-dbc.cn/v1/pay/order_state/'
......
...@@ -32,12 +32,12 @@ database: ...@@ -32,12 +32,12 @@ database:
# dbname: "test_food" # dbname: "test_food"
# redis # redis
redis: #redis:
host: '39.97.179.15' # host: '39.97.179.15'
port: 6382 # port: 6382
password: 'saas123456' # password: 'saas123456'
db: 0 # db: 0
pool_size: 200 # pool_size: 200
# mongo # mongo
...@@ -62,8 +62,8 @@ sms: ...@@ -62,8 +62,8 @@ sms:
smscontent: '【谛宝多多】登录验证码为:%s' smscontent: '【谛宝多多】登录验证码为:%s'
# 支付 # 支付
#payurl: payurl:
# domainname: 'http://tpay-v2.pet-dbc.cn:14880' domainname: 'http://tpay-v2.pet-dbc.cn:14880'
# checkorder: 'https://pay.pet-dbc.cn/v1/pay/unified_order' # checkorder: 'https://pay.pet-dbc.cn/v1/pay/unified_order'
# orderstate: 'https://pay.pet-dbc.cn/v1/pay/order_state/' # orderstate: 'https://pay.pet-dbc.cn/v1/pay/order_state/'
...@@ -74,16 +74,18 @@ lakala: ...@@ -74,16 +74,18 @@ lakala:
version: '1.0' version: '1.0'
# appid: 'OP00000836' #SAAS # appid: 'OP00000836' #SAAS
# appid名称: '机构-羿律必康(天津)网络科技有限公司' # appid名称: '机构-羿律必康(天津)网络科技有限公司'
# serial_no: '0188b7d3d751'
# serial_no: '1686711293777' # serial_no: '1686711293777'
# serial_no: '0188b7d3d751'
appid: 'OP00000859' #谛宝多多自营 appid: 'OP00000859' #谛宝多多自营
appid名称: '商户-谛宝诚网络科技(北京)有限公司' appid名称: '商户-谛宝诚网络科技(北京)有限公司'
serial_no: '1689571622248' serial_no: '1689571622248'
# 'APPLET_APPID' =>'wx6ff40a576e2f4ca0', //谛宝多多小程序
# merchant_no=822100058221000599501K999501K9 ?
# appid: '' #必康自营 # appid: '' #必康自营
# appid名称: '' # appid名称: ''
# serial_no: '' # serial_no: '1689571807509'
#1.聚合收银台(微信H5、支付宝H5) #1.聚合收银台(微信H5、支付宝H5)
merchant_no1: '8222900701107M5' merchant_no1: '8222900701107M5'
...@@ -94,8 +96,8 @@ lakala: ...@@ -94,8 +96,8 @@ lakala:
#3.聚合主扫(微信JSAPI、微信小程序) #3.聚合主扫(微信JSAPI、微信小程序)
merchant_no3: '8222900581201QB' merchant_no3: '8222900581201QB'
term_no3: 'D0027598' term_no3: 'D0027598'
sub_appid3: 'wxc3e4d1682da3053c' sub_appid3: 'wxc3e4d1682da3053c' #子商户公众账号ID
user_id3: 'oLvoQ5deygCMj2WrDjPVPvV1L1t8' user_id3: 'oLvoQ5deygCMj2WrDjPVPvV1L1t8' #用户标识(sub_openid)
#4.聚合被扫(扫码枪) #4.聚合被扫(扫码枪)
merchant_no4: '822290070111135' #结算商户号 merchant_no4: '822290070111135' #结算商户号
term_no4: '29034705' #结算终端号 term_no4: '29034705' #结算终端号
......
package pay package pay
import ( import (
"crypto"
"crypto/rsa"
"crypto/sha256"
"crypto/x509"
"encoding/base64"
"encoding/pem"
"errors"
"fmt" "fmt"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"io/ioutil"
"system_pay/controller/base" "system_pay/controller/base"
"system_pay/models" "system_pay/models"
"system_pay/repository/pay" "system_pay/repository/pay"
...@@ -108,54 +100,54 @@ func (l *PayController) WxNotice(c *gin.Context) { ...@@ -108,54 +100,54 @@ func (l *PayController) WxNotice(c *gin.Context) {
// return errors.New("wangpei签名测试中。。。。。") // return errors.New("wangpei签名测试中。。。。。")
//} //}
func verySignByPublicKey(c *gin.Context) (bool, error) { //func verySignByPublicKey(c *gin.Context) (bool, error) {
//
//publicKey string, data []byte, signData []byte // //publicKey string, data []byte, signData []byte
//String responseStr = IOUtils.toString(response.getEntity().getContent(), ENCODING); // //String responseStr = IOUtils.toString(response.getEntity().getContent(), ENCODING);
appid := c.GetHeader("Lklapi-Appid") // appid := c.GetHeader("Lklapi-Appid")
lklapiSerial := c.GetHeader("Lklapi-Serial") // lklapiSerial := c.GetHeader("Lklapi-Serial")
timestamp := c.GetHeader("Lklapi-Timestamp") // timestamp := c.GetHeader("Lklapi-Timestamp")
nonce := c.GetHeader("Lklapi-Nonce") // nonce := c.GetHeader("Lklapi-Nonce")
signature := c.GetHeader("Lklapi-Signature") // signature := c.GetHeader("Lklapi-Signature")
responseStr := c.GetHeader("") // responseStr := c.GetHeader("")
//
data := appid + "\n" + lklapiSerial + "\n" + timestamp + "\n" + nonce + "\n" + responseStr + "\n"; // data := appid + "\n" + lklapiSerial + "\n" + timestamp + "\n" + nonce + "\n" + responseStr + "\n";
fmt.Println("verySignByPublicKey start...") //fmt.Println("verySignByPublicKey start...")
fmt.Println(data) //fmt.Println(data)
fmt.Println("signature="+signature) //fmt.Println("signature="+signature)
//
// 1、读取公钥文件,获取公钥字节 // // 1、读取公钥文件,获取公钥字节
//path_cert := setting.Conf.Lakala.BkPathCert // //path_cert := setting.Conf.Lakala.BkPathCert
publicKey, err := ioutil.ReadFile("./cert/dev/lkl-apigw-v2.cer") // publicKey, err := ioutil.ReadFile("./cert/dev/lkl-apigw-v2.cer")
if err != nil { // if err != nil {
return false, err // return false, err
} // }
// 2、解码私钥字节,生成加密对象 // // 2、解码私钥字节,生成加密对象
block, _ := pem.Decode(publicKey) // block, _ := pem.Decode(publicKey)
if block == nil { // if block == nil {
return false, errors.New("私钥信息错误!") // return false, errors.New("私钥信息错误!")
} // }
// 3、解析DER编码的私钥,生成私钥对象 // // 3、解析DER编码的私钥,生成私钥对象
pubKey, err := x509.ParsePKIXPublicKey(block.Bytes) // pubKey, err := x509.ParsePKIXPublicKey(block.Bytes)
if err != nil { // if err != nil {
return false, err // return false, err
} // }
//
hashed := sha256.Sum256([]byte(data)) // hashed := sha256.Sum256([]byte(data))
//
fmt.Println("pubKey.(*rsa.PublicKey): ", pubKey.(*rsa.PublicKey)) // fmt.Println("pubKey.(*rsa.PublicKey): ", pubKey.(*rsa.PublicKey))
//
pubK := pubKey.(*rsa.PublicKey) // pubK := pubKey.(*rsa.PublicKey)
//
sig, err := base64.StdEncoding.DecodeString(signature) // sig, err := base64.StdEncoding.DecodeString(signature)
//
err = rsa.VerifyPKCS1v15(pubK, crypto.SHA256, hashed[:], sig) // err = rsa.VerifyPKCS1v15(pubK, crypto.SHA256, hashed[:], sig)
if err != nil { // if err != nil {
return false, err // return false, err
} // }
//
return true, nil // return true, nil
} //}
//const ( //const (
// PEM_BEGIN = "-----BEGIN RSA PRIVATE KEY-----\n" // PEM_BEGIN = "-----BEGIN RSA PRIVATE KEY-----\n"
......
...@@ -9,7 +9,6 @@ import ( ...@@ -9,7 +9,6 @@ import (
"os/exec" "os/exec"
_ "system_pay/docs" _ "system_pay/docs"
logger "system_pay/pkg/logging" logger "system_pay/pkg/logging"
"system_pay/redis"
routers "system_pay/router" routers "system_pay/router"
"system_pay/setting" "system_pay/setting"
) )
...@@ -50,13 +49,13 @@ func main() { ...@@ -50,13 +49,13 @@ func main() {
} }
// redis // redis
if err := redis.Init(setting.Conf.Redis); err != nil { //if err := redis.Init(setting.Conf.Redis); err != nil {
panic("init redis failed, new_error:"+ err.Error()) // panic("init redis failed, new_error:"+ err.Error())
//fmt.Printf("init redis failed, new_error:%v\n", new_error) // //fmt.Printf("init redis failed, new_error:%v\n", new_error)
//return // //return
} //}
// 关闭项目时候关闭redis连接 // 关闭项目时候关闭redis连接
defer redis.Close() //defer redis.Close()
// mongo // mongo
//MongoDB, err := mongo.ConnectToMongoDB() //MongoDB, err := mongo.ConnectToMongoDB()
......
package redis package redis
//
import ( //import (
"fmt" // "fmt"
"github.com/go-redis/redis" // "github.com/go-redis/redis"
"system_pay/setting" // "system_pay/setting"
) //)
//
var ( //var (
Redisclient *redis.Client // Redisclient *redis.Client
Nil = redis.Nil // Nil = redis.Nil
) //)
//
// Init 初始化连接 //// Init 初始化连接
func Init(cfg *setting.RedisConfig) (err error) { //func Init(cfg *setting.RedisConfig) (err error) {
//
Redisclient = redis.NewClient(&redis.Options{ // Redisclient = redis.NewClient(&redis.Options{
Addr: fmt.Sprintf("%s:%d", cfg.Host, cfg.Port), // Addr: fmt.Sprintf("%s:%d", cfg.Host, cfg.Port),
Password: cfg.Password, // no password set // Password: cfg.Password, // no password set
DB: cfg.DB, // use default DB // DB: cfg.DB, // use default DB
PoolSize: cfg.PoolSize, // PoolSize: cfg.PoolSize,
MinIdleConns: cfg.MinIdleConns, // MinIdleConns: cfg.MinIdleConns,
}) // })
//
//
_, err = Redisclient.Ping().Result() // _, err = Redisclient.Ping().Result()
if err != nil { // if err != nil {
return err // return err
} // }
return err // return err
} //}
//
func Close() { //func Close() {
_ = Redisclient.Close() // _ = Redisclient.Close()
} //}
...@@ -15,7 +15,7 @@ type Config struct { ...@@ -15,7 +15,7 @@ type Config struct {
ServerSetting *Server `mapstructure:"server"` ServerSetting *Server `mapstructure:"server"`
AppSetting *App `mapstructure:"app"` AppSetting *App `mapstructure:"app"`
DatabaseSetting *Database `mapstructure:"database"` DatabaseSetting *Database `mapstructure:"database"`
Redis *RedisConfig `mapstructure:"redis"` //Redis *RedisConfig `mapstructure:"redis"`
LogSetting *Log `mapstructure:"log"` LogSetting *Log `mapstructure:"log"`
Sms *SmsInternationalConfig `mapstructure:"sms"` Sms *SmsInternationalConfig `mapstructure:"sms"`
UploadImage *UploadImage `mapstructure:"uploadimage"` UploadImage *UploadImage `mapstructure:"uploadimage"`
...@@ -75,14 +75,14 @@ type Database struct { ...@@ -75,14 +75,14 @@ type Database struct {
} }
// RedisConfig redis // RedisConfig redis
type RedisConfig struct { //type RedisConfig struct {
Host string `mapstructure:"host"` // Host string `mapstructure:"host"`
Password string `mapstructure:"password"` // Password string `mapstructure:"password"`
Port int `mapstructure:"port"` // Port int `mapstructure:"port"`
DB int `mapstructure:"db"` // DB int `mapstructure:"db"`
PoolSize int `mapstructure:"pool_size"` // PoolSize int `mapstructure:"pool_size"`
MinIdleConns int `mapstructure:"min_idle_conns"` // MinIdleConns int `mapstructure:"min_idle_conns"`
} //}
// MongoConfig mongo设置 // MongoConfig mongo设置
//type MongoConfig struct { //type MongoConfig struct {
...@@ -185,7 +185,7 @@ type Esign struct { ...@@ -185,7 +185,7 @@ type Esign struct {
// Init 支持热修改的viper设置 // Init 支持热修改的viper设置
func Init() error { func Init() error {
viper.SetConfigFile("conf/config.yaml") // 指定配置文件路径 viper.SetConfigFile("conf/dev/config.yaml") // 指定配置文件路径
err := viper.ReadInConfig() // 读取配置信息 err := viper.ReadInConfig() // 读取配置信息
if err != nil { // 读取配置信息失败 if err != nil { // 读取配置信息失败
fmt.Printf("viper.ReadInConfig failed, new_error:%v\n", err) fmt.Printf("viper.ReadInConfig failed, new_error:%v\n", err)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment