env('PAY_MOCK', false), // 支付 SDK 日志开关。 // 不要跟 APP_DEBUG 绑定:生产一旦误开 debug,会把明文请求/签名细节写进 runtime/log/pay.log。 // 需要排查时显式 PAY_LOG=true 打开,查完务必关掉。 'log_enable' => (bool) env('PAY_LOG', false), 'log_level' => (string) env('PAY_LOG_LEVEL', 'debug'), // 支付宝(Yansongda Pay v3 —— 仅支持「证书模式」,普通公钥模式不再被识别) 'alipay' => [ // mode 必须是【整数】:0=正式 1=沙箱 2=服务商(Yansongda\Pay\Pay::MODE_*) 'mode' => (int) env('PAY_ALIPAY_MODE', 0), 'app_id' => env('PAY_ALIPAY_APP_ID', ''), 'app_secret_cert' => $normalizePrivateKey((string) env('PAY_ALIPAY_APP_SECRET_CERT', '')), 'app_public_cert_path' => $resolveCertPath((string) env('PAY_ALIPAY_APP_PUBLIC_CERT_PATH', '')), 'alipay_public_cert_path' => $resolveCertPath((string) env('PAY_ALIPAY_PUBLIC_CERT_PATH', '')), 'alipay_root_cert_path' => $resolveCertPath((string) env('PAY_ALIPAY_ROOT_CERT_PATH', '')), 'return_url' => '', 'notify_url' => '', ], // 微信支付(v3)。注:微信早已下线官方沙箱,mode 留 0 即可。 'wechat' => [ 'mode' => (int) env('PAY_WECHAT_MODE', 0), 'mch_id' => env('PAY_WECHAT_MCH_ID', ''), // 直连模式填公众号/小程序/移动应用的 appid。 // SDK 按场景取不同的键(见 get_wechat_type_key):mp → mp_app_id、mini → mini_app_id、app → app_id, // 未单独配置时统一回落到 PAY_WECHAT_APP_ID,一个商户只接一种场景时配一个就够。 'app_id' => env('PAY_WECHAT_APP_ID', ''), 'mp_app_id' => env('PAY_WECHAT_MP_APP_ID', env('PAY_WECHAT_APP_ID', '')), 'mini_app_id' => env('PAY_WECHAT_MINI_APP_ID', env('PAY_WECHAT_APP_ID', '')), // APIv3 密钥(微信商户平台 → API 安全 → 设置 APIv3 密钥) 'mch_secret_key' => env('PAY_WECHAT_SECRET_KEY', ''), // 商户 API 私钥:PEM 全文、单行 base64(上方已自动识别 PKCS8/PKCS1)或文件路径 'mch_secret_cert' => $normalizePrivateKey((string) env('PAY_WECHAT_SECRET_CERT', '')), // 商户 API 证书(apiclient_cert.pem):用于提取证书序列号 'mch_public_cert_path' => $resolveCertPath((string) env('PAY_WECHAT_PUBLIC_CERT_PATH', '')), // 微信平台证书(回调验签用):留空时 SDK 会凭 APIv3 密钥自动下载并缓存在内存, // 生产环境建议用 `php think paycenter:check --channel=wechat` 触发一次后把证书落到 // runtime/cert/wechat/ 并在此配置 [序列号 => 文件路径],避免每次请求都去拉取。 'wechat_public_cert_path' => [], 'return_url' => '', 'notify_url' => '', ], ];