|
@@ -9,6 +9,7 @@ import (
|
|
|
"crypto/sha256"
|
|
"crypto/sha256"
|
|
|
"crypto/x509"
|
|
"crypto/x509"
|
|
|
"encoding/base64"
|
|
"encoding/base64"
|
|
|
|
|
+ "encoding/hex"
|
|
|
"encoding/json"
|
|
"encoding/json"
|
|
|
"encoding/pem"
|
|
"encoding/pem"
|
|
|
"errors"
|
|
"errors"
|
|
@@ -197,7 +198,9 @@ func (w *WechatChannel) authorizationHeader(method, path string, body []byte) (s
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
return "", fmt.Errorf("微信支付签名失败: %w", err)
|
|
return "", fmt.Errorf("微信支付签名失败: %w", err)
|
|
|
}
|
|
}
|
|
|
- return fmt.Sprintf(`WECHATPAY2-SHA256withRSA mchid="%s",nonce_str="%s",signature="%s",timestamp="%s",serial_no="%s"`,
|
|
|
|
|
|
|
+ // 注意:新商户(微信支付公钥模式)网关要求的认证类型是 WECHATPAY2-SHA256-RSA2048,
|
|
|
|
|
+ // 旧文档中的 WECHATPAY2-SHA256withRSA 会被拒绝并报"认证类型不正确"。
|
|
|
|
|
+ return fmt.Sprintf(`WECHATPAY2-SHA256-RSA2048 mchid="%s",nonce_str="%s",signature="%s",timestamp="%s",serial_no="%s"`,
|
|
|
w.mchID, nonce, base64.StdEncoding.EncodeToString(signature), timestamp, w.serialNo), nil
|
|
w.mchID, nonce, base64.StdEncoding.EncodeToString(signature), timestamp, w.serialNo), nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -206,7 +209,7 @@ func randomNonce() (string, error) {
|
|
|
if _, err := rand.Read(buf); err != nil {
|
|
if _, err := rand.Read(buf); err != nil {
|
|
|
return "", err
|
|
return "", err
|
|
|
}
|
|
}
|
|
|
- return base64.RawURLEncoding.EncodeToString(buf), nil
|
|
|
|
|
|
|
+ return strings.ToUpper(hex.EncodeToString(buf)), nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// yuanToFen 金额(元)转分,超出两位小数视为非法。
|
|
// yuanToFen 金额(元)转分,超出两位小数视为非法。
|