package cmd import ( "bytes" "encoding/base64" "encoding/json" "fmt" "log" "os" "os/exec" "path/filepath" "qteam/app/utils/postbank/smtypes" ) func DeCrypt(merchantId string, priKey string, sopPublicKey string, input *smtypes.RequestData) ([]byte, error) { // 解密逻辑 requestJson, err := json.Marshal(input) if err != nil { return nil, fmt.Errorf("请求体json编码失败:%s", err) } path, err := smv2() if err != nil { return nil, fmt.Errorf("解码获取当前目录失败:%s", err) } cmd := fmt.Sprintf("%s postbank decrypt --merchantId=\"%s\" --priKey=\"%s\" --sopPublicKey=\"%s\" --input=\"%s\" %s 2>&1", path, merchantId, priKey, sopPublicKey, base64.StdEncoding.EncodeToString(requestJson), "--isRequest") // 返回解密后的数据 return toExec(cmd), nil } func smv2() (string, error) { path, err := os.Getwd() if err != nil { return "", err } return fmt.Sprintf("%s/%s/smv2", filepath.Dir(filepath.Dir(path)), "untils/sm"), nil } func toExec(cmdString string) []byte { var stdoutBuf, stderrBuf bytes.Buffer cmd := exec.Command(cmdString) cmd.Stdout = &stdoutBuf cmd.Stderr = &stderrBuf err := cmd.Run() if err != nil { log.Fatalf("cmd.Run() failed with %s\n", err) } fmt.Printf("stdout: %s\nstderr: %s\n", stdoutBuf.String(), stderrBuf.String()) return stdoutBuf.Bytes() }