diff --git a/app/mix/conf/cfg.go b/app/mix/conf/cfg.go index 9a97c729..eb67cccd 100644 --- a/app/mix/conf/cfg.go +++ b/app/mix/conf/cfg.go @@ -8,6 +8,7 @@ type ConfigSt struct { MixMysql *configcenter.MysqlConfig `json:"mix_mysql" yaml:"mix_mysql"` // mix mysql Crypto *configcenter.CryptoConfig `json:"crypto" yaml:"crypto"` // 账号相关加密 Wxpay *configcenter.WxpayClientConfig `json:"wxpay" yaml:"wxpay"` // 微信支付 + WxpayTFZ *configcenter.WxpayClientConfig `json:"wxpay_tfz" yaml:"wxpay_tfz"` // 微信支付 Alipay *configcenter.AlipayClientConfig `json:"alipay" yaml:"alipay"` // 支付宝 心意到了 AlipayMYTS *configcenter.AlipayClientConfig `json:"alipay_myts" yaml:"alipay_myts"` // 支付宝 觅缘天使 Apollo *configcenter.ApolloConfig `json:"apollo" yaml:"apollo"` // Apollo diff --git a/app/mix/service/service.go b/app/mix/service/service.go index 12c34b18..64ca3627 100644 --- a/app/mix/service/service.go +++ b/app/mix/service/service.go @@ -159,7 +159,7 @@ func (s *Service) Init(c any) (err error) { return } - err = wxpaycli.Init(cfg.Wxpay) + err = wxpaycli.InitMulti(cfg.Wxpay, cfg.WxpayTFZ) if err != nil { logger.Error("wxpaycli.Init fail, cfg: %v, err: %v", util.ToJson(cfg.Wxpay), err) return diff --git a/dbstruct/vas.sql b/dbstruct/vas.sql index a7f5d9d1..2a0aad65 100644 --- a/dbstruct/vas.sql +++ b/dbstruct/vas.sql @@ -68,6 +68,7 @@ CREATE INDEX ix_orderid ON vas_ch_charge (order_id); CREATE INDEX mid_ct ON vas_ch_income (mid, ct); CREATE INDEX uid_ct ON vas_ch_income (uid, ct); CREATE INDEX ix_orderid ON vas_ch_income (order_id); +CREATE INDEX ix_ct ON vas_ch_income (ct); CREATE INDEX mid_ct ON vas_ch_withdraw (mid, ct); CREATE INDEX uid_ct ON vas_ch_withdraw (uid, ct); CREATE INDEX ix_orderid ON vas_ch_withdraw (order_id); diff --git a/etc/mix/mix-prod.yaml b/etc/mix/mix-prod.yaml index 5274965b..9430d499 100644 --- a/etc/mix/mix-prod.yaml +++ b/etc/mix/mix-prod.yaml @@ -63,6 +63,15 @@ wxpay: notify_url: "https://api.tiefen.fun/ext/vas/wxpay_callback" app_secret: "ebc325109b91087e22f046bc8ac5c940" +wxpay_tfz: + mchid: "1675813721" + appid: "wxc28fd8aaf31984b6" + serial_no: "176903F43E78B0BA5AA1F08A3BE852A5F637DC77" + apiv3_key: "5QwY1XMK1HW3JQwGKbA3mfJ5cdsTQGjR" + private_key_path: "/app/wishpal-ironfan/etc/mix/wxpaycert_tfz/apiclient_key.pem" + notify_url: "https://api.tiefen.fun/ext/vas/wxpay_callback" + app_secret: "ebc325109b91087e22f046bc8ac5c940" + apollo: app_id: "wishpal_live_service" cluster: "dev" diff --git a/etc/mix/mix-test.yaml b/etc/mix/mix-test.yaml index 8c644edf..9e6c47ed 100644 --- a/etc/mix/mix-test.yaml +++ b/etc/mix/mix-test.yaml @@ -36,6 +36,16 @@ wxpay: notify_url: "https://api.wishpal.cn/ext/vas/wxpay_callback" app_secret: "ebc325109b91087e22f046bc8ac5c940" +wxpay_tfz: + mchid: "1675813721" + appid: "wxc28fd8aaf31984b6" + serial_no: "176903F43E78B0BA5AA1F08A3BE852A5F637DC77" + apiv3_key: "5QwY1XMK1HW3JQwGKbA3mfJ5cdsTQGjR" + private_key_path: "/app/wishpal-ironfan/etc/mix/wxpaycert_tfz/apiclient_key.pem" + notify_url: "https://api.wishpal.cn/ext/vas/wxpay_callback" + app_secret: "ebc325109b91087e22f046bc8ac5c940" + apiv2_key: "mot5410nh69k87e22f046bc8anv5xds8" + crypto: aes: private_key: "Xbz1145141919810" diff --git a/etc/mix/wxpaycert_tfz/apiclient_cert.p12 b/etc/mix/wxpaycert_tfz/apiclient_cert.p12 new file mode 100644 index 00000000..c786c511 Binary files /dev/null and b/etc/mix/wxpaycert_tfz/apiclient_cert.p12 differ diff --git a/etc/mix/wxpaycert_tfz/apiclient_cert.pem b/etc/mix/wxpaycert_tfz/apiclient_cert.pem new file mode 100644 index 00000000..a773b4e6 --- /dev/null +++ b/etc/mix/wxpaycert_tfz/apiclient_cert.pem @@ -0,0 +1,25 @@ +-----BEGIN CERTIFICATE----- +MIIEKDCCAxCgAwIBAgIUF2kD9D54sLpaofCKO+hSpfY33HcwDQYJKoZIhvcNAQEL +BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT +FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg +Q0EwHhcNMjQwNTAyMTc1NzA2WhcNMjkwNTAxMTc1NzA2WjCBgTETMBEGA1UEAwwK +MTY3NTgxMzcyMTEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMS0wKwYDVQQL +DCTmiJDpg73lv4PmhI/liLDkuobnp5HmioDmnInpmZDlhazlj7gxCzAJBgNVBAYT +AkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAOaDpU37roG4zQOok/00vHtgPQdVEy/SgxqdakEEygVFXTiCh/PSmynV +wtAiULYkDor+KdPMAqmTO/wVxlkxVWhh0tq3Wr49MWqmSGAdS749H0CKv/TxrL+y +Bmw5OuKolGV7xYne9wJC28M0wJOJH4XFwUSJnQqOec956KdwnSWuZ/X8uI0d8Cs1 +It/HRX4tJunEDaPFLCnF4ju6wrr+kAjlZb35laDX7zmDg25/yhpxpmgeAeJgSH7K +EJSCYlUWOpspMb4porEG5NIUxu1TfLXO4kkx3j7Diz8szdzZrTGdLcc4FjKNTdIL +jaJxmH8eyYC2Zu2jyuF5F3vSTtACszsCAwEAAaOBuTCBtjAJBgNVHRMEAjAAMAsG +A1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGEaHR0cDovL2V2Y2Eu +aXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJDMDRC +MDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFCNjU0MjJFMTJCMjdB +OUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEBCwUAA4IBAQB8Ze+8 +G5dKUUuAaGlwBQNxwf1YPeZ7LU3lh0OKc+09cQ3yNDJXdYKdgrCI0L2dkZMnk0xo +/gf0lxFfXiRfR5jYCYr3MRU7ooayqXEPpvwoRmTboiE9hVrpPifGeETsKJwQkvE3 +W1kpBYckkNtUBucL6c7W66q7kFtz+8wVP7gPgJ7UFjk8x3r4Zao+A3opPRTBVgls +fxmmCu1Ud3Pf/zHKd1FCBDZepJ2ObOIUYW/0Wc+p2VbqansG1DirQ5jkmaf33mEN +51kDz5Hw07XGz04ZVPAWkpLtjAQFF4bSVfYxTYvhOllTidZXtt2IJNGT/MQyKp98 +ufapZz95Zc/bxQ7U +-----END CERTIFICATE----- diff --git a/etc/mix/wxpaycert_tfz/apiclient_key.pem b/etc/mix/wxpaycert_tfz/apiclient_key.pem new file mode 100644 index 00000000..757be54b --- /dev/null +++ b/etc/mix/wxpaycert_tfz/apiclient_key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDmg6VN+66BuM0D +qJP9NLx7YD0HVRMv0oManWpBBMoFRV04gofz0psp1cLQIlC2JA6K/inTzAKpkzv8 +FcZZMVVoYdLat1q+PTFqpkhgHUu+PR9Air/08ay/sgZsOTriqJRle8WJ3vcCQtvD +NMCTiR+FxcFEiZ0KjnnPeeincJ0lrmf1/LiNHfArNSLfx0V+LSbpxA2jxSwpxeI7 +usK6/pAI5WW9+ZWg1+85g4Nuf8oacaZoHgHiYEh+yhCUgmJVFjqbKTG+KaKxBuTS +FMbtU3y1zuJJMd4+w4s/LM3c2a0xnS3HOBYyjU3SC42icZh/HsmAtmbto8rheRd7 +0k7QArM7AgMBAAECggEAYQEHQFDod8iH5cE8PbLCmny+UeaYQ2ioKTwTKbdVOHCf +MRelFJMNHsbIy4OVSYDU6eLZQTq56BiAhq23IXOkSF/aNpYwRpxDvmipTmElrbHV +A/kfnHlTQ/wrvcE7qYRdpnM2hrVgZwAxsOzzGWL78/RrR2dNwdKBKjFYGZZHW0JE +HB3H6KZsqPssM9COYy4JrzWOgx/dGxihMSeWbGFgjXXo7LN7bWPzS6/6nBcVrmQU +JNjQ2Y4MIc56pjfoXwWHLUfftNL75uLr+yBVsL3qOLVTpLgIQQZyPSfj0Xg3rG7h +hzab5gLF+TREAFYsHPR1vyDJjzGjimrHjvCWysMxaQKBgQD26GvU2tz5HNMpGeUZ +A0DJmnKxY40sPltZES/l3mTiJzmig6kT+UGxeg3tPkU3Z/zCUFdoXWT1nNA185eD +fFgEka3mxg1g5Iw9PmefqeHbCMs94ICKdxsnJn1PFMhIPqhms9wcjoKJGgKUj3ov +a243HS/yh4gl6EnvMMeBTZMpZQKBgQDvAK7X9ZXb91+F/lBHrhynJjQmsbiDQcqk +synIImWPHJ6M1h2/vJbplmaOQFPOBqQiMWepb3TtKtGcSAYXIsyUFD1OECLb/+Vn +We/P6kVyki7UgDLkQERhNDmsdP1qzzt0UmncUjYUk2eFlfobgwSP3iZ+8aFZ10XF +BSwJTbrwHwKBgD2kpVdNFSI0qht21ZW7FC/BGaVj/1jucIv6GIVBUtqLhH4odMwB +zP7sRBHZHBrLIXW57TinKI+RiQIPQOKY5ritTkdxZuGr7b9UlzZriXHP7j4SkMUB +G4xYtaxKuf4fdpe9i9StV7W3ArHoaE7yeV/VL6VTZRBhwCOxf/2uSnFpAoGAV8S1 +cKNEREIkty08SAZ9iThzYF5VdwY7J56P0monR5Xn96pNxHK6LM/Jm6Wt4PP5ZIEm +I0fF9a6KyUx9yBNEc4C3PqqYUpg3o2uYsI7EsB1Uyz7E8aNUOSoXn+hag9XUbJQz +QfCC4a18D8eS0HWdwEOBeY68hSST/5U1pbkA1FsCgYBQZX6MqUEybdjPnxeJn/RN +c3wG97sGG87A6Xo2i42koX1w87LT/f9qJrR/sU6kHw/39E/vx2xkMIs6u7I9lO+d +WsBYbtcp4ZDAI1+NwcDtkd6Q1Kbpti2MxkuC6r+1kteE80DEB4lryJ6r4HAry3k8 +uCJCasc77UvJcfVnZX5QkA== +-----END PRIVATE KEY----- diff --git a/library/payclients/wxpaycli/client.go b/library/payclients/wxpaycli/client.go index 5608b49e..9567722b 100644 --- a/library/payclients/wxpaycli/client.go +++ b/library/payclients/wxpaycli/client.go @@ -30,21 +30,43 @@ const ( DefaultOrderTimeoutSeconds = 900 // 默认订单超时时间,单位: s ) -var defaultWxpayClient *WxpayClient +const ( + AppIdXinYiDaoLe = "1665016206" + AppIdTieFenZone = "1675813721" +) + +var allWxpayClients = map[string]*WxpayClient{} + +func GetDefaultWxpayClient() *WxpayClient { + return allWxpayClients[AppIdTieFenZone] +} type WxpayClient struct { clientV3 *wxpayv3.ClientV3 + MchId string `json:"mch_id"` AppSecret string `json:"app_secret"` AppId string `json:"app_id"` NotifyUrl string `json:"notify_url"` PrivateKeyPath string `json:"private_key_path"` } -func GetDefaultWxpayClient() *WxpayClient { - return defaultWxpayClient +func InitMulti(cfgList ...*configcenter.WxpayClientConfig) (err error) { + for _, cfg := range cfgList { + var cli *WxpayClient + cli, err = NewWxpayClient(cfg) + if err != nil { + return + } + if cli == nil { + err = errors.New("NewAlipayClient fail") + return + } + allWxpayClients[cli.MchId] = cli + } + return } -func Init(cfg *configcenter.WxpayClientConfig) (err error) { +func NewWxpayClient(cfg *configcenter.WxpayClientConfig) (ret *WxpayClient, err error) { // private key bs, err := os.ReadFile(cfg.PrivateKeyPath) if err != nil { @@ -59,8 +81,9 @@ func Init(cfg *configcenter.WxpayClientConfig) (err error) { return } - defaultWxpayClient = &WxpayClient{ + ret = &WxpayClient{ clientV3: wxpayCliV3, + MchId: cfg.MchId, AppSecret: cfg.AppSecret, AppId: cfg.AppId, NotifyUrl: cfg.NotifyUrl, diff --git a/library/payclients/wxpaycli/client_test.go b/library/payclients/wxpaycli/client_test.go index cb750834..f0a9ef99 100644 --- a/library/payclients/wxpaycli/client_test.go +++ b/library/payclients/wxpaycli/client_test.go @@ -20,7 +20,7 @@ func TestMain(m *testing.M) { fmt.Printf("%v\n", err) } - err = Init(cfg.Wxpay) + err = InitMulti(cfg.Wxpay) if err != nil { fmt.Println(err) os.Exit(1)