diff --git a/business/partner/purchase/jx/localjx/tonglianpay.go b/business/partner/purchase/jx/localjx/tonglianpay.go index af97a053e..4ef385785 100644 --- a/business/partner/purchase/jx/localjx/tonglianpay.go +++ b/business/partner/purchase/jx/localjx/tonglianpay.go @@ -1,12 +1,12 @@ package localjx import ( - "crypto/md5" "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/json" - "io/ioutil" + "encoding/pem" + "os" "time" "git.rosy.net.cn/jx-callback/globals" @@ -47,19 +47,20 @@ func pay4OrderByTL(ctx *jxcontext.Context, order *model.GoodsOrder, vendorPayTyp result, err := api.TLpayAPI.CreateUnitorderOrder(param) result2 := &tonglianpayapi.PayInfo{} json.Unmarshal([]byte(result.PayInfo), &result2) - file, err := ioutil.ReadFile("conf/rsa_key.pem") - if err != nil { - return nil, err - } - prk, err := x509.ParsePKCS1PrivateKey(file) - if err != nil { - return nil, err - } - paySign, err := rsa.DecryptOAEP(md5.New(), rand.Reader, prk, []byte(result2.PaySign), nil) - if err != nil { - return nil, err - } - result2.PaySign = string(paySign) + plainText, err := RSADecrypt([]byte(result2.PaySign)) + // file, err := ioutil.ReadFile("conf/rsa_key.pem") + // if err != nil { + // return nil, err + // } + // prk, err := x509.ParsePKCS1PrivateKey(file) + // if err != nil { + // return nil, err + // } + // paySign, err := rsa.DecryptOAEP(md5.New(), rand.Reader, prk, []byte(result2.PaySign), nil) + // if err != nil { + // return nil, err + // } + result2.PaySign = string(plainText) str, err := json.Marshal(result2) result.PayInfo = string(str) if err == nil { @@ -82,6 +83,29 @@ func pay4OrderByTL(ctx *jxcontext.Context, order *model.GoodsOrder, vendorPayTyp return orderPay, err } +func RSADecrypt(pub []byte) (plainText []byte, err error) { + //打开文件 + file, err := os.Open("conf/rsa_key.pem") + if err != nil { + panic(err) + } + defer file.Close() + //获取文件内容 + info, _ := file.Stat() + buf := make([]byte, info.Size()) + file.Read(buf) + //pem解码 + block, _ := pem.Decode(buf) + //X509解码 + privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes) + if err != nil { + panic(err) + } + //对密文进行解密 + plainText, err = rsa.DecryptPKCS1v15(rand.Reader, privateKey, pub) + return plainText, err +} + func OnTLPayCallback(msg *wxpayapi.CallbackMsg) (err error) { globals.SugarLogger.Debugf("OnTLPayCallback msg:%s", utils.Format4Output(msg, true)) switch msg.MsgType {