alipay插件加载证书
This commit is contained in:
parent
e48f4b0a74
commit
0f34b3df33
|
@ -7,4 +7,5 @@ Thumbs.db
|
|||
.idea/
|
||||
|
||||
# project
|
||||
pkg/
|
||||
pkg/
|
||||
cert/
|
|
@ -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)
|
||||
}
|
|
@ -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{
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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{}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue