mirror of
https://gitee.com/zoujingli/WeChatDeveloper.git
synced 2026-09-04 15:04:32 +08:00
2.3 KiB
2.3 KiB
异常
2.0 使用 We\Exception\SdkException 作为所有 SDK 故障的统一基类,同时保留平台和故障类别。
RuntimeException
└── SdkException
├── TransportException
├── WechatException
│ ├── ApiException
│ └── SignatureException
└── AlipayException
├── AlipayApiException
└── AlipaySignatureException
| 类型 | 典型场景 |
|---|---|
SdkException |
根客户端、缓存适配或通用 SDK 配置错误 |
TransportException |
与微信或支付宝建立连接、发送请求或下载文件失败 |
WechatException |
微信配置、协议、加解密或请求故障 |
ApiException |
微信平台/支付 API 返回错误或无效响应 |
SignatureException |
微信消息、支付响应或通知验签失败 |
AlipayException |
支付宝配置、密钥、签名或解密故障 |
AlipayApiException |
支付宝网关响应结构或业务错误 |
AlipaySignatureException |
支付宝同步响应缺少签名或验签失败 |
统一捕获
<?php
declare(strict_types=1);
use We\Exception\SdkException;
try {
$result = $platform->get('cgi-bin/user/get');
} catch (SdkException $exception) {
logger()->error($exception->getMessage(), [
'exception' => $exception,
]);
}
精确捕获和上下文
<?php
declare(strict_types=1);
use We\Exception\AlipayApiException;
use We\Exception\AlipaySignatureException;
use We\Exception\TransportException;
try {
$result = $alipay->post('alipay.trade.query', [
'out_trade_no' => 'A202608100001',
]);
} catch (AlipaySignatureException $exception) {
security_log($exception->getMessage(), $exception->context());
} catch (AlipayApiException $exception) {
application_log($exception->getMessage(), $exception->context());
} catch (TransportException $exception) {
retryable_log($exception->getMessage(), $exception->context());
}
异常的 context() 返回平台响应、签名序列号或其他诊断数据。不要把可能含敏感信息的完整上下文直接写入公开日志。
PHP 原生参数类型错误、调用不存在的方法等编程错误不包装为 SdkException;这类错误应在开发和静态分析阶段修复。