diff --git a/go.mod b/go.mod index 9ab53b0..13209fc 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module plugins go 1.21 -require codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240703025635-39098bff7a4c +require codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715090446-b656721e6251 require ( github.com/envoyproxy/protoc-gen-validate v1.0.4 // indirect diff --git a/go.sum b/go.sum index ce43f43..5c2727c 100644 --- a/go.sum +++ b/go.sum @@ -19,6 +19,14 @@ codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240702090901-b1eca824 codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240702090901-b1eca8243794/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240703025635-39098bff7a4c h1:JnLzT0jm8viTbNMdMuC+sVQJJnVHo9K+OZ6JouLq118= codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240703025635-39098bff7a4c/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= +codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715071135-9a43de0354b5 h1:k916Qc7PAg06SBkUusrbEh90GI5FX3DBjLZyAOo06+E= +codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715071135-9a43de0354b5/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= +codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715080215-21fb3191ac40 h1:YQcL0MfBXmZdbbPR4GEflWVqcuDRgmBcT3bExyDYlSQ= +codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715080215-21fb3191ac40/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= +codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715082113-4835de82a70b h1:EY3XXZp8N93Rnh5cjyo9GoheJrOVjA6i5HfePmMiGcE= +codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715082113-4835de82a70b/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= +codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715090446-b656721e6251 h1:/bMt473Lxknsfs0HLAU5gXUtJRZi9U8SQyF330Xap5A= +codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715090446-b656721e6251/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= diff --git a/plugins/alipay_cpn/go.mod b/plugins/alipay_cpn/go.mod index 961f7da..fb04edf 100644 --- a/plugins/alipay_cpn/go.mod +++ b/plugins/alipay_cpn/go.mod @@ -3,7 +3,7 @@ module plugins/alipay_cpn go 1.21 require ( - codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240705084627-668935b1d225 + codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715090446-b656721e6251 github.com/carlmjohnson/requests v0.23.5 github.com/go-playground/validator/v10 v10.22.0 github.com/hashicorp/go-plugin v1.6.1 diff --git a/plugins/alipay_cpn/go.sum b/plugins/alipay_cpn/go.sum index 780e73f..1147aa8 100644 --- a/plugins/alipay_cpn/go.sum +++ b/plugins/alipay_cpn/go.sum @@ -1,5 +1,5 @@ -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240705084627-668935b1d225 h1:/qjBzApa6usFe4iT+u/3ncdGfGLg9srrhPI7FZHh7Zo= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240705084627-668935b1d225/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= +codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715090446-b656721e6251 h1:/bMt473Lxknsfs0HLAU5gXUtJRZi9U8SQyF330Xap5A= +codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715090446-b656721e6251/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= github.com/carlmjohnson/requests v0.23.5 h1:NPANcAofwwSuC6SIMwlgmHry2V3pLrSqRiSBKYbNHHA= diff --git a/plugins/alipay_cpn/internal/alipay_cpn.go b/plugins/alipay_cpn/internal/alipay_cpn.go index c6bb32b..2df6bb9 100644 --- a/plugins/alipay_cpn/internal/alipay_cpn.go +++ b/plugins/alipay_cpn/internal/alipay_cpn.go @@ -25,15 +25,8 @@ const ( type AlipayCpnService struct{} -func (p *AlipayCpnService) configBaseUri(config *proto.Config) { - if config.BaseUri == "" { - config.BaseUri = baseUri - } -} - -func (p *AlipayCpnService) Order(ctx context.Context, request *proto.OrderRequest) (*proto.OrderResponse, error) { - p.configBaseUri(request.Config) - conf, err := transConfig(request.Config) +func (s *AlipayCpnService) Order(ctx context.Context, request *proto.OrderRequest) (*proto.OrderResponse, error) { + c, err := transConfig(request.Config) if err != nil { return nil, err } @@ -41,16 +34,16 @@ func (p *AlipayCpnService) Order(ctx context.Context, request *proto.OrderReques if err != nil { return nil, err } - param, err := paramReq(conf, poReq, orderMethod) + param, err := c.paramReq(poReq, orderMethod) if err != nil { return nil, err } - uv, err := req(conf, param) + uv, err := req(c, param) if err != nil { return nil, err } var response po.OrderResp - err = requests.URL(request.Config.BaseUri).BodyForm(uv).ToJSON(&response).Fetch(ctx) + err = requests.URL(c.BaseUri).BodyForm(uv).ToJSON(&response).Fetch(ctx) if err != nil { return nil, fmt.Errorf("请求异常,msg:" + err.Error()) } @@ -58,9 +51,8 @@ func (p *AlipayCpnService) Order(ctx context.Context, request *proto.OrderReques return orderResp(request, response), nil } -func (p *AlipayCpnService) Query(ctx context.Context, request *proto.QueryRequest) (*proto.QueryResponse, error) { - p.configBaseUri(request.Config) - conf, err := transConfig(request.Config) +func (s *AlipayCpnService) Query(ctx context.Context, request *proto.QueryRequest) (*proto.QueryResponse, error) { + c, err := transConfig(request.Config) if err != nil { return nil, err } @@ -68,30 +60,30 @@ func (p *AlipayCpnService) Query(ctx context.Context, request *proto.QueryReques if err != nil { return nil, err } - param, err := paramReq(conf, poReq, queryMethod) + param, err := c.paramReq(poReq, queryMethod) if err != nil { return nil, err } - uv, err := req(conf, param) + uv, err := req(c, param) if err != nil { return nil, err } var response po.QueryResp - err = requests.URL(request.Config.BaseUri).BodyForm(uv).ToJSON(&response).Fetch(ctx) + err = requests.URL(c.BaseUri).BodyForm(uv).ToJSON(&response).Fetch(ctx) if err != nil { return nil, fmt.Errorf("请求异常,msg:" + err.Error()) } return queryResp(request, response), nil } -func (p *AlipayCpnService) Notify(_ context.Context, request *proto.NotifyRequest) (*proto.NotifyResponse, error) { - conf, err := transConfig(request.Config) +func (s *AlipayCpnService) Notify(_ context.Context, request *proto.NotifyRequest) (*proto.NotifyResponse, error) { + c, err := transConfig(request.Config) if err != nil { return nil, err } n := notifyReq(request) - b, err := Verify(n, conf.Extra.Npk) + b, err := Verify(n, c.Npk) if err != nil { return nil, err } diff --git a/plugins/alipay_cpn/internal/alipay_test.go b/plugins/alipay_cpn/internal/alipay_test.go new file mode 100644 index 0000000..7255d4e --- /dev/null +++ b/plugins/alipay_cpn/internal/alipay_test.go @@ -0,0 +1,86 @@ +package internal + +import ( + "codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin/proto" + "context" + "encoding/json" + "fmt" + "github.com/stretchr/testify/assert" + "testing" +) + +var server = &AlipayCpnService{} + +func conf() *proto.Config { + c := &Config{ + AppId: "2021004125622196", + Prk: "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC2cF2AxAJP/cQJGPcvzJ5Tt9AQnSzpncTo0sOsge07E9WOi8zIP772lm+ar0cjX9jx8Pf1fJ0hJuzqcsSikC/ZeFWNVmmG4crnwb1NzS/3Ymb22SVKqAjUyjgUkaMQEBRSBAYSTbzwLi9ziggiSvgaIZvUnpQWStcYzhPG91aF2q968vKMd3670b0WwCWSMmWW7dezyqMVikigJCvhSOBfC9A66MciiwtATLpiHBAsRr6IZQ6o9JeH7TPwwLW45QMOXR5VG0xuNj5/8dQmhZGtkckhYEC0v2DrjKkORdfbm4XcvsBsnVhcIVcDu1YkDZHYvhH45r7fUqYfKbgUHH9dAgMBAAECggEBAJUtundxT4bDNYpO3Mk8IvbH5h2/uBrrRDkxJomn0Ckvpb+itvfDkE4oYuf0jVHyrP3hEZCtrfqOzslCwWFAT7Aewq4Iy89cUEND25yDvMYns5QDqYercVU2abcAA3s9+q+51JEg+e7XhTuP0ejgrpEHjFnGtcaoucvxrqBSXXCjJu7l/R/O4gSctTKytTrkZ2vcbaUjVSsDIHE0qtzYinpHlUz8yzxTyhbI2ZHiLiZt3bQVbfPjKiu9H1VLcg4Ty38aP6g1c+nc0aanKiJSjlFWrka2dKB8EySYzt1yqSXHtsFc5BI7lopMTXlQ3f7eZljFt+/QjoGdD3LkRLGsZM0CgYEA74fZQjMeqqGGKxRH1vHkVBQ293VcLZxMh/62VROhWR2JU+UFYmP4zjtu+jnCMAb03kXFoyEJtEShcPoJmW/X5jIR7ukQYYTmlognPOHt4j8n1LP3AxF6m1qhfCPKjX+cbFoYebJtmR4u/pGQQcz6VgsaVTmPLEvBlJaW+C2fBWsCgYEAwvuanPWxHqWhUzGRXQWBOZC4tnS0R43xmnNOPjX0py/X/PwfDvYiMbuV9qRHoHu1dXQ/IfURpOJLp/ibqhTd7TRk6TwVtpnCZ4XJaXZ4wVnIFuH6d78nbEsQODtOwC82OscXvC+foymouM+7HfjXFYh597y+6f3khPQGoTP2+FcCgYBiffWz5tlBSFGm/RvdInHEsNs5PaS9jHtboDzRFtVNk3uYZ5+jKYBxLLchZQaYQQQHMaFmxnr7CQ1pKycvVHHuUcBWALefoco/M5UOz8fFNDrol2eGd3V20/l61iy/qi1j0FgoElpGj8a7Hpe2ttZo8v/M83IPwMbElndVbUzqKQKBgQCSvNlR8JEYWFv9iRs1n1PuJ5zrKw8VnpxJuScUKHTzcU0iBfe1wcRgGyUz1dRV0WPxfceZXZ6msOtxAObdbBDMWBbtdBt/LV4hnIzEgrVEBbZQikZ94ezgUell+DQ+7Ajq2TRimpCQMWTZmPPgDYqImQn5SCGBZWKaMC/hF4NwxwKBgASRF+xP/NUxj3G3TjRHMskFTgtOvzCChZgRXRuvIEd4zEZ1Y29sPSuTHFnJPVPfMDeGmcwPPVDGpMIumRXKJAO6hC9BtnivDnqjtCh16fzoimBeBlaGgg4KWfXT+7BTAPFzlKg4diHoa4Adc4JC+r9Xh++VAMUc3zvH4LWB+Oen", + Npk: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5sfDbw6kkHXeOSfr7RbrbkV7xHlNE8c5eXNI3ri+UCQLka9aehlnLhI2M1DkzSWFXvHuo5vHlC6set5j25nv+4AKevY1TgAPTMZQjNA3EMXinvBTZVCZnG6Cc3BN5jvAnt31NyTE9JsR5shFL9O6WTFED/WGUaM95kJfVeA1CwWkXUVV2kd1qU5KPAIHKMWsWiu9mSOBVZGd7NWwqfrZq33tiHmqYQ5LkS2JIno3qXukKm/2HIL+Ri1lw7s1c/xE6XalKPiroojK6zLLtrLa3LEGN833NWASrdGi4moYhAPHPZnhwsMr9FfUEsGSvwqdJlAbCtnIdbx3a6mV+sBRxQIDAQAB", + NotifyUrl: "http://test.openapi.1688sup.cn", + } + marshal, _ := json.Marshal(c) + return &proto.Config{Conf: marshal} +} + +func TestOrder(t *testing.T) { + request := &proto.OrderRequest{ + Config: conf(), + Order: &proto.OrderRequest_Order{ + OrderNo: "240403164049635931", + Account: "", + Extra: []byte(`{"logon_id":"13100720242"}`), + }, + Product: &proto.OrderRequest_Product{ + ProductNo: "3102024032977191", + Extra: []byte(`{}`), + }, + } + t.Run("TestOrder", func(t *testing.T) { + got, err := server.Order(context.Background(), request) + if err != nil { + t.Errorf("Order() error = %v", err) + return + } + fmt.Printf("%+v", got) + assert.Equal(t, int(proto.Status_ING), int(got.Result.Status)) + }) +} + +func TestQuery(t *testing.T) { + request := &proto.QueryRequest{ + Config: conf(), + Order: &proto.QueryRequest_Order{ + OrderNo: "240403180614988314_80", + TradeNo: "", + Account: "", + Extra: []byte(`{"phone_id":"","logon_id":"13691105465","activity_id":"ACT873CCV02108400"}`), + }, + } + t.Run("TestQuery", func(t *testing.T) { + got, err := server.Query(context.Background(), request) + if err != nil { + t.Errorf("Query() error = %v", err) + return + } + fmt.Printf("%+v \n", got) + assert.Equal(t, int(proto.Status_SUCCESS), int(got.Result.Status)) + }) +} + +func TestNotify(t *testing.T) { + in := &proto.NotifyRequest{ + Config: conf(), + Queries: []byte(`{"charset":"UTF-8","biz_content":"{"publish_amount":500,"activity_name":"\u90ae\u50a8\u6fc0\u6d3b\u793c47\u6ee1100-5","user_id":"2088532467083354","gmt_voucher_create":1720764021383,"voucher_status":"ENABLED","biz_type":"V_BATCH_PUBLISH","activity_id":"ACT373CCV02109242","voucher_id":"202407120007300235830O26E1ZD","order_id":"2024071200073024358301P7OES3"}","utc_timestamp":"1720764036512","sign":"oplbkc3Dcz7S8\/DSi+tBPDN593EINHQb1G0km7IgKyFfZpaYgjyyBm\/Ic2mHV6nyt9O\/eWJ0aEPLiR+rPJ3W\/ezPJCQbLascF6HshfdQa22holFnuO9xDcUH7IkR0hiQ5QxSJ+oJ6ZPU6+Po\/ercbQvwbUeQouPuZC+xWba6sznTEK7aMkv9sZJpbj3P4wD1HZKC50LEjKSAug7GZNv7B3wOqXA+Ta26l8cg2z8qHWAAdF6cYdgZ63uPKMOPDTT3gRj\/UnebE3Xjc62PYUsZJhdclJi5hW3CTTbubEmBW482rgNMIc6I+LRY8Nvspu\/8MkxU0bVsoxBEe1s0VqSLzA==","app_id":"2021004125622196","version":"1.1","sign_type":"RSA2","notify_id":"2024071200262140036056588190308607","msg_method":"alipay.user.voucher.dtbankcust.notify"}`), + Headers: []byte(``), + Body: []byte(``), + } + t.Run("TestNotify", func(t *testing.T) { + got, err := server.Notify(context.Background(), in) + if err != nil { + t.Errorf("Notify() error = %v", err) + return + } + fmt.Printf("TestNotify : %+v \n", got) + assert.Equal(t, int(proto.Status_SUCCESS), int(got.Result.Status)) + }) +} diff --git a/plugins/alipay_cpn/internal/transform.go b/plugins/alipay_cpn/internal/transform.go index 8387b56..d0271ed 100644 --- a/plugins/alipay_cpn/internal/transform.go +++ b/plugins/alipay_cpn/internal/transform.go @@ -11,35 +11,33 @@ import ( ) type Config struct { - Config *proto.Config - Extra *ConfigExtra -} - -type ConfigExtra struct { - Prk string `json:"prk"` // 私钥 - Npk string `json:"npk"` // 回调公钥 + AppId string `json:"app_id"` + BaseUri string `json:"base_uri"` + NotifyUrl string `json:"notify_url"` + Prk string `json:"prk"` // 私钥 + Npk string `json:"npk"` // 回调公钥 } func transConfig(config *proto.Config) (*Config, error) { - var extra ConfigExtra - err := json.Unmarshal(config.Extra, &extra) + var c Config + err := json.Unmarshal(config.Conf, &c) if err != nil { return nil, err } - return &Config{ - Config: config, - Extra: &extra, - }, nil + if c.BaseUri == "" { + c.BaseUri = baseUri + } + return &c, nil } -func paramReq(config *Config, req po.Req, method string) (*po.Param, error) { +func (c *Config) paramReq(req po.Req, method string) (*po.Param, error) { if err := req.Validate(); err != nil { return nil, err } return &po.Param{ Timestamp: time.Now().Format("2006-01-02 15:04:05"), Version: vo.Version, - AppId: config.Config.AppId, + AppId: c.AppId, Method: method, Format: vo.Format, Charset: vo.Charset, diff --git a/plugins/alipay_cpn/internal/util.go b/plugins/alipay_cpn/internal/util.go index 3f1493b..074659b 100644 --- a/plugins/alipay_cpn/internal/util.go +++ b/plugins/alipay_cpn/internal/util.go @@ -28,7 +28,7 @@ func req(config *Config, req *po.Param) (url.Values, error) { strToBeSigned.WriteString(fmt.Sprintf("%s=%s&", kv.Key, kv.Value)) } s := strings.TrimRight(strToBeSigned.String(), "&") - sign, err := Sign(s, []byte(utils.NewPrivate().Build(config.Extra.Prk))) + sign, err := Sign(s, []byte(utils.NewPrivate().Build(config.Prk))) if err != nil { return nil, err } diff --git a/plugins/union_pay_cpn/go.mod b/plugins/union_pay_cpn/go.mod index bcb7c4d..9e8c8c2 100644 --- a/plugins/union_pay_cpn/go.mod +++ b/plugins/union_pay_cpn/go.mod @@ -3,11 +3,12 @@ module plugins/union_pay_cpn go 1.21 require ( - codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240705084627-668935b1d225 - github.com/carlmjohnson/requests v0.23.5 + codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715090446-b656721e6251 + github.com/carlmjohnson/requests v0.23.4 github.com/go-playground/validator/v10 v10.22.0 github.com/hashicorp/go-plugin v1.6.1 github.com/stretchr/testify v1.9.0 + github.com/tjfoc/gmsm v1.4.1 ) require ( @@ -26,7 +27,6 @@ require ( github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77 // indirect github.com/oklog/run v1.0.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/tjfoc/gmsm v1.4.1 // indirect golang.org/x/crypto v0.21.0 // indirect golang.org/x/net v0.22.0 // indirect golang.org/x/sys v0.18.0 // indirect diff --git a/plugins/union_pay_cpn/go.sum b/plugins/union_pay_cpn/go.sum index ff19fa3..0ff47dd 100644 --- a/plugins/union_pay_cpn/go.sum +++ b/plugins/union_pay_cpn/go.sum @@ -1,17 +1,11 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240703025635-39098bff7a4c h1:JnLzT0jm8viTbNMdMuC+sVQJJnVHo9K+OZ6JouLq118= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240703025635-39098bff7a4c/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240705080935-81a7e81d5ab7 h1:NQR6k8ky3ernl76KlvWD9XKVBnjc/v7Aj6Jee6NXbkQ= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240705080935-81a7e81d5ab7/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240705081755-5f4c918d501a h1:RfDotu6vc+uJ5cLoVfVsd72LUt2v1wKV8TjzNx23eIk= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240705081755-5f4c918d501a/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240705084627-668935b1d225 h1:/qjBzApa6usFe4iT+u/3ncdGfGLg9srrhPI7FZHh7Zo= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240705084627-668935b1d225/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= +codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715090446-b656721e6251 h1:/bMt473Lxknsfs0HLAU5gXUtJRZi9U8SQyF330Xap5A= +codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715090446-b656721e6251/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= -github.com/carlmjohnson/requests v0.23.5 h1:NPANcAofwwSuC6SIMwlgmHry2V3pLrSqRiSBKYbNHHA= -github.com/carlmjohnson/requests v0.23.5/go.mod h1:zG9P28thdRnN61aD7iECFhH5iGGKX2jIjKQD9kqYH+o= +github.com/carlmjohnson/requests v0.23.4 h1:AxcvapfB9RPXLSyvAHk9YJoodQ43ZjzNHj6Ft3tQGdg= +github.com/carlmjohnson/requests v0.23.4/go.mod h1:Qzp6tW4DQyainPP+tGwiJTzwxvElTIKm0B191TgTtOA= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= diff --git a/plugins/union_pay_cpn/internal/transform.go b/plugins/union_pay_cpn/internal/transform.go index 4c73876..72331ab 100644 --- a/plugins/union_pay_cpn/internal/transform.go +++ b/plugins/union_pay_cpn/internal/transform.go @@ -10,11 +10,9 @@ import ( ) type Config struct { - Config *proto.Config - Extra *ConfigExtra -} + AppId string `json:"app_id"` + BaseUri string `json:"base_uri"` -type ConfigExtra struct { ChNlId string `json:"chnlId"` // 渠道方代码 IV string `json:"iv"` // 加密密钥 KEY string `json:"key"` // 加密密钥 @@ -23,25 +21,22 @@ type ConfigExtra struct { } func transConfig(config *proto.Config) (*Config, error) { - var extra ConfigExtra - err := json.Unmarshal(config.Extra, &extra) + var c Config + err := json.Unmarshal(config.Conf, &c) if err != nil { return nil, err } - return &Config{ - Config: config, - Extra: &extra, - }, nil + return &c, nil } -func orderReq(in *proto.OrderRequest, config *Config) (*po.OrderReq, error) { +func (c *Config) orderReq(in *proto.OrderRequest) (*po.OrderReq, error) { type OrderExtra struct { OrderDt string `json:"orderDt"` } var e OrderExtra _ = json.Unmarshal(in.Order.Extra, &e) - mobile, err := utils.Encrypt([]byte(in.Order.Account), []byte(config.Extra.KEY), []byte(config.Extra.IV)) + mobile, err := utils.Encrypt([]byte(in.Order.Account), []byte(c.KEY), []byte(c.IV)) if err != nil { return nil, err } @@ -50,7 +45,7 @@ func orderReq(in *proto.OrderRequest, config *Config) (*po.OrderReq, error) { AccessId: vo.AccessId, EntityTp: vo.EntityTp, - ChNlId: config.Extra.ChNlId, + ChNlId: c.ChNlId, Qid: in.Order.OrderNo, OrderDt: e.OrderDt, TraceId: in.Order.OrderNo, diff --git a/plugins/union_pay_cpn/internal/union_pay_cpn.go b/plugins/union_pay_cpn/internal/union_pay_cpn.go index 53cbf0d..56dbc34 100644 --- a/plugins/union_pay_cpn/internal/union_pay_cpn.go +++ b/plugins/union_pay_cpn/internal/union_pay_cpn.go @@ -31,11 +31,11 @@ const notifyBizMethod = "mkt.CpnStateUpdtNotify" type UnionPayCpnService struct{} func (p *UnionPayCpnService) Order(ctx context.Context, request *proto.OrderRequest) (*proto.OrderResponse, error) { - conf, err := transConfig(request.Config) + c, err := transConfig(request.Config) if err != nil { return nil, err } - uv, err := orderReq(request, conf) + uv, err := c.orderReq(request) if err != nil { return nil, err } @@ -43,8 +43,8 @@ func (p *UnionPayCpnService) Order(ctx context.Context, request *proto.OrderRequ return nil, err } var response po.OrderResp - url := fmt.Sprintf("%s%s", request.Config.BaseUri, orderMethod) - err = requests.URL(url).Headers(headers(conf, uv, orderBizMethod)).BodyJSON(uv).ToJSON(&response).Fetch(ctx) + url := fmt.Sprintf("%s%s", c.BaseUri, orderMethod) + err = requests.URL(url).Headers(headers(c, uv, orderBizMethod)).BodyJSON(uv).ToJSON(&response).Fetch(ctx) if err != nil { return nil, fmt.Errorf("请求异常,msg:" + err.Error()) } @@ -57,12 +57,12 @@ func (p *UnionPayCpnService) Query(ctx context.Context, request *proto.QueryRequ if err != nil { return nil, err } - uv := queryReq(request, conf.Extra.ChNlId) + uv := queryReq(request, conf.ChNlId) if err = uv.Validate(); err != nil { return nil, err } var response po.QueryResp - url := fmt.Sprintf("%s%s", request.Config.BaseUri, queryMethod) + url := fmt.Sprintf("%s%s", conf.BaseUri, queryMethod) err = requests.URL(url).Headers(headers(conf, uv, queryBizMethod)).BodyJSON(uv).ToJSON(&response).Fetch(ctx) if err != nil { return nil, fmt.Errorf("请求异常,msg:" + err.Error()) diff --git a/plugins/union_pay_cpn/internal/union_pay_cpn_test.go b/plugins/union_pay_cpn/internal/union_pay_cpn_test.go index b0362f3..5f21660 100644 --- a/plugins/union_pay_cpn/internal/union_pay_cpn_test.go +++ b/plugins/union_pay_cpn/internal/union_pay_cpn_test.go @@ -3,34 +3,36 @@ package internal import ( "codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin/proto" "context" + "encoding/json" "fmt" "github.com/stretchr/testify/assert" "testing" ) -var appId = "up_49pau3fu6latj_03h" -var appKey = "" -var baseUri = "https://openapi.unionpay.com" +func conf() *proto.Config { + c := &Config{ + AppId: "up_49pau3fu6latj_03h", + BaseUri: "https://openapi.unionpay.com", + ChNlId: "8091", + IV: "0123456789123456", + KEY: "16fb034dead44ff6f599b1ca373ccfd1", + Prk: "MIIEogIBAAKCAQEAllAo3AbVfNg1iDT3CisgueIm2Pya2C6qatF0S8/aAKW8A6HBIuvrk1sb2TjbI0UDVowaNDsPa7nNdZHkQa6CQKf2BwFRy7gB8vAD1YSq23NTwplGe5IpuRe2Cbljh5diQ/+0zwZPZQEvjSMqZJILYVluGBw656JSndRdXHCs608CBib14l35A6D7rSZNd53nM9yXj/WOpLuY/jX0sbKJrBUIhcQcMiCFK/Nx06vhhCGZSWwaj0TTSMEOj9nyU+56MMx+N7527JUnOYMyVbbEx5h1S5sPjntMVVzz8c8FC5MKbgXCgjTt5Depl6YgrvoSCNNXZqnXN2l9dtBxKGSEdQIDAQABAoIBAD7r606/pZqPP0l3MnqVNyvY2X43r/ITBs+UQmSB67Ydqqiyi5C8xW530x6JSGJpP055c3atynTD4Jf4rF46WNgL91dTXBQ1QMubYV9+G6+lhUiOtQyBUOnkXRWQ/3MBEed5IQ0QjSew6WDheZuD7zOfJhD9sELKll7vSO2rVRdi5Kf3pps0K4aeYLvlelHjPtu2EkMyAD4d37QO2q8A/+acOf7wyx1uZ55nobe0jVgQBa2Tuuwhd2JilmsgMvcVxeAJoocyQxPVTU+iMidgZKxyW/fJUaR7V2KgKfP0H2OZbSruD2HyHL7o70+/XBg250msh691oTCXSGWiITFXRDkCgYEA1KF3daSzWK2vTZeNMxj++VRNZfyigNqBwgRZxrSGIUeNGpDdDp7flldM/fO/0RijKnh+nXLBCMZlxffSI7W3jkkjosEq0uyXv6Ez4WlhwHEAE6KrZYQ8VDU3We1LXERu/3SMU16Uq2Vme8J6kpshr7OLGeuTNfsSG79lpHU/OO8CgYEAtPjF/AY/t85u4JV0w6FJ/K7Iya+AyIyZhsgnxsPv5NwVtNsQzTRbXlpgnVmaKUXzLBTBJA2P6Gie35R6kJuOuMnvHjtG7umI5lOUJaqYk5GZEXHxbIKTXUxAbv+WKRHcFwcH54Ppurs7bN6ultWdE+yyU5PvabFRAidL+rV+MNsCgYBkqx2XwSZ4MaLxpXLgYlE1UkhipL17K/iLFuw6O3XVg762eSdvqKBK2YJGKYUDRhraHLo1aQMjWGsO00nWRk5lOxN4FuRjgEhIHdYmPnJdXiKfKUDkizrU020lUkd/o5a5s0BMqFbS3usqZOULTA8i1GpjFzlXMUtdf7xrpGcOWQKBgFJXWuX4Befg8owXFKCqc1qYQF2cEBGv/27XBVon7rAH/4xhnHxx1RzSLGGL0lvzKtikvNhln1PUvmzmRvoi/UZRAw6TVAwCkDqUTrTwsSl7ttS8Lmf75Ycu2aZnfnBDYwvLNCp/18oRxNEdZPzWRvk42k6y4d0KQ9yh+q0hBUC/AoGASgJro5HgKWkSzYx1Fk3rvo7EWeZwXNfWuzIhtCiVDG4+df0ZdybkbjxbaRwL2rbTSBeqSaZw4UwpE1JyF8erfzx0qpHCY5V3ocnA8kg56mX9kE5H9WKjMe1tbuZpba4i08zvM8vpz9gASf3z/WrWWqgpvynxDWpy4xFAqrWC0VQ=", + Npk: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy05sCMKEYZQGryKKq7qxxMi4uIRcOuv0aQcptjEifc/TS56bU0iGlkuH9k90tPp6EoKYLUfnL1FdHQOWXboFktwoxjy372gc6CsQfU9ZNjsWMYI8CTZF6gWLk4HjfBO4HcCKJs7oGntgVZxfVqVxJ8N/M1ZC2sDuVkoHYymONgNwgO+yYXrAlPPfJBltG5QNOcGTHBZ4PTc6A0M17+2BiskKUJfLEbN2soEZR0b5v5qy0D1xe5w+CdNcvtEb5CemPRxxRYjIqfHlhQPO7ZCUFPmhtoIbtBYG+BIU+qK3Q1DDiBndOVkQGVBQcOnMfYpxp82hlA1TAVeRICWubH3nJwIDAQAB", + } + marshal, _ := json.Marshal(c) + return &proto.Config{Conf: marshal} +} var server = &UnionPayCpnService{} -var config = &proto.Config{ - AppId: appId, - AppKey: appKey, - BaseUri: baseUri, - NotifyUrl: "", - Extra: []byte(`{"chnlId":"8091","iv":"0123456789123456","key":"16fb034dead44ff6f599b1ca373ccfd1", -"prk":"MIIEogIBAAKCAQEAllAo3AbVfNg1iDT3CisgueIm2Pya2C6qatF0S8/aAKW8A6HBIuvrk1sb2TjbI0UDVowaNDsPa7nNdZHkQa6CQKf2BwFRy7gB8vAD1YSq23NTwplGe5IpuRe2Cbljh5diQ/+0zwZPZQEvjSMqZJILYVluGBw656JSndRdXHCs608CBib14l35A6D7rSZNd53nM9yXj/WOpLuY/jX0sbKJrBUIhcQcMiCFK/Nx06vhhCGZSWwaj0TTSMEOj9nyU+56MMx+N7527JUnOYMyVbbEx5h1S5sPjntMVVzz8c8FC5MKbgXCgjTt5Depl6YgrvoSCNNXZqnXN2l9dtBxKGSEdQIDAQABAoIBAD7r606/pZqPP0l3MnqVNyvY2X43r/ITBs+UQmSB67Ydqqiyi5C8xW530x6JSGJpP055c3atynTD4Jf4rF46WNgL91dTXBQ1QMubYV9+G6+lhUiOtQyBUOnkXRWQ/3MBEed5IQ0QjSew6WDheZuD7zOfJhD9sELKll7vSO2rVRdi5Kf3pps0K4aeYLvlelHjPtu2EkMyAD4d37QO2q8A/+acOf7wyx1uZ55nobe0jVgQBa2Tuuwhd2JilmsgMvcVxeAJoocyQxPVTU+iMidgZKxyW/fJUaR7V2KgKfP0H2OZbSruD2HyHL7o70+/XBg250msh691oTCXSGWiITFXRDkCgYEA1KF3daSzWK2vTZeNMxj++VRNZfyigNqBwgRZxrSGIUeNGpDdDp7flldM/fO/0RijKnh+nXLBCMZlxffSI7W3jkkjosEq0uyXv6Ez4WlhwHEAE6KrZYQ8VDU3We1LXERu/3SMU16Uq2Vme8J6kpshr7OLGeuTNfsSG79lpHU/OO8CgYEAtPjF/AY/t85u4JV0w6FJ/K7Iya+AyIyZhsgnxsPv5NwVtNsQzTRbXlpgnVmaKUXzLBTBJA2P6Gie35R6kJuOuMnvHjtG7umI5lOUJaqYk5GZEXHxbIKTXUxAbv+WKRHcFwcH54Ppurs7bN6ultWdE+yyU5PvabFRAidL+rV+MNsCgYBkqx2XwSZ4MaLxpXLgYlE1UkhipL17K/iLFuw6O3XVg762eSdvqKBK2YJGKYUDRhraHLo1aQMjWGsO00nWRk5lOxN4FuRjgEhIHdYmPnJdXiKfKUDkizrU020lUkd/o5a5s0BMqFbS3usqZOULTA8i1GpjFzlXMUtdf7xrpGcOWQKBgFJXWuX4Befg8owXFKCqc1qYQF2cEBGv/27XBVon7rAH/4xhnHxx1RzSLGGL0lvzKtikvNhln1PUvmzmRvoi/UZRAw6TVAwCkDqUTrTwsSl7ttS8Lmf75Ycu2aZnfnBDYwvLNCp/18oRxNEdZPzWRvk42k6y4d0KQ9yh+q0hBUC/AoGASgJro5HgKWkSzYx1Fk3rvo7EWeZwXNfWuzIhtCiVDG4+df0ZdybkbjxbaRwL2rbTSBeqSaZw4UwpE1JyF8erfzx0qpHCY5V3ocnA8kg56mX9kE5H9WKjMe1tbuZpba4i08zvM8vpz9gASf3z/WrWWqgpvynxDWpy4xFAqrWC0VQ=", -"npk":"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy05sCMKEYZQGryKKq7qxxMi4uIRcOuv0aQcptjEifc/TS56bU0iGlkuH9k90tPp6EoKYLUfnL1FdHQOWXboFktwoxjy372gc6CsQfU9ZNjsWMYI8CTZF6gWLk4HjfBO4HcCKJs7oGntgVZxfVqVxJ8N/M1ZC2sDuVkoHYymONgNwgO+yYXrAlPPfJBltG5QNOcGTHBZ4PTc6A0M17+2BiskKUJfLEbN2soEZR0b5v5qy0D1xe5w+CdNcvtEb5CemPRxxRYjIqfHlhQPO7ZCUFPmhtoIbtBYG+BIU+qK3Q1DDiBndOVkQGVBQcOnMfYpxp82hlA1TAVeRICWubH3nJwIDAQAB"}`), -} - func TestOrder(t *testing.T) { request := &proto.OrderRequest{ - Config: config, + Config: conf(), Order: &proto.OrderRequest_Order{ - OrderNo: "240403164049635931", - Account: "13100720242", // R2wVgntY8aP9QTvCN/bWfw== - Extra: []byte(`{orderDt:"20240704"}`), + OrderNo: "240403164049635931", + Account: "13100720242", // R2wVgntY8aP9QTvCN/bWfw== + Quantity: 1, + Extra: []byte(`{"orderDt":"20240704"}`), }, Product: &proto.OrderRequest_Product{ ProductNo: "3102024032977191", @@ -50,7 +52,7 @@ func TestOrder(t *testing.T) { func TestQuery(t *testing.T) { request := &proto.QueryRequest{ - Config: config, + Config: conf(), Order: &proto.QueryRequest_Order{ OrderNo: "240403164049635931", TradeNo: "", @@ -71,7 +73,7 @@ func TestQuery(t *testing.T) { func TestNotify(t *testing.T) { in := &proto.NotifyRequest{ - Config: config, + Config: conf(), Queries: nil, Headers: []byte(`{"bizmethod":"mkt.CpnStateUpdtNotify","apptype":"00","appid":"up_49pau3fu6latj_03h","sign":"F1WQAg3CRdXsBE+1dmAy+ulNkxFWDRkI6Q\/5xcpC\/bOCbcEFeun536hfhU0In+e+5GHPbfpIqyZjjglTm60QvSwvutqOiVlEBy\/G4GpIJPuLy6hdzy9Z+f56qSa0wzIjSxKqG1VuaFd2uS4WzSrx8E6hdPotXkuKzdcRwCCq\/wlmFPVxRRIVNTf6KgqkX4aNsC\/MGdLN9E5DOfoFdC8+oPqV5N71i6SjLvrzo4yaGJm+utSqEORsWZLgfZLUw+pZGjS83rQpFEKC5UyL6KwbIefNJ7a\/5cykiNIGzTRR9Tzz+UxuoiVglJ4AeUb2vs0rL8SoUjr8aLAAqPcXzPE5wQ==","reqts":"1690252684000","version":"1.0.0","signmethod":"RSA2","reqid":"8091_lsxd6688-10","content-type":"application/json"}`), Body: []byte(`{"couponNum":"1","traceId":"lsxd6688-10","OperTp":"","chnlId":"9001","transChnl":"","couponNm":"众邦银行1元立减-测试","operTp":"04","couponCd":"INNER_23072510380403358473638771025186","couponId":"3102023071900090","orderAt":"0","transSeq":"lsxd6688-10","posTmn":"","discountAt":"0","couponCdInfos":[{"subAcctOperAt":"1","couponCd":"INNER_23072510380403358473638771025186"}],"mchntCd":"","transDtTm":"20230725103804"}`), diff --git a/plugins/union_pay_cpn/internal/util.go b/plugins/union_pay_cpn/internal/util.go index b102b8d..437a050 100644 --- a/plugins/union_pay_cpn/internal/util.go +++ b/plugins/union_pay_cpn/internal/util.go @@ -18,7 +18,7 @@ func headers(config *Config, req po.Req, bizMethod string) map[string][]string { h.Add("appType", vo.AppType) h.Add("signMethod", vo.SignMethod) - h.Add("appId", config.Config.AppId) + h.Add("appId", config.AppId) h.Add("bizMethod", bizMethod) h.Add("reqId", req.GetReId()) @@ -27,8 +27,8 @@ func headers(config *Config, req po.Req, bizMethod string) map[string][]string { milliseconds := now.Unix()*1000 + int64(now.Nanosecond())/1e6 h.Add("reqTs", fmt.Sprintf("%d", milliseconds)) - rehash := utils.Sha(vo.Version, config.Config.AppId, bizMethod, req.GetReId(), string(req.ToJson())) - signValue, err := utils.Sign(rehash, []byte(sdkutils.NewPrivate().Build(config.Extra.Prk))) + rehash := utils.Sha(vo.Version, config.AppId, bizMethod, req.GetReId(), string(req.ToJson())) + signValue, err := utils.Sign(rehash, []byte(sdkutils.NewPrivate().Build(config.Prk))) if err != nil { return nil } @@ -40,15 +40,15 @@ func verify(config *Config, req *po.Notify, notifyBizMethod string) error { if req.Headers.SignMethod != vo.SignMethod { return fmt.Errorf("签名方式不匹配") } - if req.Headers.AppId != config.Config.AppId { + if req.Headers.AppId != config.AppId { return fmt.Errorf("appId不匹配") } if req.Headers.BizMethod != notifyBizMethod { return fmt.Errorf("业务方法不匹配") } - rehash := utils.Sha(req.Headers.Version, config.Config.AppId, req.Headers.BizMethod, req.GetReId(), string(req.ToJson())) + rehash := utils.Sha(req.Headers.Version, config.AppId, req.Headers.BizMethod, req.GetReId(), string(req.ToJson())) lowerStr := strings.ToLower(rehash) - if utils.Verify(lowerStr, req.Headers.Sign, []byte(sdkutils.NewPublic().Build(config.Extra.Npk))) { + if utils.Verify(lowerStr, req.Headers.Sign, []byte(sdkutils.NewPublic().Build(config.Npk))) { return nil } return fmt.Errorf("验签失败") diff --git a/plugins/union_pay_cpn/internal/vo/opera_st.go b/plugins/union_pay_cpn/internal/vo/opera_st.go index b758ee1..325a565 100644 --- a/plugins/union_pay_cpn/internal/vo/opera_st.go +++ b/plugins/union_pay_cpn/internal/vo/opera_st.go @@ -32,7 +32,7 @@ func (o OperaSt) GetText() string { } func (o OperaSt) GetOrderStatus() proto.Status { - if o == "" { + if len(o) == 0 { return proto.Status_INVALID } if resultStatus, ok := queryOrderStatusMap[o]; ok { diff --git a/plugins/wx_cpn/go.mod b/plugins/wx_cpn/go.mod new file mode 100644 index 0000000..ddc0da8 --- /dev/null +++ b/plugins/wx_cpn/go.mod @@ -0,0 +1,30 @@ +module plugins/weixin_cpn + +go 1.21 + +require ( + codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715090446-b656721e6251 + github.com/hashicorp/go-plugin v1.6.1 + github.com/stretchr/testify v1.9.0 +) + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/envoyproxy/protoc-gen-validate v1.0.4 // indirect + github.com/fatih/color v1.7.0 // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/hashicorp/go-hclog v0.14.1 // indirect + github.com/hashicorp/yamux v0.1.1 // indirect + github.com/mattn/go-colorable v0.1.4 // indirect + github.com/mattn/go-isatty v0.0.10 // indirect + github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77 // indirect + github.com/oklog/run v1.0.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + golang.org/x/net v0.22.0 // indirect + golang.org/x/sys v0.18.0 // indirect + golang.org/x/text v0.14.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect + google.golang.org/grpc v1.64.0 // indirect + google.golang.org/protobuf v1.34.2 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/plugins/wx_cpn/go.sum b/plugins/wx_cpn/go.sum new file mode 100644 index 0000000..ab8b926 --- /dev/null +++ b/plugins/wx_cpn/go.sum @@ -0,0 +1,54 @@ +codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715090446-b656721e6251 h1:/bMt473Lxknsfs0HLAU5gXUtJRZi9U8SQyF330Xap5A= +codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715090446-b656721e6251/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= +github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= +github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= +github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/hashicorp/go-hclog v0.14.1 h1:nQcJDQwIAGnmoUWp8ubocEX40cCml/17YkF6csQLReU= +github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-plugin v1.6.1 h1:P7MR2UP6gNKGPp+y7EZw2kOiq4IR9WiqLvp0XOsVdwI= +github.com/hashicorp/go-plugin v1.6.1/go.mod h1:XPHFku2tFo3o3QKFgSYo+cghcUhw1NA1hZyMK0PWAw0= +github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= +github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= +github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= +github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= +github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77 h1:7GoSOOW2jpsfkntVKaS2rAr1TJqfcxotyaUcuxoZSzg= +github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= +golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 h1:NnYq6UN9ReLM9/Y01KWNOWyI5xQ9kbIms5GGJVwS/Yc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= +google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/plugins/wx_cpn/internal/transform.go b/plugins/wx_cpn/internal/transform.go new file mode 100644 index 0000000..c45b53d --- /dev/null +++ b/plugins/wx_cpn/internal/transform.go @@ -0,0 +1,71 @@ +package internal + +import ( + "codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin/proto" + "encoding/json" + "fmt" + "go/types" +) + +type Config struct { + AppId string `json:"app_id"` + Prk string `json:"prk"` + Npk string `json:"npk"` +} + +func transConfig(config *proto.Config) (*Config, error) { + var c Config + err := json.Unmarshal(config.Conf, &c) + if err != nil { + return nil, err + } + return &c, nil +} + +func orderReq(order *proto.OrderRequest_Order, product *proto.OrderRequest_Product) (*types.Nil, error) { + type Extra struct { + LogonId string `json:"logon_id"` + PhoneId string `json:"phone_id"` + } + var extra Extra + if order.Extra != nil { + err := json.Unmarshal(order.Extra, &extra) + if err != nil { + return nil, fmt.Errorf("order extra json unmarshal error: %v", err) + } + } + + return nil, nil +} + +func orderResp(request *proto.OrderRequest) *proto.OrderResponse { + return nil +} + +func queryReq(in *proto.QueryRequest_Order) (*types.Nil, error) { + type Extra struct { + LogonId string `json:"logon_id"` + PhoneId string `json:"phone_id"` + ActivityID string `json:"activity_id"` + } + var extra Extra + if in.Extra != nil { + err := json.Unmarshal(in.Extra, &extra) + if err != nil { + return nil, fmt.Errorf("order extra json unmarshal error: %v", err) + } + } + return nil, nil +} + +func queryResp(request *proto.QueryRequest) *proto.QueryResponse { + return nil +} + +func notifyReq(in *proto.NotifyRequest) *types.Nil { + return nil +} + +func notifyResp() *proto.NotifyResponse { + return nil +} diff --git a/plugins/wx_cpn/internal/vo/code.go b/plugins/wx_cpn/internal/vo/code.go new file mode 100644 index 0000000..637749b --- /dev/null +++ b/plugins/wx_cpn/internal/vo/code.go @@ -0,0 +1,9 @@ +package vo + +type Code string + +const CodeSuccess Code = "10000" + +func (c Code) IsSuccess() bool { + return c == CodeSuccess +} diff --git a/plugins/wx_cpn/internal/vo/constant.go b/plugins/wx_cpn/internal/vo/constant.go new file mode 100644 index 0000000..5603040 --- /dev/null +++ b/plugins/wx_cpn/internal/vo/constant.go @@ -0,0 +1,8 @@ +package vo + +const ( + Version = "1.0" + Format = "json" + SignType = "RSA2" + Charset = "UTF-8" +) diff --git a/plugins/wx_cpn/internal/vo/query_status.go b/plugins/wx_cpn/internal/vo/query_status.go new file mode 100644 index 0000000..b1b6e79 --- /dev/null +++ b/plugins/wx_cpn/internal/vo/query_status.go @@ -0,0 +1,44 @@ +package vo + +import "codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin/proto" + +type QueryStatus string + +const ( + QueryStatusInit = "INIT" + QueryStatusSuccess = "SUCCESS" + QueryStatusFailed = "FAILED" + QueryStatusPending = "PENDING" +) + +var queryStatusTextMap = map[QueryStatus]string{ + QueryStatusInit: "初始化(表示还没有完成发放)", + QueryStatusSuccess: "成功(表示发放完成)", + QueryStatusFailed: "失败(表示发放失败)", + QueryStatusPending: "挂起(表示活动流水发放出现可重试异常会重试,如果达到最大重试次数后,依然没有成功的状态)", +} + +var queryStatusMap = map[QueryStatus]proto.Status{ + QueryStatusInit: proto.Status_ING, + QueryStatusSuccess: proto.Status_SUCCESS, + QueryStatusFailed: proto.Status_FAIL, + QueryStatusPending: proto.Status_FAIL, +} + +func (o QueryStatus) GetText() string { + msg, ok := queryStatusTextMap[o] + if !ok { + return "" + } + return msg +} + +func (o QueryStatus) GetOrderStatus() proto.Status { + if o == "" { + return proto.Status_INVALID + } + if resultStatus, ok := queryStatusMap[o]; ok { + return resultStatus + } + return proto.Status_FAIL +} diff --git a/plugins/wx_cpn/internal/wx_cpn.go b/plugins/wx_cpn/internal/wx_cpn.go new file mode 100644 index 0000000..98795b7 --- /dev/null +++ b/plugins/wx_cpn/internal/wx_cpn.go @@ -0,0 +1,30 @@ +package internal + +import ( + "codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin/proto" + "context" +) + +// 插件通信信息,若不对应则会报错panic +const ( + Tag = "wx_pay_cpn" + Version = 1 + CookieKey = "wx_pay_cpn" + CookieValue = "wx_pay_cpn" +) + +type WxCpnService struct { + AppId string +} + +func (p *WxCpnService) Order(ctx context.Context, request *proto.OrderRequest) (*proto.OrderResponse, error) { + return nil, nil +} + +func (p *WxCpnService) Query(ctx context.Context, request *proto.QueryRequest) (*proto.QueryResponse, error) { + return nil, nil +} + +func (p *WxCpnService) Notify(_ context.Context, request *proto.NotifyRequest) (*proto.NotifyResponse, error) { + return nil, nil +} diff --git a/plugins/alipay_cpn/internal/alipay_cpn_test.go b/plugins/wx_cpn/internal/wx_cpn_test.go similarity index 55% rename from plugins/alipay_cpn/internal/alipay_cpn_test.go rename to plugins/wx_cpn/internal/wx_cpn_test.go index 3c5d29f..9fc2a70 100644 --- a/plugins/alipay_cpn/internal/alipay_cpn_test.go +++ b/plugins/wx_cpn/internal/wx_cpn_test.go @@ -3,25 +3,27 @@ package internal import ( "codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin/proto" "context" + "encoding/json" "fmt" "github.com/stretchr/testify/assert" "testing" ) -var server = &AlipayCpnService{} +var server = &WxCpnService{} -var config = &proto.Config{ - AppId: "2021004125622196", - AppKey: "", - BaseUri: "", - NotifyUrl: "", - Extra: []byte(`{"prk":"MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC2cF2AxAJP/cQJGPcvzJ5Tt9AQnSzpncTo0sOsge07E9WOi8zIP772lm+ar0cjX9jx8Pf1fJ0hJuzqcsSikC/ZeFWNVmmG4crnwb1NzS/3Ymb22SVKqAjUyjgUkaMQEBRSBAYSTbzwLi9ziggiSvgaIZvUnpQWStcYzhPG91aF2q968vKMd3670b0WwCWSMmWW7dezyqMVikigJCvhSOBfC9A66MciiwtATLpiHBAsRr6IZQ6o9JeH7TPwwLW45QMOXR5VG0xuNj5/8dQmhZGtkckhYEC0v2DrjKkORdfbm4XcvsBsnVhcIVcDu1YkDZHYvhH45r7fUqYfKbgUHH9dAgMBAAECggEBAJUtundxT4bDNYpO3Mk8IvbH5h2/uBrrRDkxJomn0Ckvpb+itvfDkE4oYuf0jVHyrP3hEZCtrfqOzslCwWFAT7Aewq4Iy89cUEND25yDvMYns5QDqYercVU2abcAA3s9+q+51JEg+e7XhTuP0ejgrpEHjFnGtcaoucvxrqBSXXCjJu7l/R/O4gSctTKytTrkZ2vcbaUjVSsDIHE0qtzYinpHlUz8yzxTyhbI2ZHiLiZt3bQVbfPjKiu9H1VLcg4Ty38aP6g1c+nc0aanKiJSjlFWrka2dKB8EySYzt1yqSXHtsFc5BI7lopMTXlQ3f7eZljFt+/QjoGdD3LkRLGsZM0CgYEA74fZQjMeqqGGKxRH1vHkVBQ293VcLZxMh/62VROhWR2JU+UFYmP4zjtu+jnCMAb03kXFoyEJtEShcPoJmW/X5jIR7ukQYYTmlognPOHt4j8n1LP3AxF6m1qhfCPKjX+cbFoYebJtmR4u/pGQQcz6VgsaVTmPLEvBlJaW+C2fBWsCgYEAwvuanPWxHqWhUzGRXQWBOZC4tnS0R43xmnNOPjX0py/X/PwfDvYiMbuV9qRHoHu1dXQ/IfURpOJLp/ibqhTd7TRk6TwVtpnCZ4XJaXZ4wVnIFuH6d78nbEsQODtOwC82OscXvC+foymouM+7HfjXFYh597y+6f3khPQGoTP2+FcCgYBiffWz5tlBSFGm/RvdInHEsNs5PaS9jHtboDzRFtVNk3uYZ5+jKYBxLLchZQaYQQQHMaFmxnr7CQ1pKycvVHHuUcBWALefoco/M5UOz8fFNDrol2eGd3V20/l61iy/qi1j0FgoElpGj8a7Hpe2ttZo8v/M83IPwMbElndVbUzqKQKBgQCSvNlR8JEYWFv9iRs1n1PuJ5zrKw8VnpxJuScUKHTzcU0iBfe1wcRgGyUz1dRV0WPxfceZXZ6msOtxAObdbBDMWBbtdBt/LV4hnIzEgrVEBbZQikZ94ezgUell+DQ+7Ajq2TRimpCQMWTZmPPgDYqImQn5SCGBZWKaMC/hF4NwxwKBgASRF+xP/NUxj3G3TjRHMskFTgtOvzCChZgRXRuvIEd4zEZ1Y29sPSuTHFnJPVPfMDeGmcwPPVDGpMIumRXKJAO6hC9BtnivDnqjtCh16fzoimBeBlaGgg4KWfXT+7BTAPFzlKg4diHoa4Adc4JC+r9Xh++VAMUc3zvH4LWB+Oen", -"npk":"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5sfDbw6kkHXeOSfr7RbrbkV7xHlNE8c5eXNI3ri+UCQLka9aehlnLhI2M1DkzSWFXvHuo5vHlC6set5j25nv+4AKevY1TgAPTMZQjNA3EMXinvBTZVCZnG6Cc3BN5jvAnt31NyTE9JsR5shFL9O6WTFED/WGUaM95kJfVeA1CwWkXUVV2kd1qU5KPAIHKMWsWiu9mSOBVZGd7NWwqfrZq33tiHmqYQ5LkS2JIno3qXukKm/2HIL+Ri1lw7s1c/xE6XalKPiroojK6zLLtrLa3LEGN833NWASrdGi4moYhAPHPZnhwsMr9FfUEsGSvwqdJlAbCtnIdbx3a6mV+sBRxQIDAQAB"}`), +func conf() *proto.Config { + c := &Config{ + AppId: "2021004125622196", + Prk: "", + Npk: "", + } + marshal, _ := json.Marshal(c) + return &proto.Config{Conf: marshal} } func TestOrder(t *testing.T) { request := &proto.OrderRequest{ - Config: config, + Config: conf(), Order: &proto.OrderRequest_Order{ OrderNo: "240403164049635931", Account: "", @@ -45,7 +47,7 @@ func TestOrder(t *testing.T) { func TestQuery(t *testing.T) { request := &proto.QueryRequest{ - Config: config, + Config: conf(), Order: &proto.QueryRequest_Order{ OrderNo: "240403180614988314_80", TradeNo: "", @@ -66,7 +68,7 @@ func TestQuery(t *testing.T) { func TestNotify(t *testing.T) { in := &proto.NotifyRequest{ - Config: config, + Config: conf(), Queries: []byte(`{"charset":"UTF-8","biz_content":"{"publish_amount":500,"activity_name":"\u90ae\u50a8\u6fc0\u6d3b\u793c47\u6ee1100-5","user_id":"2088532467083354","gmt_voucher_create":1720764021383,"voucher_status":"ENABLED","biz_type":"V_BATCH_PUBLISH","activity_id":"ACT373CCV02109242","voucher_id":"202407120007300235830O26E1ZD","order_id":"2024071200073024358301P7OES3"}","utc_timestamp":"1720764036512","sign":"oplbkc3Dcz7S8\/DSi+tBPDN593EINHQb1G0km7IgKyFfZpaYgjyyBm\/Ic2mHV6nyt9O\/eWJ0aEPLiR+rPJ3W\/ezPJCQbLascF6HshfdQa22holFnuO9xDcUH7IkR0hiQ5QxSJ+oJ6ZPU6+Po\/ercbQvwbUeQouPuZC+xWba6sznTEK7aMkv9sZJpbj3P4wD1HZKC50LEjKSAug7GZNv7B3wOqXA+Ta26l8cg2z8qHWAAdF6cYdgZ63uPKMOPDTT3gRj\/UnebE3Xjc62PYUsZJhdclJi5hW3CTTbubEmBW482rgNMIc6I+LRY8Nvspu\/8MkxU0bVsoxBEe1s0VqSLzA==","app_id":"2021004125622196","version":"1.1","sign_type":"RSA2","notify_id":"2024071200262140036056588190308607","msg_method":"alipay.user.voucher.dtbankcust.notify"}`), Headers: []byte(``), Body: []byte(``), diff --git a/plugins/wx_cpn/main.go b/plugins/wx_cpn/main.go new file mode 100644 index 0000000..de33996 --- /dev/null +++ b/plugins/wx_cpn/main.go @@ -0,0 +1,15 @@ +package main + +import ( + "codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin/shared" + "github.com/hashicorp/go-plugin" + "plugins/weixin_cpn/internal" +) + +func main() { + plugin.Serve(&plugin.ServeConfig{ + HandshakeConfig: shared.HandshakeConfig(internal.Version, internal.CookieKey, internal.CookieValue), + Plugins: shared.PluginSet(shared.NewPlugin(&internal.WxCpnService{}, internal.Tag)), + GRPCServer: plugin.DefaultGRPCServer, + }) +} diff --git a/plugins/zltx/go.mod b/plugins/zltx/go.mod index bfa495d..cb964aa 100644 --- a/plugins/zltx/go.mod +++ b/plugins/zltx/go.mod @@ -3,8 +3,8 @@ module plugins/zltx go 1.21 require ( - codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240705084627-668935b1d225 - github.com/carlmjohnson/requests v0.23.5 + codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715090446-b656721e6251 + github.com/carlmjohnson/requests v0.23.4 github.com/go-playground/validator/v10 v10.22.0 github.com/hashicorp/go-plugin v1.6.1 github.com/stretchr/testify v1.9.0 diff --git a/plugins/zltx/go.sum b/plugins/zltx/go.sum index d6f261c..82d77a2 100644 --- a/plugins/zltx/go.sum +++ b/plugins/zltx/go.sum @@ -1,39 +1,9 @@ -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240701062026-8d942924410e h1:1X0dk1OR8Zhf9gjZHRKpY7d/iYqX7UqMPqy8q+GxmXM= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240701062026-8d942924410e/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240701065841-5ae68878836f h1:2lKd9fMxqG4caY2VO05WqS4kmlXG0aNNM9Z++4ntdT4= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240701065841-5ae68878836f/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240701070232-7c96c21e16ac h1:SY71ZgI7jKQyREHxfe9F0FvH3E4AICh0MLrFao6oCFk= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240701070232-7c96c21e16ac/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240701084422-a0dcbe4339b0 h1:qX4F5QwDka918bxtq9D1MvEYkybXhiGvBdrVoCFjh9M= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240701084422-a0dcbe4339b0/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240701085519-f6acae1d59f9 h1:U0ZsVK8mZBDxL3Nm6Btf3tEYZqC434qgubaZwnSL/7g= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240701085519-f6acae1d59f9/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240701100526-b5800026d122 h1:9Ynv/7GOtnPJHCEBfhqRBTTiTLRI7DqTY311Nk75yes= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240701100526-b5800026d122/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240702032221-76caae8d1082 h1:hsDvu34FFZQcfAPk8EFur1aUns2Pp5J6Z1NVDX+APso= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240702032221-76caae8d1082/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240702065653-a394a33a8cc6 h1:70vW6WQF9NOF4yULIJhyFvsJCHtsTkEmaU/jlrDNAPs= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240702065653-a394a33a8cc6/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240702072559-804ec821687a h1:Tl1Sgjh/VMmqjxTyARe/h6VU6gHAITSmspknCJB/rZ4= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240702072559-804ec821687a/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240702080956-f3eb40112479 h1:Aat7dNdy3H15cyEEFahXxvverPP0e8fwKAbnNcbIjH0= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240702080956-f3eb40112479/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240702081159-1fe9b46b51fb h1:JJwh6gOHG1JZuBUAXVitO8n8dGNkgrFyOx5wC3J/e/E= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240702081159-1fe9b46b51fb/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240702090901-b1eca8243794 h1:zkRB1wJ+3oYSd0dsebRBF0qdhiXPsLg9bq7R29pTYkU= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240702090901-b1eca8243794/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240703025635-39098bff7a4c h1:JnLzT0jm8viTbNMdMuC+sVQJJnVHo9K+OZ6JouLq118= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240703025635-39098bff7a4c/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240705080935-81a7e81d5ab7 h1:NQR6k8ky3ernl76KlvWD9XKVBnjc/v7Aj6Jee6NXbkQ= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240705080935-81a7e81d5ab7/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240705081755-5f4c918d501a h1:RfDotu6vc+uJ5cLoVfVsd72LUt2v1wKV8TjzNx23eIk= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240705081755-5f4c918d501a/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240705084627-668935b1d225 h1:/qjBzApa6usFe4iT+u/3ncdGfGLg9srrhPI7FZHh7Zo= -codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240705084627-668935b1d225/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= +codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715090446-b656721e6251 h1:/bMt473Lxknsfs0HLAU5gXUtJRZi9U8SQyF330Xap5A= +codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin v0.0.0-20240715090446-b656721e6251/go.mod h1:QdW8HjHYQN8LCkFAB9e4oh7HziePCYnDXnUaKtmb8iQ= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= -github.com/carlmjohnson/requests v0.23.5 h1:NPANcAofwwSuC6SIMwlgmHry2V3pLrSqRiSBKYbNHHA= -github.com/carlmjohnson/requests v0.23.5/go.mod h1:zG9P28thdRnN61aD7iECFhH5iGGKX2jIjKQD9kqYH+o= +github.com/carlmjohnson/requests v0.23.4 h1:AxcvapfB9RPXLSyvAHk9YJoodQ43ZjzNHj6Ft3tQGdg= +github.com/carlmjohnson/requests v0.23.4/go.mod h1:Qzp6tW4DQyainPP+tGwiJTzwxvElTIKm0B191TgTtOA= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= diff --git a/plugins/zltx/internal/transform.go b/plugins/zltx/internal/transform.go index 5275bcd..98d13ce 100644 --- a/plugins/zltx/internal/transform.go +++ b/plugins/zltx/internal/transform.go @@ -7,9 +7,25 @@ import ( "time" ) -func orderReq(in *proto.OrderRequest) *po.OrderReq { +type Config struct { + AppId string `json:"app_id"` + AppKey string `json:"app_key"` + BaseUri string `json:"base_uri"` + NotifyUrl string `json:"notify_url"` +} + +func transConfig(config *proto.Config) (*Config, error) { + var c Config + err := json.Unmarshal(config.Conf, &c) + if err != nil { + return nil, err + } + return &c, nil +} + +func (c *Config) orderReq(in *proto.OrderRequest) *po.OrderReq { return &po.OrderReq{ - MerchantId: in.Config.AppId, + MerchantId: c.AppId, OutTradeNo: in.Order.OrderNo, ProductId: in.Product.ProductNo, RechargeAccount: in.Order.Account, @@ -17,7 +33,7 @@ func orderReq(in *proto.OrderRequest) *po.OrderReq { Number: in.Order.Quantity, Version: "1.0", TimeStamp: time.Now().Unix(), - NotifyUrl: in.Config.NotifyUrl, + NotifyUrl: c.NotifyUrl, } } @@ -34,9 +50,9 @@ func orderResp(request *proto.OrderRequest, resp po.OrderResp) *proto.OrderRespo } } -func queryReq(in *proto.QueryRequest) *po.QueryReq { +func (c *Config) queryReq(in *proto.QueryRequest) *po.QueryReq { return &po.QueryReq{ - MerchantId: in.Config.AppId, + MerchantId: c.AppId, OutTradeNo: in.Order.OrderNo, TimeStamp: time.Now().Unix(), Version: "1.0", diff --git a/plugins/zltx/internal/zltx.go b/plugins/zltx/internal/zltx.go index a5b64c3..04a46ea 100644 --- a/plugins/zltx/internal/zltx.go +++ b/plugins/zltx/internal/zltx.go @@ -26,13 +26,17 @@ const ( type ZltxService struct{} func (p *ZltxService) Order(ctx context.Context, request *proto.OrderRequest) (*proto.OrderResponse, error) { - uv, err := req(orderReq(request), request.Config.AppKey) + c, err := transConfig(request.Config) + if err != nil { + return nil, err + } + uv, err := req(c.orderReq(request), c.AppKey) if err != nil { return nil, err } var response po.OrderResp - err = requests.URL(request.Config.BaseUri + orderMethod).BodyForm(uv).ToJSON(&response).Fetch(ctx) + err = requests.URL(c.BaseUri + orderMethod).BodyForm(uv).ToJSON(&response).Fetch(ctx) if err != nil { return nil, fmt.Errorf("请求异常,msg:" + err.Error()) } @@ -46,13 +50,17 @@ func (p *ZltxService) Order(ctx context.Context, request *proto.OrderRequest) (* } func (p *ZltxService) Query(ctx context.Context, request *proto.QueryRequest) (*proto.QueryResponse, error) { - uv, err := req(queryReq(request), request.Config.AppKey) + c, err := transConfig(request.Config) + if err != nil { + return nil, err + } + uv, err := req(c.queryReq(request), c.AppKey) if err != nil { return nil, err } var response po.QueryResp - err = requests.URL(request.Config.BaseUri + queryMethod).BodyForm(uv).ToJSON(&response).Fetch(ctx) + err = requests.URL(c.BaseUri + queryMethod).BodyForm(uv).ToJSON(&response).Fetch(ctx) if err != nil { return nil, fmt.Errorf("请求异常,msg:" + err.Error()) } @@ -65,8 +73,12 @@ func (p *ZltxService) Query(ctx context.Context, request *proto.QueryRequest) (* } func (p *ZltxService) Notify(_ context.Context, request *proto.NotifyRequest) (*proto.NotifyResponse, error) { + c, err := transConfig(request.Config) + if err != nil { + return nil, err + } var poReq po.Notify - err := json.Unmarshal(request.Body, &poReq) + err = json.Unmarshal(request.Body, &poReq) if err != nil { return nil, fmt.Errorf("解析异常,msg:" + err.Error()) } @@ -75,7 +87,7 @@ func (p *ZltxService) Notify(_ context.Context, request *proto.NotifyRequest) (* if err != nil { return nil, err } - if !verify(poReq, request.Config.AppKey) { + if !verify(poReq, c.AppKey) { return nil, errors.New("验签不通过") } diff --git a/plugins/zltx/internal/zltx_test.go b/plugins/zltx/internal/zltx_test.go index 67ea6ff..00357fc 100644 --- a/plugins/zltx/internal/zltx_test.go +++ b/plugins/zltx/internal/zltx_test.go @@ -3,28 +3,28 @@ package internal import ( "codeup.aliyun.com/6552e56cc3b2728a4557fc18/plugin/proto" "context" + "encoding/json" "fmt" "github.com/stretchr/testify/assert" "testing" ) -var appKey = "8db16e8cc8363ed4eb4c14f9520bcc32" -var appId = "23329" -var baseUri = "http://test.openapi.1688sup.cn" -var notifyUrl = "http://test.openapi.1688sup.cn" - var zltx = &ZltxService{} -var config = &proto.Config{ - AppId: appId, - AppKey: appKey, - BaseUri: baseUri, - NotifyUrl: notifyUrl, +func conf() []byte { + c := &Config{ + AppId: "23329", + AppKey: "8db16e8cc8363ed4eb4c14f9520bcc32", + BaseUri: "http://test.openapi.1688sup.cn", + NotifyUrl: "http://test.openapi.1688sup.cn", + } + marshal, _ := json.Marshal(c) + return marshal } func TestOrder(t *testing.T) { request := &proto.OrderRequest{ - Config: config, + Config: &proto.Config{Conf: conf()}, Order: &proto.OrderRequest_Order{ OrderNo: "test_zltx_4", Account: "18666666666", @@ -48,7 +48,7 @@ func TestOrder(t *testing.T) { func TestQuery(t *testing.T) { request := &proto.QueryRequest{ - Config: config, + Config: &proto.Config{Conf: conf()}, Order: &proto.QueryRequest_Order{ OrderNo: "test_zltx_4", TradeNo: "", @@ -69,6 +69,7 @@ func TestQuery(t *testing.T) { func TestNotify(t *testing.T) { in := &proto.NotifyRequest{ + Config: &proto.Config{Conf: conf()}, Queries: nil, Headers: nil, Body: []byte(`{"merchantId":10, "outTradeNo":"123", "rechargeAccount":"1866666666", "status":"01", "sign":"sign"}`),