今天接google pay的支付,但是找了好多都是PHP或java的,并没找到go版本的。而官方文档说明也不详细。
最终参考一些代码之后完成go版本的验证,以下是代码实现
const publicKey = "xxxx"
func VerifyGoogleSign(data, sign string) (bool, error) {
decodePublic, err := base64.StdEncoding.DecodeString(publicKey)
if err != nil {
return false, err
}
pubInterface, err := x509.ParsePKIXPublicKey(decodePublic)
if err != nil {
return false, err
}
pub := pubInterface.(*rsa.PublicKey)
decodeSign, err := base64.StdEncoding.DecodeString(sign)
if err != nil {
return false, err
}
sh1 := sha1.New()
sh1.Write([]byte(data))
hashData := sh1.Sum(nil)
result := rsa.VerifyPKCS1v15(pub, crypto.SHA1, hashData, decodeSign)
if result != nil {
return false, err
}
return true, nil
}
这里只实现了一种验证方式,另外一种比较麻烦。就不实现了。