diff --git a/.gitignore b/.gitignore index a2eb5f7..4e7f2ab 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ Thumbs.db .idea/ # project -pkg/ \ No newline at end of file +pkg/ +cert/ \ No newline at end of file diff --git a/cmd/alipay_redpack.go b/cmd/alipay_redpack.go new file mode 100644 index 0000000..8ad8bee --- /dev/null +++ b/cmd/alipay_redpack.go @@ -0,0 +1,57 @@ +package main + +import ( + "context" + "encoding/json" + "gitea.cdlsxd.cn/sdk/plugin/instance" + "gitea.cdlsxd.cn/sdk/plugin/manage" + "gitea.cdlsxd.cn/sdk/plugin/proto" + "log" +) + +var alpayRedConf = &manage.Config{ + Cmd: "pkg/mac/alipay_redpack.so", + Tag: "alipay_redpack", + Version: 1, + CookieKey: "alipay_redpack", + CookieValue: "alipay_redpack", +} + +func getAlpayRedConf() []byte { + type Config struct { + AppId string `json:"app_id"` + Prk string `json:"prk"` // 私钥 + } + c := &Config{ + AppId: "2021004100663111", + Prk: "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDbA+YuMp4JUVj6rjzgwGKNXWkEMGX/rinqkfyBZ6B6p8EKz8zgA+ypiJLOixD3GyKnUnAzx4waNRZHfdEu+l57kJFtd/ipfwtJ28aTi7TqtqEpqD+UPY4ourt2CuyCFxWsonS6dczqtTvfAVArTdbGJYY+kNNVR3WiXgGUhkUu8N7vEowU00RUQGNdSVMUs4FX+HlU3RnEoRc/xUhPiaLf0Bm/g9wG96kwyg/TZvkNU7PpMVRdXeLrVORn0qThs3VA4dqondF+O12iC1TK4TKYGzFYczGAUsfuurtDyCc2GMoE+hH2FR8U7amQOVuYZFkutTdqaqukWpFQOr8wLeMzAgMBAAECggEAD715/3v3y6ejA3EeQvDQpGRANeLckcGMlaUkRpCSAf6oawSALuFZUt3T3zAzae7zUJ8mHTKMKR4DmeO68utfevXq3bkvj87nmslGvjfeKrgxYPMMjrTV0KuK6XLjiH3sOtn6FaR9s6iOwvovLs2LT/ZGbZyu84QNOjwTVP9JXZQkBgMItdKf+U3H2Cjp7U/qXBt8/9yzVFklp1g1883DAty0lzmT27dJimGVGaPQ8vNxo81+ZUEJAn6GUTk0K/GwJfhPTU8hh8G90n2LTyskoMjGxQe9lXfCcS9DmWawEQL4WTctPrDYlnS/cjCVMS0KXIFuxRNf6qaMYDeywC8BgQKBgQDyf40dvmw34Rrb46+NLayQ9W5CJI/dYeRajpCjoOomq5QYhbXzUCpVfbtByeGMsg3zN58NNsZGhl5SU0GdEdoOlxCk+2Hey2yQYF4ugQm/dTd68Jgqi3yujigAbNYa1ZhL9t3FqouPY1dGiaxl+DFYdSMIrsVFXh2NbrPyqTk5IQKBgQDnNaH7LCcIUqg9H8Tsls+8GLzP2HwF3hdll8asEsF3K3HX6/Zlp4VnnEcIkAxLRL/L0o5akXrmA18ZwfoSguTPXV9va3G2GgIiJHgcytmGtQVvbpFKuPnCXKz+avxnfO0flJqyYEuHr/40jsGbMkk0Kr52/n3ivXZbBUlT+tkt0wKBgB0qLgSnxEgsMJjFl3V5SsncWrhlwU+02Evz3X1wevjPpe4VFr7+ozjI+F5/MztCpt7bj6t9LPeKbYmlLb0ASqN6k6vj9+9ds97hWDJrnoqCRHvqt8JWKFauDi2O6WksyzZHqIB/dG14WyTGpg9VfEnRPLdsnZksKo26BLZol9NBAoGBAMz7oMNljqlzVtLyMo2q2zuhFuySusoc79NTL4FpE3rK2qCbA5V2YvDL/bIau7uTlRNodmrXZgU84fidIE9/Gsq5tp26vVK8Vj3c5Vxpf1dNcCct+MQtoMjvjzP0uBgsCrKf9lLEytHed1ozYnRsrbgBWWF4GTWH0cG6uxsoX5mfAoGAfYXKZdyRU+Su4y4EnDLMXd320ar7PaeuY8aZU7V6UQEsaOj6H3O8JMEOuBrOVEhAP2EkAC8ayargSXTSOkN97pg88agKDwA6jh4N6TKAK8XMft81YPPliVwZMsAUqihSKQBnKZ7ssHHLGWWWp5vfkyb7Y7dIkZcPzB0X3q/jL58=", + } + marshal, _ := json.Marshal(c) + return marshal +} + +// main 这只是一个演示 +func main() { + err := manage.Add(alpayRedConf) + if err != nil { + log.Fatalln(err) + } + alipayRedPack() +} + +func alipayRedPack() { + queryRequest := &proto.QueryRequest{ + Config: getAlpayRedConf(), + Order: &proto.QueryRequest_Order{ + OrderNo: "lsxd202306071545141532", + TradeNo: "20230607110070000006320086925897", + Account: "", + Extra: []byte(``), + }, + } + resQuery, err := instance.Query(context.Background(), alpayRedConf.Tag, queryRequest) + if err != nil { + log.Fatalln(err) + } + log.Printf("Query res:%+v", resQuery) +} diff --git a/cmd/main.go b/cmd/zltx.go similarity index 96% rename from cmd/main.go rename to cmd/zltx.go index 0d4db5d..e3670ec 100644 --- a/cmd/main.go +++ b/cmd/zltx.go @@ -10,7 +10,7 @@ import ( ) var zltxConf = &manage.Config{ - Cmd: "pkg/zltx.so", + Cmd: "pkg/mac/zltx.so", Tag: "zltx", Version: 1, CookieKey: "zltx", @@ -35,15 +35,11 @@ func config() []byte { } // main 这只是一个演示 -func main() { +func zltx() { err := manage.Add(zltxConf) if err != nil { log.Fatalln(err) } - zltx() -} - -func zltx() { orderRequest := &proto.OrderRequest{ Config: config(), Order: &proto.OrderRequest_Order{ diff --git a/plugins/alipay_redpack/internal/alipay_redpack.go b/plugins/alipay_redpack/internal/alipay_redpack.go index a18a674..9abd5ad 100644 --- a/plugins/alipay_redpack/internal/alipay_redpack.go +++ b/plugins/alipay_redpack/internal/alipay_redpack.go @@ -85,7 +85,7 @@ func (s *AlipayRedPackService) Notify(_ context.Context, request *proto.NotifyRe } n := notifyReq(request) - cert, err := alipay.GetCert(c.MchCertPath, c.RootCertPath, c.PukPath, c.AppId) + cert, err := alipay.GetCert(c.AppId) if err != nil { return nil, err } diff --git a/plugins/alipay_redpack/internal/alipay_redpack_test.go b/plugins/alipay_redpack/internal/alipay_redpack_test.go index 7fe7101..4000405 100644 --- a/plugins/alipay_redpack/internal/alipay_redpack_test.go +++ b/plugins/alipay_redpack/internal/alipay_redpack_test.go @@ -13,11 +13,8 @@ var server = &AlipayRedPackService{} func config() []byte { c := &Config{ - AppId: "2021004100663111", - Prk: "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDbA+YuMp4JUVj6rjzgwGKNXWkEMGX/rinqkfyBZ6B6p8EKz8zgA+ypiJLOixD3GyKnUnAzx4waNRZHfdEu+l57kJFtd/ipfwtJ28aTi7TqtqEpqD+UPY4ourt2CuyCFxWsonS6dczqtTvfAVArTdbGJYY+kNNVR3WiXgGUhkUu8N7vEowU00RUQGNdSVMUs4FX+HlU3RnEoRc/xUhPiaLf0Bm/g9wG96kwyg/TZvkNU7PpMVRdXeLrVORn0qThs3VA4dqondF+O12iC1TK4TKYGzFYczGAUsfuurtDyCc2GMoE+hH2FR8U7amQOVuYZFkutTdqaqukWpFQOr8wLeMzAgMBAAECggEAD715/3v3y6ejA3EeQvDQpGRANeLckcGMlaUkRpCSAf6oawSALuFZUt3T3zAzae7zUJ8mHTKMKR4DmeO68utfevXq3bkvj87nmslGvjfeKrgxYPMMjrTV0KuK6XLjiH3sOtn6FaR9s6iOwvovLs2LT/ZGbZyu84QNOjwTVP9JXZQkBgMItdKf+U3H2Cjp7U/qXBt8/9yzVFklp1g1883DAty0lzmT27dJimGVGaPQ8vNxo81+ZUEJAn6GUTk0K/GwJfhPTU8hh8G90n2LTyskoMjGxQe9lXfCcS9DmWawEQL4WTctPrDYlnS/cjCVMS0KXIFuxRNf6qaMYDeywC8BgQKBgQDyf40dvmw34Rrb46+NLayQ9W5CJI/dYeRajpCjoOomq5QYhbXzUCpVfbtByeGMsg3zN58NNsZGhl5SU0GdEdoOlxCk+2Hey2yQYF4ugQm/dTd68Jgqi3yujigAbNYa1ZhL9t3FqouPY1dGiaxl+DFYdSMIrsVFXh2NbrPyqTk5IQKBgQDnNaH7LCcIUqg9H8Tsls+8GLzP2HwF3hdll8asEsF3K3HX6/Zlp4VnnEcIkAxLRL/L0o5akXrmA18ZwfoSguTPXV9va3G2GgIiJHgcytmGtQVvbpFKuPnCXKz+avxnfO0flJqyYEuHr/40jsGbMkk0Kr52/n3ivXZbBUlT+tkt0wKBgB0qLgSnxEgsMJjFl3V5SsncWrhlwU+02Evz3X1wevjPpe4VFr7+ozjI+F5/MztCpt7bj6t9LPeKbYmlLb0ASqN6k6vj9+9ds97hWDJrnoqCRHvqt8JWKFauDi2O6WksyzZHqIB/dG14WyTGpg9VfEnRPLdsnZksKo26BLZol9NBAoGBAMz7oMNljqlzVtLyMo2q2zuhFuySusoc79NTL4FpE3rK2qCbA5V2YvDL/bIau7uTlRNodmrXZgU84fidIE9/Gsq5tp26vVK8Vj3c5Vxpf1dNcCct+MQtoMjvjzP0uBgsCrKf9lLEytHed1ozYnRsrbgBWWF4GTWH0cG6uxsoX5mfAoGAfYXKZdyRU+Su4y4EnDLMXd320ar7PaeuY8aZU7V6UQEsaOj6H3O8JMEOuBrOVEhAP2EkAC8ayargSXTSOkN97pg88agKDwA6jh4N6TKAK8XMft81YPPliVwZMsAUqihSKQBnKZ7ssHHLGWWWp5vfkyb7Y7dIkZcPzB0X3q/jL58=", - PukPath: "/Users/lsxd/code/php/yxxt/market/config/alipaycash/alipayCertPublicKey_RSA2.crt", - MchCertPath: "/Users/lsxd/code/php/yxxt/market/config/alipaycash/appCertPublicKey_2021004100663111.crt", - RootCertPath: "/Users/lsxd/code/php/yxxt/market/config/alipaycash/alipayRootCert.crt", + AppId: "2021004100663111", + Prk: "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDbA+YuMp4JUVj6rjzgwGKNXWkEMGX/rinqkfyBZ6B6p8EKz8zgA+ypiJLOixD3GyKnUnAzx4waNRZHfdEu+l57kJFtd/ipfwtJ28aTi7TqtqEpqD+UPY4ourt2CuyCFxWsonS6dczqtTvfAVArTdbGJYY+kNNVR3WiXgGUhkUu8N7vEowU00RUQGNdSVMUs4FX+HlU3RnEoRc/xUhPiaLf0Bm/g9wG96kwyg/TZvkNU7PpMVRdXeLrVORn0qThs3VA4dqondF+O12iC1TK4TKYGzFYczGAUsfuurtDyCc2GMoE+hH2FR8U7amQOVuYZFkutTdqaqukWpFQOr8wLeMzAgMBAAECggEAD715/3v3y6ejA3EeQvDQpGRANeLckcGMlaUkRpCSAf6oawSALuFZUt3T3zAzae7zUJ8mHTKMKR4DmeO68utfevXq3bkvj87nmslGvjfeKrgxYPMMjrTV0KuK6XLjiH3sOtn6FaR9s6iOwvovLs2LT/ZGbZyu84QNOjwTVP9JXZQkBgMItdKf+U3H2Cjp7U/qXBt8/9yzVFklp1g1883DAty0lzmT27dJimGVGaPQ8vNxo81+ZUEJAn6GUTk0K/GwJfhPTU8hh8G90n2LTyskoMjGxQe9lXfCcS9DmWawEQL4WTctPrDYlnS/cjCVMS0KXIFuxRNf6qaMYDeywC8BgQKBgQDyf40dvmw34Rrb46+NLayQ9W5CJI/dYeRajpCjoOomq5QYhbXzUCpVfbtByeGMsg3zN58NNsZGhl5SU0GdEdoOlxCk+2Hey2yQYF4ugQm/dTd68Jgqi3yujigAbNYa1ZhL9t3FqouPY1dGiaxl+DFYdSMIrsVFXh2NbrPyqTk5IQKBgQDnNaH7LCcIUqg9H8Tsls+8GLzP2HwF3hdll8asEsF3K3HX6/Zlp4VnnEcIkAxLRL/L0o5akXrmA18ZwfoSguTPXV9va3G2GgIiJHgcytmGtQVvbpFKuPnCXKz+avxnfO0flJqyYEuHr/40jsGbMkk0Kr52/n3ivXZbBUlT+tkt0wKBgB0qLgSnxEgsMJjFl3V5SsncWrhlwU+02Evz3X1wevjPpe4VFr7+ozjI+F5/MztCpt7bj6t9LPeKbYmlLb0ASqN6k6vj9+9ds97hWDJrnoqCRHvqt8JWKFauDi2O6WksyzZHqIB/dG14WyTGpg9VfEnRPLdsnZksKo26BLZol9NBAoGBAMz7oMNljqlzVtLyMo2q2zuhFuySusoc79NTL4FpE3rK2qCbA5V2YvDL/bIau7uTlRNodmrXZgU84fidIE9/Gsq5tp26vVK8Vj3c5Vxpf1dNcCct+MQtoMjvjzP0uBgsCrKf9lLEytHed1ozYnRsrbgBWWF4GTWH0cG6uxsoX5mfAoGAfYXKZdyRU+Su4y4EnDLMXd320ar7PaeuY8aZU7V6UQEsaOj6H3O8JMEOuBrOVEhAP2EkAC8ayargSXTSOkN97pg88agKDwA6jh4N6TKAK8XMft81YPPliVwZMsAUqihSKQBnKZ7ssHHLGWWWp5vfkyb7Y7dIkZcPzB0X3q/jL58=", } marshal, _ := json.Marshal(c) return marshal diff --git a/plugins/alipay_redpack/internal/transform.go b/plugins/alipay_redpack/internal/transform.go index ee9014a..8b162fc 100644 --- a/plugins/alipay_redpack/internal/transform.go +++ b/plugins/alipay_redpack/internal/transform.go @@ -12,12 +12,8 @@ import ( ) type Config struct { - AppId string `json:"app_id"` - Prk string `json:"prk"` // 私钥 - PukPath string `json:"npk"` // 验签公钥 - - MchCertPath string `json:"mch_cert_path"` - RootCertPath string `json:"root_cert_path"` + AppId string `json:"app_id"` + Prk string `json:"prk"` // 私钥 } func transConfig(config []byte) (*Config, error) { @@ -26,18 +22,6 @@ func transConfig(config []byte) (*Config, error) { if err != nil { return nil, err } - //dir, _ := os.Getwd() - //filePath := fmt.Sprintf("%s/%s/%s/%s", dir, "cert", "alipay", c.AppId) - //if !fileExists(filePath) { - // return nil, fmt.Errorf("授权文件信息不存在,请联系技术人员处理") - //} - /** - AppId: a.bc.Alipay.AppId, - Prk: a.bc.Alipay.GetPrk(), - PukPath: fmt.Sprintf("%s/%s", filePath, "alipayCertPublicKey_RSA2.crt"), - MchCertPath: fmt.Sprintf("%s/%s", filePath, a.bc.Alipay.MchCertName), - RootCertPath: fmt.Sprintf("%s/%s", filePath, "alipayRootCert.crt"), - */ return &c, nil } @@ -45,7 +29,7 @@ func (c *Config) paramReq(req po.Req, method string) (*po.Param, error) { if err := req.Validate(); err != nil { return nil, err } - cert, err := alipay.GetCert(c.MchCertPath, c.RootCertPath, c.PukPath, c.AppId) + cert, err := alipay.GetCert(c.AppId) if err != nil { return nil, err } diff --git a/plugins/alipay_redpack/internal/util.go b/plugins/alipay_redpack/internal/util.go index 2aea271..a46da92 100644 --- a/plugins/alipay_redpack/internal/util.go +++ b/plugins/alipay_redpack/internal/util.go @@ -12,7 +12,6 @@ import ( "fmt" "gitea.cdlsxd.cn/sdk/plugin/utils" "net/url" - "os" "plugins/alipay_redpack/internal/po" "regexp" "strings" @@ -28,11 +27,6 @@ func isEmailValid(email string) bool { return emailRegex.MatchString(email) } -func fileExists(filePath string) bool { - _, err := os.Stat(filePath) - return err == nil || os.IsExist(err) -} - func req(config *Config, req *po.Param) (url.Values, error) { var strToBeSigned strings.Builder uv := url.Values{} diff --git a/utils/alipay/cert.go b/utils/alipay/cert.go index 7186def..da33444 100644 --- a/utils/alipay/cert.go +++ b/utils/alipay/cert.go @@ -2,6 +2,7 @@ package alipay import ( "fmt" + "os" "sync" ) @@ -37,23 +38,31 @@ func init() { instance.CertConfigs = make(map[string]*CertConfig) } -func GetCert(mchCertPath, rootCertPath, PublicKeyPath, appId string) (*CertConfig, error) { - if mchCertPath == "" || rootCertPath == "" || appId == "" { - return nil, fmt.Errorf("mchCertPath or rootCertPath or appId is empty") - } +func GetCert(appId string) (*CertConfig, error) { c := getCertConfig(appId) if c != nil { - return nil, fmt.Errorf("appId %s already exists", appId) + return c, nil } + dir, err := os.Getwd() + if err != nil { + return nil, fmt.Errorf("get current dir error: %v", err) + } + filePath := fmt.Sprintf("%s/%s/%s/%s", dir, "cert", "alipay", appId) + if !fileExists(filePath) { + return nil, fmt.Errorf("[%s]授权文件信息不存在,请联系技术人员处理", appId) + } + mchCertPath := fmt.Sprintf("%s/%s_%s.crt", filePath, "appCertPublicKey", appId) mchCertSN, err := getMchCertSN(mchCertPath) if err != nil { return nil, fmt.Errorf("get mchCertSN error: %v", err) } + rootCertPath := fmt.Sprintf("%s/%s", filePath, "alipayRootCert.crt") rootCertSN, err := getRootCertSN(rootCertPath) if err != nil { return nil, fmt.Errorf("get rootCertSN error: %v", err) } - publicKey, err := getPublicKey(PublicKeyPath) + publicKeyPath := fmt.Sprintf("%s/%s", filePath, "alipayCertPublicKey_RSA2.crt") + publicKey, err := getPublicKey(publicKeyPath) if err != nil { return nil, fmt.Errorf("get publicKey error: %v", err) } diff --git a/utils/alipay/common.go b/utils/alipay/common.go index 03161bf..aa2f3c4 100644 --- a/utils/alipay/common.go +++ b/utils/alipay/common.go @@ -7,6 +7,7 @@ import ( "encoding/pem" "fmt" "log" + "os" ) // md5Hash 计算 MD5 哈希值 @@ -36,3 +37,8 @@ func getCert(certData []byte) (*x509.Certificate, error) { return cert, nil } + +func fileExists(filePath string) bool { + _, err := os.Stat(filePath) + return err == nil || os.IsExist(err) +}