Login expired. Please log in again.

Feedback

0/300

Feedback

Submitted successfully

ok

Feedback

Network exception, please try again later

ok

证书FAQ

调用“下载平台证书接口”,返回: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命令行工具查看证书序列号。

$ openssl x509 -in 1900009191_20180326_cert.pem -noout -serial
serial=1DDE55AD98ED71D6EDD4A4A16996DE7B47773A8C
如何在程序中加载证书?

推荐使用微信支付提供的SDK。你也可以查看下列编程语言的示例代码。

/**
 * 获取证书。
 *
 * @param filename 证书文件路径  (required)
 * @return X509证书
 */
public static X509Certificate getCertificate(String filename) throws IOException {
	InputStream fis = new FileInputStream(filename);
	BufferedInputStream bis = new BufferedInputStream(fis);

	try {
		CertificateFactory cf = CertificateFactory.getInstance("X509");
		X509Certificate cert = (X509Certificate) cf.generateCertificate(bis);
		cert.checkValidity();
		return cert;
	} catch (CertificateExpiredException e) {
		throw new RuntimeException("证书已过期", e);
	} catch (CertificateNotYetValidException e) {
		throw new RuntimeException("证书尚未生效", e);
	} catch (CertificateException e) {
		throw new RuntimeException("无效的证书文件", e);
	} finally {
		bis.close();
	}
}
 
/**
* Read certificate from file
*
* @param string    $filepath     PEM encoded X.509 certificate file path
* 
* @return resource|bool  X.509 certificate resource identifier on success or FALSE on failure
*/
public static function getCertificate($filepath) {
    return openssl_x509_read(file_get_contents($filepath));}
为什么平台证书只提供API下载?

主要是为了确保在更换平台证书时,不影响商户使用微信支付的各种功能。以下场景中,微信支付会更换平台证书:

1. 证书到期后,必须更换。(目前是五年)

2. 证书到期前,例行更换。(每年一次)

为什么平台证书下载接口返回的平台证书需要加密?

主要是为了防御“中间人攻击”。

由于验证应答报文的签名和加密敏感信息时,必须使用到平台证书。平台证书是商户认证微信支付身份时最关键的要素。因此,要通过签名和加密等多重机制来保障商户获取到的平台证书没有被“中间人”篡改。

商户在调用下载接口获取平台证书时,应进行以下四步操作,以保证证书的真实性:

1. 使用与平台共享的对称密钥,解密报文中的证书(必须)

2. 通过解密得到的证书,来验证报文的签名(必须)

3. 使用证书查看工具,核对证书的颁发者为Tenpay.com Root CA。(强烈推荐)

4. 通过证书信任链验证平台证书(强烈推荐)

如何通过证书信任链验证平台证书?

下面介绍如何使用openssl工具,通过证书信任链验证平台证书。

首先,从微信支付商户平台下载平台证书信任链 CertTrustChain.p7b ,并将它转换为pem证书格式。

openssl pkcs7 -print_certs -in CertTrustChain.p7b -inform der -out CertTrustChain.pem

然后,-CAfile file指定受信任的证书,验证下载的平台证书

openssl verify -verbose -CAfile ./CertTrustChain.pem ./WeChatPayPlatform.pem 
为什么报错“HTTP header缺少微信支付平台证书序列号(Wechatpay-Serial)”?

商户上送敏感信息时使用了微信支付平台公钥加密。为了能使用正确的密钥解密,微信支付要求商户在请求的HTTP头部中包括证书序列号 ,以声明加密所用的密钥对和平台证书。详见私钥和证书的说明。


About  WeChat  Pay

Powered By Tencent & Tenpay Copyright©

2005-2024 Tenpay All Rights Reserved.

Contact Us
Wechat Pay Global

WeChat Pay Global

置顶