package util import ( "crypto/hmac" "crypto/sha256" "encoding/base64" "strings" ) // PaySign pay 收款中枢双向 HMAC 签名(契约 ~/code/pay-contract §签名,与 pay 侧 util.HMACSign 一致): // sign = base64( HMAC_SHA256( secret, biz_system + "\n" + timestamp + "\n" + nonce + "\n" + rawBody ) ) func PaySign(secret string, parts ...string) string { m := hmac.New(sha256.New, []byte(secret)) m.Write([]byte(strings.Join(parts, "\n"))) return base64.StdEncoding.EncodeToString(m.Sum(nil)) } // PaySignVerify 常量时间比较验签。 func PaySignVerify(secret, got string, parts ...string) bool { return hmac.Equal([]byte(PaySign(secret, parts...)), []byte(got)) }