51 lines
1.3 KiB
Go
51 lines
1.3 KiB
Go
|
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()
|
|||
|
}
|