Commit 4018801a authored by wangp's avatar wangp

notify验签成功

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