Files
core/scripts/quick-wechat-cert.sh

161 lines
5.6 KiB
Bash
Executable File

#!/bin/bash
# 微信支付证书快速配置脚本
# 使用项目现有配置和RSAAutoCertificateConfig
# 作者: 科技小王子
set -e
# 颜色定义
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m'
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
echo "🚀 微信支付证书自动配置工具"
echo "================================"
# 使用您提供的参数
MERCHANT_ID="1723321338"
API_V3_KEY="0kF5OlPr482EZwtn9zGufUcqa7ovgxRL"
MERCHANT_SERIAL_NUMBER="2B933F7C35014A1C363642623E4A62364B34C4EB"
PRIVATE_KEY_PATH="src/main/resources/certs/dev/wechat/apiclient_key.pem"
log_info "使用以下配置:"
log_info "商户号: $MERCHANT_ID"
log_info "证书序列号: $MERCHANT_SERIAL_NUMBER"
log_info "私钥路径: $PRIVATE_KEY_PATH"
# 检查私钥文件
if [[ ! -f "$PRIVATE_KEY_PATH" ]]; then
log_warning "私钥文件不存在: $PRIVATE_KEY_PATH"
exit 1
fi
log_success "私钥文件存在: $PRIVATE_KEY_PATH"
# 创建简单的Java测试程序
cat > WechatAutoTest.java << 'EOF'
import com.wechat.pay.java.core.Config;
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
public class WechatAutoTest {
public static void main(String[] args) {
String merchantId = args[0];
String privateKeyPath = args[1];
String serialNumber = args[2];
String apiV3Key = args[3];
try {
System.out.println("🔧 正在创建 RSAAutoCertificateConfig...");
Config config = new RSAAutoCertificateConfig.Builder()
.merchantId(merchantId)
.privateKeyFromPath(privateKeyPath)
.merchantSerialNumber(serialNumber)
.apiV3Key(apiV3Key)
.build();
System.out.println("✅ 微信支付证书配置成功!");
System.out.println("");
System.out.println("📋 配置信息:");
System.out.println(" 商户号: " + merchantId);
System.out.println(" 证书序列号: " + serialNumber);
System.out.println(" 私钥路径: " + privateKeyPath);
System.out.println("");
System.out.println("🎉 RSAAutoCertificateConfig 已成功初始化");
System.out.println("📥 系统将自动下载微信支付平台证书");
System.out.println("🔄 证书过期时将自动更新");
System.out.println("🚫 无需手动下载 wechatpay_cert.pem");
System.out.println("");
System.out.println("✨ 您的微信支付证书配置已完成!");
} catch (Exception e) {
System.err.println("❌ 证书配置失败: " + e.getMessage());
System.err.println("");
System.err.println("🔍 可能的原因:");
System.err.println("1. 商户平台未开启API安全功能");
System.err.println("2. APIv3密钥不正确");
System.err.println("3. 证书序列号不匹配");
System.err.println("4. 网络连接问题");
System.err.println("");
System.err.println("💡 解决方案:");
System.err.println("1. 登录微信商户平台 -> 账户中心 -> API安全");
System.err.println("2. 确认已申请使用微信支付公钥");
System.err.println("3. 检查APIv3密钥和证书序列号");
e.printStackTrace();
System.exit(1);
}
}
}
EOF
log_info "创建测试程序..."
# 构建classpath
CLASSPATH="target/classes"
if [[ -f "pom.xml" ]]; then
log_info "编译项目..."
mvn compile -q > /dev/null 2>&1 || true
# 获取依赖classpath
DEPS_CP=$(mvn dependency:build-classpath -q -Dmdep.outputFile=/dev/stdout 2>/dev/null || echo "")
if [[ -n "$DEPS_CP" ]]; then
CLASSPATH="$CLASSPATH:$DEPS_CP"
fi
fi
# 编译测试程序
log_info "编译测试程序..."
if javac -cp "$CLASSPATH" WechatAutoTest.java 2>/dev/null; then
log_success "编译成功"
else
log_warning "编译失败,但这不影响使用 RSAAutoCertificateConfig"
fi
# 运行测试
log_info "测试证书自动配置..."
echo ""
if java -cp "$CLASSPATH:." WechatAutoTest "$MERCHANT_ID" "$PRIVATE_KEY_PATH" "$MERCHANT_SERIAL_NUMBER" "$API_V3_KEY" 2>/dev/null; then
echo ""
log_success "🎯 证书自动配置测试成功!"
else
echo ""
log_warning "⚠️ 测试失败,但您仍可以在应用中使用 RSAAutoCertificateConfig"
echo ""
echo "📝 在您的代码中使用以下配置:"
echo ""
echo "Config config = new RSAAutoCertificateConfig.Builder()"
echo " .merchantId(\"$MERCHANT_ID\")"
echo " .privateKeyFromPath(\"$PRIVATE_KEY_PATH\")"
echo " .merchantSerialNumber(\"$MERCHANT_SERIAL_NUMBER\")"
echo " .apiV3Key(\"$API_V3_KEY\")"
echo " .build();"
echo ""
echo "🔧 如果仍有问题,请检查:"
echo "1. 微信商户平台是否已开启API安全"
echo "2. 是否已申请使用微信支付公钥"
echo "3. 网络连接是否正常"
fi
# 清理临时文件
rm -f WechatAutoTest.java WechatAutoTest.class
echo ""
log_info "🎉 脚本执行完成!"
echo ""
echo "💡 重要提示:"
echo "1. RSAAutoCertificateConfig 是官方推荐的证书管理方式"
echo "2. 它会自动处理平台证书的下载和更新"
echo "3. 您无需再手动下载 wechatpay_cert.pem 文件"
echo "4. 证书过期时会自动更新,无需人工干预"
echo ""
echo "📚 更多信息请参考:"
echo " https://pay.weixin.qq.com/doc/v3/merchant/4012153196"