Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
iGoogle-ink committed Oct 14, 2024
1 parent c222001 commit 6c71023
Show file tree
Hide file tree
Showing 19 changed files with 484 additions and 654 deletions.
36 changes: 29 additions & 7 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,15 +1,37 @@
FROM registry.cn-hangzhou.aliyuncs.com/fmm-ink/golang:1.19.9 AS builder
FROM golang:1.22.5 AS builder
WORKDIR /build
COPY . /build

RUN go env -w GO111MODULE=on && go env -w GOPROXY=https://goproxy.cn,direct && go env -w GOSUMDB=off && go mod tidy
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags "-s -w -extldflags '-static'" -o main main.go
# 设置编译环境变量
# GODEBUG=tlsrsakex=1。By default, cipher suites without ECDHE support are no longer offered by either clients or servers during pre-TLS 1.3 handshakes. This change can be reverted with the tlsrsakex=1 GODEBUG setting.
# https://go.dev/doc/go1.22
ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64 \
GOPROXY=https://goproxy.cn,direct \
GOPRIVATE=gomod.sunmi.com \
GOSUMDB=off \
GODEBUG=tlsrsakex=1

FROM registry.cn-hangzhou.aliyuncs.com/fmm-ink/alpine:3.18
# 将 go.mod 复制到容器中
COPY go.mod ./

# 下载依赖模块,并使用缓存
RUN --mount=type=cache,target=/root/.cache/go-build \
go mod download

# 把当前目录的所有内容copy到 WORKDIR指定的目录中
COPY . .

# Go编译,并使用缓存
RUN --mount=type=cache,target=/root/.cache/go-build \
go build -o main main.go && strip main

FROM alpine:3.19.1
WORKDIR /app

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories && apk add --no-cache curl net-tools busybox-extras iproute2
COPY --from=builder /build/main /usr/bin/main
COPY --from=builder /build/app/cfg/config.yaml /app/cfg/config.yaml
COPY --from=builder /build/app/conf/config.yaml /app/conf/config.yaml

CMD ["main", "-conf", "/app/cfg/config.yaml"]
CMD ["main", "-conf", "/app/conf/config.yaml"]
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ GoPay payment platform
## Terminal Run

```bash
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags "-s -w -extldflags '-static'" -o main main.go
RUN CGO_ENABLED=0 GOOS=linux go build -o main main.go && strip main

main -conf app/cfg/config.yaml
main -conf app/conf/config.yaml
```
35 changes: 9 additions & 26 deletions app/cfg/conf.go → app/conf/conf.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package cfg
package conf

import (
"github.com/go-pay/gopher/orm"
"github.com/go-pay/gopher/web"
"github.com/go-pay/gopher/xlog"
"github.com/go-pay/gopher/xtime"
"github.com/go-pay/orm"
"github.com/go-pay/web"
"github.com/go-pay/xtime"
)

var Conf = &Config{}
Expand Down Expand Up @@ -37,13 +36,11 @@ type Payment struct {
}

type WechatPay struct {
Appid string `yaml:"appid"`
MchId string `yaml:"mch_id"`
ApiKey string `yaml:"api_key"`
ApiV3Key string `yaml:"api_v3_key"`
CertFileContent string `yaml:"cert_file_content"`
KeyFileContent string `yaml:"key_file_content"`
Pkcs12FileContent string `yaml:"pkcs12_file_content"`
Appid string `yaml:"appid"`
MchId string `yaml:"mch_id"`
SerialNo string `yaml:"serial_no"`
ApiV3Key string `yaml:"api_v3_key"`
KeyFileContent string `yaml:"key_file_content"`
}

type Alipay struct {
Expand All @@ -53,17 +50,3 @@ type Alipay struct {
AlipayRootCertContent string `yaml:"alipay_root_cert_content"`
AlipayPublicCertContent string `yaml:"alipay_public_cert_content"`
}

// SetLogLevel debug, info, warn, error
func SetLogLevel(level string) {
switch level {
case "debug":
xlog.Level = xlog.DebugLevel
case "info":
xlog.Level = xlog.InfoLevel
case "warn":
xlog.Level = xlog.WarnLevel
case "error":
xlog.Level = xlog.ErrorLevel
}
}
32 changes: 15 additions & 17 deletions app/cfg/config.yaml → app/conf/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -42,33 +42,31 @@ pay_platform:
wechat:
appid: "wx1234567890"
mch_id: ""
api_key: ""
serial_no: ""
api_v3_key: ""
cert_file_content: ""
key_file_content: ""
pkcs12_file_content: ""
alipay: # 以下配置文件为新沙箱环境配置
appid: "2021000122672388"
private_key: "MIIEpQIBAAKCAQEAw0x6QX0eeW+XRNh4u/BG1RsyuYYsHmqenk4GrPV8ElrUEN6nLRwSXGSIIuIuyCo0t4swCNp9Q54g+AUmpAddeBCYhHKrAYG4n11MnXUYosEe43wzUhd7PaXpxctFlSKhFgYBiX7cQg/O8ThHJJ0H0Qy+k9NNJ2gMnfPypk9/43DstHmKEVQvgQpcgnhlbK8X4thIK4zW0xwHgDhSAeZu9QLvf/cc2PdKmd5xiUUM7J7PtwT7VvbKI27fYOBe1hxxrvpY6vcGGGal8xhNOKD+eiqXAgPgIRYuXqLpPgaYOImjnnH9lIpzjrCO0nsba1T4tonDjp5jv0FaSKwOTAjO6QIDAQABAoIBAQCjxUUcF7zvXml+XPzZtQLg/97IfsAOfaAn5gxpC66QgcQlpWCRTmIDQnZ6sitCxUnRxJFySy4R/s9szHz7vgVegqQzJSlLqSlV0lpGDAStrr6lSuiKZZB+QNxJdk0SY6irnDu7vjsb1r/VvjjCdkAwyLwjoGSpr/Isnn4TgsUexoBJOVBRvfsVmzNq0oaD12jEHPLnOgyBOUxN54A64mz7H7VBnYhG2TOL2ECqiQ/bAD3hy4KGoU1y3uT5gcC1pOXTE1XP4d1LDt434G4nPUIMxkMLhotecviWsbJ4FocRcPXs8qVptgarj5h9IMrjyLXDm17hfUqTtImhMEDqE/JFAoGBAP5RWI9qhIzEAWxualhAc2IssQ8MPFGkXFWB4NWYmXVMxodVonyQp9P4AFdL3wsiVhvSmccxqCy5R6Mbv81rFnb29meL08eqAy3HAW/br3jcnbN/W799OGaMXBi+DDES1xBmQndFVGFfm09xcndyTrmGiMgHW1kGgz6WFEHuRXI/AoGBAMSXMMqHEZxD9T4tahFV4xlUP67mLDrETQNOT0vX4NrLS4CXZMkt+IVqy3Z0TRapyIrkBpEUoH3ScGzzbIOdLz57SS7D+ZbsU5kCTDXKfPVxww4RjZ92xNJiEHBMzta9Ku5+D3mBznBFm9dMO8+E+0PSKMxm8n4AovQ9SU/hGyTXAoGBALrU4+yoYixPqoQQMcwXvSx4jLLzWDTaPIMM4THJ46MK/iZaQP6l/sV4Qjffo0I4vW2/L/3oexYwH3KyZhvw+hX3pFm5naHnQmKU+ndEuwpdePVvMOXihla/8sCyjZ5Xqut/VIDuy+ilJiIcw+0Aatlc/ouE7BTg9fY6pzMwapBdAoGBAIkMvb7zGpvN5JJMJr2fGor16M+NNxhg8S900GMXRHJDd4dWA7UcjzyzjtQtj/BUvLHW9Zz+vEP7CNVrfiLi2aS9Xe90P/OvHTh2GZsGZsbVYB3WrtyUd/IS21LuuOOLTPqmdzNGAxzR6irVwnyRQHmvcTHOMw8UcoXCk/FUBRBRAoGAYx52azbgbw1dDoxgGWHWS31zpYdGdg2pxPkr1TInrKFbrQEwnNTqcnPIHqytkvrc9gpqW4XU0Ux7pU/twPO9JXHfXDNWXmJUHyYIeLwbeHrhJ+avtPDs8VwsI8zbBu84D13NJq7dWxPLEUYQNrCrAw4+ywvXmBzXkvEdLaQq1S4="
private_key: "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC3DCgphWsp4OyB5pxF7ImUHHC7luATNfACFiK9qCvMRX1Ot0j4Ll64HUwVWaTfYbS00QyWPZLxwmGIAvh0y+9odu699oAb047p1XG1Q5eQa4qYrlxKGDeGUdWjK0C8qqeVHMAa8FK3xGukPYNersUbQ5E/eQqD7o6m51xR8AzhZ1lwWdW6PPAN51sH9o/MSvGZTmYAOWsErhSKZ0Eb613oG/rfxrvuBH3tFAqHva/cjNPznukieWCHrD5OUXlM48MEK2Ht8rFXs2HG6ZDdMNUMJuz15H5HQ3Plt1KYLy6b6Y6a7NtE1VWGvlmhT1Quzeudkb4lyYMC7DBCE4cZtMBlAgMBAAECggEAAfjNjfTz/JWBtryHPnGX4dKUnFC5xTs1hLA8W5KuNhshiHGNBa9qMc2O/kPi9M0Wp0QBQLUVGimf51kw2AFCaPuvArjfFG2pAnfcK7m4rkOaUJ7AO8QbBQVoqcNThTTJbV/L6f5gxb4F8tT+z0xOr0aBEA/7vwQY4U9ovTE60krIDbd3hE2Eh8RdrKebLrUvvGZ2LPFF3suuGbHHhQwRIzF8Enfa5TjyEJxGz3C3cdCEDjhA/tbMh05egeDhu1qu+Nx1FXzcyc/bFTKF2qPXeE27rclw8U07wggiegHPntJJ9Fgso918f0n8URlzhwpRQ5EjbBNOiVjkKGxQD0rLGQKBgQDl81Jk1iw2WWMuBxZKtxy43sXKjWY8umhrhK0gDjfRXokppCf91+tC3t/7BEc+X8HuAEYCuPs+tnv0XYdhfOeBpy/GHB7NQqYqCiu3Ptm3KnIm/q+CnnPA1HY7222Sa/9NptbfOfrPIlINnglAwjpZ2tn5h0uNvZfMP4Yh+x6aTwKBgQDLyKADd6Iw5jshwVF2SIlv/qHH5w8UKFmkLDT5l6RAqIg0mqY5tPpOEm5JohfYRmp9+ny4U8+V0CNNehN7FLreLJm5ksDvcOuIlEXPCzuEzyO8tkHFuW1pXLcdNnzZmdQ3S8o0mDllegEbwV0OK10RcJ96NRJnngNYp7rohrUxCwKBgHAvHmJtjpJRV66r7Hc1EIEsxehExb0Y4DqcNu4toZO2gEpdeNlBztgH7dQDyVIn22/mmEFZx9FXq++S9apdCoDZdNg8/dX8Dx7xaVR0CDlxLtHRbQTXkvdfb/NR4QoPQDW9EJVFLxSA1PEpya/bUiZmO/OdywFynq0ZzLGlVs/HAoGBALyLV2Fd4vaTTcqhbpmd62tvkIfARLdFzgqTzD/SCeq5A6yIGZvy0lRBwUDndGBqZkVA6PwyrzHRbZhVhoiuWWcOpPyJx3DCbWnkpeI2Zk8ux8Xma1xhf9WoLtQcgc9jAHJY8TFQVmqJQ1VGxq5BeM6WATe0ut6b2ETCi7BwUlyZAoGAV4kL7eiV2rcHa8IROWh8oo+8fgPMb5MSmbU78n/o4tXRTdUmg/6ghE1t9dWK867/PEubVFEvO8F15oQvwLHYdD+SPeLmp/CLf20jzNSjkImFxMG7xmnpre5+sfgIGjioI1rFkwrVk7II7GfvmGpDTbOSLWeiymdFsmmPnjs8I5Q="
app_public_cert_content: |
-----BEGIN CERTIFICATE-----
MIIDmTCCAoGgAwIBAgIQICMGCXK2Am4QGbc/5Yi2QjANBgkqhkiG9w0BAQsFADCBkTELMAkGA1UE
MIIDmTCCAoGgAwIBAgIQICQJJiIfTmxJDlWhVlLYPjANBgkqhkiG9w0BAQsFADCBkTELMAkGA1UE
BhMCQ04xGzAZBgNVBAoMEkFudCBGaW5hbmNpYWwgdGVzdDElMCMGA1UECwwcQ2VydGlmaWNhdGlv
biBBdXRob3JpdHkgdGVzdDE+MDwGA1UEAww1QW50IEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1
dGhvcml0eSBDbGFzcyAyIFIxIHRlc3QwHhcNMjMwNjA5MTI1MjAyWhcNMjQwNjEzMTI1MjAyWjBr
dGhvcml0eSBDbGFzcyAyIFIxIHRlc3QwHhcNMjQwOTI2MTU0ODExWhcNMjUxMDAxMTU0ODExWjBr
MQswCQYDVQQGEwJDTjEfMB0GA1UECgwWbGFnbWlzNjI1NEBzYW5kYm94LmNvbTEPMA0GA1UECwwG
QWxpcGF5MSowKAYDVQQDDCEyMDg4NzIxMDAzMjM2NDQyLTIwMjEwMDAxMjI2NzIzODgwggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDTHpBfR55b5dE2Hi78EbVGzK5hiweap6eTgas9XwS
WtQQ3qctHBJcZIgi4i7IKjS3izAI2n1DniD4BSakB114EJiEcqsBgbifXUyddRiiwR7jfDNSF3s9
penFy0WVIqEWBgGJftxCD87xOEcknQfRDL6T000naAyd8/KmT3/jcOy0eYoRVC+BClyCeGVsrxfi
2EgrjNbTHAeAOFIB5m71Au9/9xzY90qZ3nGJRQzsns+3BPtW9sojbt9g4F7WHHGu+ljq9wYYZqXz
GE04oP56KpcCA+AhFi5eouk+Bpg4iaOecf2UinOOsI7SextrVPi2icOOnmO/QVpIrA5MCM7pAgMB
AAGjEjAQMA4GA1UdDwEB/wQEAwIE8DANBgkqhkiG9w0BAQsFAAOCAQEAZc2RyiGKftnKi/0zIUUl
xKDPyUdVBBYDagcraHROKXafsZEnhO/cdBPC3VAJEiygNvddB51l088cGb8pGS2VqTQqR/Ehmd1x
kLMleWlUocX0Mwctz/J6jNp9/JKcVe1jk492HR7Csqjf+hvsajIVliIWzuhzB7C0eNEb46Js/G8T
QmsX92eHI0r2pcmsVr+PmDioLu4H4miKrDRhXNXLQ2AQfxPOCOtxt0tSNrB97bDNSwB1O4OItmr/
Cimb7l1nqxY3BOY5o8iAWLv4wG4giYu9LSrEJW0nWa2JG059kMlWLSVe7Afx0GzMVQUP6NJNdulP
ddebveu2CNZcJ7ipbA==
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3DCgphWsp4OyB5pxF7ImUHHC7luATNfACFiK9qCvM
RX1Ot0j4Ll64HUwVWaTfYbS00QyWPZLxwmGIAvh0y+9odu699oAb047p1XG1Q5eQa4qYrlxKGDeG
UdWjK0C8qqeVHMAa8FK3xGukPYNersUbQ5E/eQqD7o6m51xR8AzhZ1lwWdW6PPAN51sH9o/MSvGZ
TmYAOWsErhSKZ0Eb613oG/rfxrvuBH3tFAqHva/cjNPznukieWCHrD5OUXlM48MEK2Ht8rFXs2HG
6ZDdMNUMJuz15H5HQ3Plt1KYLy6b6Y6a7NtE1VWGvlmhT1Quzeudkb4lyYMC7DBCE4cZtMBlAgMB
AAGjEjAQMA4GA1UdDwEB/wQEAwIE8DANBgkqhkiG9w0BAQsFAAOCAQEAeMqluNI07JunRvkeOdN3
u4l1EicBtaMA63h6Ico92YanIgAzvZY9etwBiCP9ULmqckw+jo6+taXERe3fXSoUqyCH+3Hnb30f
MHp+oHlmpxCG93GLYBe9QcugrbEKg7RJ1l8ikyXMt3nkxBcQochCuNxdhGGYM4rxlGtwU1j0v+CV
Ne4IsK8fbpMF8wfYGOwDb+P1Mqx2Hv1D0qLu4S2ztz+br8Opg5leGY8wMt9+mW5aKwEKX3FVDi5J
ijiKYWzTm718zrmMJ+sN2VrapDvtj92bibOt0PKXUtQ5I++RtjG//dRpjAg9aS5pjvui80tNtwAc
xaEqw58KZ41dIaw3Zw==
-----END CERTIFICATE-----
alipay_root_cert_content: |
-----BEGIN CERTIFICATE-----
Expand Down
8 changes: 4 additions & 4 deletions app/dao/dao.go
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
package dao

import (
"gopay/app/cfg"
"gopay/app/conf"

"github.com/go-pay/gopher/orm"
"github.com/go-pay/orm"
"github.com/redis/go-redis/v9"
"gorm.io/gorm"
)

type Dao struct {
cfg *cfg.Config
cfg *conf.Config
GopayDB *gorm.DB
GopayRds *redis.Client
}

func New(c *cfg.Config) (d *Dao) {
func New(c *conf.Config) (d *Dao) {
db := orm.InitGorm(c.MySQL.Gopay)
//rds := orm.InitRedis(c.Redis.Gopay)

Expand Down
9 changes: 4 additions & 5 deletions app/dao/dao_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,8 @@ import (
"os"
"testing"

"gopay/app/cfg"

"github.com/go-pay/gopher/conf"
"gopay/app/conf"
"gopay/pkg/config"
)

var (
Expand All @@ -19,9 +18,9 @@ var (
func TestMain(m *testing.M) {
os.Setenv("RUNTIME_ENV", "local")
flag.Set("conf", "../cfg/config.yaml")
if err := conf.ParseYaml(cfg.Conf); err != nil {
if err := config.ParseYaml(conf.Conf); err != nil {
panic(err)
}
d = New(cfg.Conf)
d = New(conf.Conf)
os.Exit(m.Run())
}
4 changes: 2 additions & 2 deletions app/router/payment.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import (
"gopay/ecode"

"github.com/gin-gonic/gin"
"github.com/go-pay/gopher/web"
"github.com/go-pay/gopher/xlog"
"github.com/go-pay/web"
"github.com/go-pay/xlog"
)

func alipayGetPaymentQrcode(c *gin.Context) {
Expand Down
23 changes: 6 additions & 17 deletions app/router/router.go
Original file line number Diff line number Diff line change
@@ -1,39 +1,28 @@
package router

import (
"net/http/pprof"

"gopay/app/service"

"github.com/gin-gonic/gin"
"github.com/go-pay/gopher/ecode"
"github.com/go-pay/gopher/web"
"github.com/go-pay/ecode"
"github.com/go-pay/web"
"github.com/go-pay/web/middleware"
)

var svc *service.Service

func StartHttpServer(s *service.Service) (g *web.GinEngine) {
func NewHttpServer(s *service.Service) (g *web.GinEngine) {
svc = s
g = web.InitGin(s.Cfg.Http)
g.Gin.TrustedPlatform = "x_forwarded_for"
g.Gin.Use(g.CORS())
g.Gin.Use(middleware.CORS())

ecode.Success = ecode.NewV2(0, "SUCCESS", "成功")
ecode.Success = ecode.New(0, "SUCCESS", "success")
initRoute(g.Gin)
g.Start()
return g
}

func initRoute(g *gin.Engine) {
pp := g.Group("/debug/pprof")
{
pp.GET("/index", func(c *gin.Context) { pprof.Index(c.Writer, c.Request) })
pp.GET("/cmdline", func(c *gin.Context) { pprof.Cmdline(c.Writer, c.Request) })
pp.GET("/profile", func(c *gin.Context) { pprof.Profile(c.Writer, c.Request) })
pp.GET("/symbol", func(c *gin.Context) { pprof.Symbol(c.Writer, c.Request) })
pp.GET("/trace", func(c *gin.Context) { pprof.Trace(c.Writer, c.Request) })
}

monitor := g.Group("/gopay/v1/monitor")
{
monitor.GET("/ping", func(c *gin.Context) { web.JSON(c, "PingOK: "+c.ClientIP(), nil) })
Expand Down
2 changes: 1 addition & 1 deletion app/service/payment.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (

"github.com/go-pay/gopay"
"github.com/go-pay/gopay/alipay"
"github.com/go-pay/gopher/xlog"
"github.com/go-pay/xlog"
"github.com/google/uuid"
"github.com/shopspring/decimal"
)
Expand Down
22 changes: 16 additions & 6 deletions app/service/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,24 @@ package service

import (
"context"
"github.com/go-pay/gopay"
"github.com/go-pay/gopay/alipay/cert"
"sync"

"gopay/app/cfg"
"gopay/app/conf"
"gopay/app/dao"

"github.com/go-pay/gopay"
"github.com/go-pay/gopay/alipay"
"github.com/go-pay/gopher/smap"
"github.com/go-pay/gopay/alipay/cert"
"github.com/go-pay/gopay/wechat/v3"
"github.com/go-pay/smap"
)

type Service struct {
rwMu sync.RWMutex
Cfg *cfg.Config
Cfg *conf.Config
dao *dao.Dao
alipay *alipay.Client
wxpay *wechat.ClientV3

// cache
kvMap smap.Map[string, string] // key: k, value: v
Expand All @@ -28,7 +30,8 @@ var (
ctx = context.Background()
)

func New(c *cfg.Config) (s *Service) {
func New(c *conf.Config) (s *Service) {
// 初始化支付宝 client
alipayCli, err := alipay.NewClient(c.PayPlatform.Alipay.Appid, c.PayPlatform.Alipay.PrivateKey, false)
if err != nil {
panic(err)
Expand All @@ -52,10 +55,17 @@ func New(c *cfg.Config) (s *Service) {
panic(err)
}

// 初始化微信v3 client
//wxCli, err := wechat.NewClientV3(c.PayPlatform.Wechat.MchId, c.PayPlatform.Wechat.SerialNo, c.PayPlatform.Wechat.ApiV3Key, c.PayPlatform.Wechat.KeyFileContent)
//if err != nil {
// panic(err)
//}

srv = &Service{
Cfg: c,
dao: dao.New(c),
alipay: alipayCli,
//wxpay: wxCli,
}

// loop job
Expand Down
4 changes: 2 additions & 2 deletions ecode/ecode.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package ecode

import "github.com/go-pay/gopher/ecode"
import "github.com/go-pay/ecode"

const (
StatusCodeNotOK = "STATUS_CODE_NOT_200"
RspCodeNotOK = "RESPONSE_CODE_NOT_SUCCESS"
)

var (
New = ecode.NewV2
New = ecode.New

// service error
RequestErr = New(10400, "PARAM_ERROR", "parameter error")
Expand Down
Loading

0 comments on commit 6c71023

Please sign in to comment.