解决微信支付定时更新证书间隔问题

package com.wechat.pay.contrib.apache.httpclient.auth;

import com.wechat.pay.contrib.apache.httpclient.Credentials;

import com.wechat.pay.contrib.apache.httpclient.cert.CertManagerSingleton;

import java.security.cert.X509Certificate;

import java.util.concurrent.locks.ReentrantLock;

/**

  • 在原有CertificatesVerifier基础上,增加定时更新证书功能(默认1小时)

  • @author lianup

  • @since 0.3.0

    */

    public class ScheduledUpdateCertificatesVerifier implements Verifier {

    protected static final int UPDATE_INTERVAL_MINUTE = 60;

    private final ReentrantLock lock;

    private final CertManagerSingleton certManagerSingleton;

    private final CertificatesVerifier verifier;

    public ScheduledUpdateCertificatesVerifier(Credentials credentials, byte[] apiv3Key) {

    lock = new ReentrantLock();

    certManagerSingleton = CertManagerSingleton.getInstance();

    initCertManager(credentials, apiv3Key);

    verifier = new CertificatesVerifier(certManagerSingleton.getCertificates());

    }

    public void initCertManager(Credentials credentials, byte[] apiv3Key) {

    if (credentials == null || apiv3Key.length == 0) {

    throw new IllegalArgumentException("credentials或apiv3Key为空");

    }

    certManagerSingleton.init(credentials, apiv3Key, UPDATE_INTERVAL_MINUTE);

    }

    @Override

    public X509Certificate getLatestCertificate() {

    return certManagerSingleton.getLatestCertificate();

    }

    @Override

    public boolean verify(String serialNumber, byte[] message, String signature) {

    if (serialNumber.isEmpty() || message.length == 0 || signature.isEmpty()) {

    throw new IllegalArgumentException("serialNumber或message或signature为空");

    }

    if (lock.tryLock()) {

    try {

    verifier.updateCertificates(certManagerSingleton.getCertificates());

    } finally {

    lock.unlock();

    }

    }

    return verifier.verify(serialNumber, message, signature);

    }

    /**

    • 该方法已废弃,请勿使用
    • @return null
      */
      @Deprecated
      @Override
      public X509Certificate getValidCertificate() {
      return null;
      }

    /**

    • 停止定时更新,停止后无法再重新启动
      */
      public void stopScheduledUpdate() {
      certManagerSingleton.close();
      }

}

相关推荐
二十十十十十2 天前
微信点餐小程序—美食物
微信·小程序
m0_6855350812 天前
如何实现财务自由
微信·新浪微博·光学·光学设计·光学工程
书虫AI12 天前
登顶生图榜前三!FLUX.1 Kontext 为什么把 PS 都逼急了?
微信
陈思杰系统思考Jason14 天前
系统思考VS心智模式
百度·微信·微信公众平台·新浪微博·微信开放平台
狂团商城小师妹14 天前
设备巡检系统小程序ThinkPHP+UniApp
微信·微信小程序·小程序·uni-app·微信公众平台
程序员君常笑14 天前
rent8_wechat-最常用出租屋管理系统-微信小程序
微信·微信小程序·小程序
未来之窗软件服务15 天前
js调用微信支付 第二步 获取access_token ——仙盟创梦IDE
开发语言·javascript·微信·微信支付·仙盟创梦ide·东方仙盟
岩苍美津未16 天前
H5项目在微信公众号中如何本地调试微信sdk
微信·微信小程序
云起SAAS16 天前
猜数字小游戏微信流量主小程序开源
微信·小程序·猜数字小游戏微信流量主小
云起SAAS17 天前
经典俄罗斯方块微信小游戏流量主小程序开源
微信·小程序·经典俄罗斯方块微信小游戏流