Commit 4018801a authored by wangp's avatar wangp

notify验签成功

parent 630d73a7
......@@ -4,15 +4,15 @@ import (
"crypto"
"crypto/rsa"
"crypto/sha1"
"crypto/sha256"
"crypto/x509"
"encoding/base64"
"encoding/pem"
"errors"
"fmt"
"github.com/gin-gonic/gin"
"io/ioutil"
"system_pay/controller/base"
"system_pay/models"
"system_pay/repository/pay"
)
// 卡拉卡统一支付回调
......@@ -46,7 +46,23 @@ func (l *PayController) WxNotice(c *gin.Context) {
//fmt.Println(ph2)
//验证签名
//err := test_ver2()
err := test_ver2()
if err != nil {
fmt.Println("verySignByPublicKey err: ", err)
response := new(base.ResponseDataWxNotice)
response.Code = "FAIL"
response.Message = "验证签名失败"
base.ResponseWxNotice(c, response)
return
}
fmt.Println("test_ver ok")
response := new(base.ResponseDataWxNotice)
response.Code = "SUCCESS"
response.Message = "执行成功"
base.ResponseWxNotice(c, response)
return
//_, err = testCert(c)
//if err != nil {
// fmt.Println("verySignByPublicKey err: ", err)
// response := new(base.ResponseDataWxNotice)
......@@ -55,36 +71,23 @@ func (l *PayController) WxNotice(c *gin.Context) {
// base.ResponseWxNotice(c, response)
// return
//}
//fmt.Println("test_ver ok")
//base.ResponseWxNotice(c, nil)
//return
//_, err = testCert(c)
//
//ph := new(models.WxNoticeInput)
//err := c.ShouldBindJSON(ph)
//if err != nil {
// fmt.Println("verySignByPublicKey err: ", err)
// response := new(base.ResponseDataWxNotice)
// response.Code = "FAIL"
// response.Message = "验证签名失败"
// response.Message = "执行失败2"
// base.ResponseWxNotice(c, response)
// return
//}
//fmt.Println(ph)
//
ph := new(models.WxNoticeInput)
err := c.ShouldBindJSON(ph)
if err != nil {
response := new(base.ResponseDataWxNotice)
response.Code = "FAIL"
response.Message = "执行失败2"
base.ResponseWxNotice(c, response)
return
}
fmt.Println(ph)
// 拉卡拉统一支付微信回调
response, err := pay.WxNotice(ph)
fmt.Println("拉卡拉微信回调end")
base.ResponseWxNotice(c, response)
//// 拉卡拉统一支付微信回调
//response, err := pay.WxNotice(ph)
//
//fmt.Println("拉卡拉微信回调end")
//base.ResponseWxNotice(c, response)
}
func test_ver2() error {
......@@ -125,19 +128,30 @@ func test_ver2() error {
//证书 => 公钥
publicKey := cert.PublicKey.(*rsa.PublicKey)
sign, err := base64.StdEncoding.DecodeString(signature)
bytes, err := base64.StdEncoding.DecodeString(signature)
if err != nil {
return err
}
hash := sha1.New()
hash.Write([]byte(preSignData))
//err = RsaVerySignWithSha1Base64(originalData, signData, publicKey)
err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA1, hash.Sum(nil), sign)
hashed := sha256.Sum256([]byte(preSignData))
err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, hashed[:], bytes)
if err != nil {
fmt.Println("failed to VerifyPKCS1v15: " + err.Error())
return err
}
//sign, err := base64.StdEncoding.DecodeString(signature)
//if err != nil {
// return err
//}
//hash := sha1.New()
//hash.Write([]byte(preSignData))
////err = RsaVerySignWithSha1Base64(originalData, signData, publicKey)
//err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA1, hash.Sum(nil), sign)
//if err != nil {
// fmt.Println("failed to VerifyPKCS1v15: " + err.Error())
// return err
//}
//opts := x509.VerifyOptions{
// //DNSName: "mail.google.com",
// //Roots: roots,
......@@ -167,21 +181,34 @@ func RsaVerySignWithSha1Base64(originalData, signData, pubKey string) error{
return rsa.VerifyPKCS1v15(pub.(*rsa.PublicKey), crypto.SHA1, hash.Sum(nil), sign)
}
//func VerifyWithPublicKey(signData string, srcData []byte, publicKey string) error {
// defer GetTimer("公钥验签")()
// key, err := decodePublicKey(publicKey)
// if err != nil {
// return err
// }
//
// bytes, err := base64.StdEncoding.DecodeString(signData)
// if err != nil {
// return err
// }
// hashed := sha256.Sum256(srcData)
// err = rsa.VerifyPKCS1v15(key, crypto.SHA256, hashed[:], bytes)
// if err != nil {
// return err
// }
// return nil
//}
\ No newline at end of file
func decodePublicKey(publicKey string) (*rsa.PublicKey, error) {
block, _ := pem.Decode([]byte(publicKey))
if block == nil {
return nil, errors.New("failed to decode PEM block containing private key")
}
pub,err := x509.ParsePKIXPublicKey(block.Bytes)
if err != nil {
return nil, err
}
return pub.(*rsa.PublicKey), err
}
// VerifyWithPublicKey 公钥验签
func VerifyWithPublicKey(signData string, srcData []byte, publicKey string) error {
//defer GetTimer("公钥验签")()
key, err := decodePublicKey(publicKey)
if err != nil {
return err
}
bytes, err := base64.StdEncoding.DecodeString(signData)
if err != nil {
return err
}
hashed := sha256.Sum256(srcData)
err = rsa.VerifyPKCS1v15(key, crypto.SHA256, hashed[:], bytes)
if err != nil {
return err
}
return nil
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment