调用“下载平台证书接口”,返回:SIGN_ERROR, Authorization不合法
请根据以下几点排查:
1、请检查待签名串的参数的格式是否和文档中要求的严格一致。
2、请注意文档中参数末尾的换行符要求,如body为空则需要使用两个\n换行符。
为什么境外机构号重置证书后,旧的证书依然可以调用v2接口使用?
境外机构号重置证书后,旧的证书依然可以调用v2接口使用的原因:
1、存在平滑过渡期,并非立即失效。
2、自签换CA有14天,CA换CA48小时。
支付API证书升级工具,在Mac下使用官方的生成工具,未在指定目录找到证书文件是什么原因?
目前只有windows版本支持,建议在window7以上系统使用。
平台证书获取并解密后,进行敏感字段加密时,java代码提示invalid key format
这个是在读取证书获取公钥时有问题,需要检查使用的类在新版本jdk中是否deprecated的,如jdk9中是deprecated的。
如何查看证书序列号?
登录商户平台【account settings】->【API security】->【API certificate】,可查看商户API证书序列号。
商户API证书和微信支付平台证书均可以使用第三方的证书,查看证书内容。或者使用openssl命令行工具查看证书序列号。
1$ openssl x509 -in 1900009191_20180326_cert.pem -noout -serial
2serial=1DDE55AD98ED71D6EDD4A4A16996DE7B47773A8C
3
如何在程序中加载证书?
推荐使用微信支付提供的SDK。你也可以查看下列编程语言的示例代码。
JAVA
1/**
2 * 获取证书。
3 *
4 * @param filename 证书文件路径 (required)
5 * @return X509证书
6 */
7public static X509Certificate getCertificate(String filename) throws IOException {
8 InputStream fis = new FileInputStream(filename);
9 BufferedInputStream bis = new BufferedInputStream(fis);
10
11 try {
12 CertificateFactory cf = CertificateFactory.getInstance("X509");
13 X509Certificate cert = (X509Certificate) cf.generateCertificate(bis);
14 cert.checkValidity();
15 return cert;
16 } catch (CertificateExpiredException e) {
17 throw new RuntimeException("证书已过期", e);
18 } catch (CertificateNotYetValidException e) {
19 throw new RuntimeException("证书尚未生效", e);
20 } catch (CertificateException e) {
21 throw new RuntimeException("无效的证书文件", e);
22 } finally {
23 bis.close();
24 }
25}
26
PHP
1
2/**
3* Read certificate from file
4*
5* @param string $filepath PEM encoded X.509 certificate file path
6*
7* @return resource|bool X.509 certificate resource identifier on success or FALSE on failure
8*/
9public static function getCertificate($filepath) {
10 return openssl_x509_read(file_get_contents($filepath));}
11
为什么平台证书只提供API下载?
主要是为了确保在更换平台证书时,不影响商户使用微信支付的各种功能。以下场景中,微信支付会更换平台证书:
证书到期后,必须更换。(目前是五年)
证书到期前,例行更换。(每年一次)
为什么平台证书下载接口返回的平台证书需要加密?
主要是为了防御“中间人攻击”。
由于验证应答报文的签名和加密敏感信息时,必须使用到平台证书。平台证书是商户认证微信支付身份时最关键的要素。因此,要通过签名和加密等多重机制来保障商户获取到的平台证书没有被“中间人”篡改。
商户在调用下载接口获取平台证书时,应进行以下四步操作,以保证证书的真实性:
使用与平台共享的对称密钥,解密报文中的证书(必须)
通过解密得到的证书,来验证报文的签名(必须)
使用证书查看工具,核对证书的颁发者为Tenpay.com Root CA。(强烈推荐)
通过证书信任链验证平台证书(强烈推荐)
如何通过证书信任链验证平台证书?
下面介绍如何使用openssl工具,通过证书信任链验证平台证书。
首先,从微信支付商户平台下载平台证书信任链 CertTrustChain.p7b ,并将它转换为pem证书格式。
1openssl pkcs7 -print_certs -in CertTrustChain.p7b -inform der -out CertTrustChain.pem
2
然后,-CAfile file指定受信任的证书,验证下载的平台证书
1openssl verify -verbose -CAfile ./CertTrustChain.pem ./WeChatPayPlatform.pem
2
为什么报错“HTTP header缺少微信支付平台证书序列号(Wechatpay-Serial)”?
商户上送敏感信息时使用了微信支付平台公钥加密。为了能使用正确的密钥解密,微信支付要求商户在请求的HTTP头部中包括证书序列号 ,以声明加密所用的密钥对和平台证书。详见的说明。
免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。