fix(sms): handle empty Smsbao responses
This commit is contained in:
1 parent
7b55cfb190
commit
1af51ab172
1 file changed
+39
-18
@@ -9,19 +9,6 @@ defined('ABSPATH') || exit;
|
|||||||
|
|
||||||
class SMSProviderSmsbao implements ProviderInterface {
|
class SMSProviderSmsbao implements ProviderInterface {
|
||||||
|
|
||||||
private const ERROR_MESSAGES = [
|
|
||||||
'0' => '短信发送成功',
|
|
||||||
'-1' => '短信宝接口参数不全',
|
|
||||||
'-2' => '服务器不支持短信请求',
|
|
||||||
'30' => '短信宝密码错误',
|
|
||||||
'40' => '短信宝账号不存在',
|
|
||||||
'41' => '短信宝余额不足',
|
|
||||||
'42' => '短信宝账号已过期',
|
|
||||||
'43' => '短信宝 IP 地址受限',
|
|
||||||
'50' => '短信内容含有敏感词',
|
|
||||||
'51' => '手机号码不正确',
|
|
||||||
];
|
|
||||||
|
|
||||||
public function get_key(): string {
|
public function get_key(): string {
|
||||||
return 'smsbao';
|
return 'smsbao';
|
||||||
}
|
}
|
||||||
@@ -47,20 +34,54 @@ class SMSProviderSmsbao implements ProviderInterface {
|
|||||||
'p' => $password,
|
'p' => $password,
|
||||||
'm' => $phone,
|
'm' => $phone,
|
||||||
'c' => $template,
|
'c' => $template,
|
||||||
|
'f' => 'json',
|
||||||
], 'https://api.smsbao.com/sms'), ['timeout' => 10]);
|
], 'https://api.smsbao.com/sms'), ['timeout' => 10]);
|
||||||
if (is_wp_error($response)) {
|
if (is_wp_error($response)) {
|
||||||
return ['success' => false, 'message' => $response->get_error_message(), 'transport' => 'smsbao_http'];
|
return ['success' => false, 'message' => $response->get_error_message(), 'transport' => 'smsbao_http'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wp_remote_retrieve_response_code($response) !== 200) {
|
$status = (int) wp_remote_retrieve_response_code($response);
|
||||||
return ['success' => false, 'message' => __('短信宝接口请求失败', 'aksrt'), 'transport' => 'smsbao_http'];
|
if ($status !== 200) {
|
||||||
|
return [
|
||||||
|
'success' => false,
|
||||||
|
'message' => sprintf(__('短信宝接口请求失败,HTTP 状态码:%d', 'aksrt'), $status),
|
||||||
|
'transport' => 'smsbao_http',
|
||||||
|
];
|
||||||
}
|
}
|
||||||
$result = trim(wp_remote_retrieve_body($response));
|
|
||||||
|
$body = trim((string) wp_remote_retrieve_body($response));
|
||||||
|
if ($body === '') {
|
||||||
|
return [
|
||||||
|
'success' => false,
|
||||||
|
'message' => sprintf(__('短信宝接口返回空响应(HTTP %d),请检查服务器到 api.smsbao.com 的 HTTPS 连接,并查看短信宝后台发送记录。', 'aksrt'), $status),
|
||||||
|
'transport' => 'smsbao_http',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$json = json_decode($body, true);
|
||||||
|
if (
|
||||||
|
!is_array($json)
|
||||||
|
|| !isset($json['code'])
|
||||||
|
|| (!is_int($json['code']) && !is_string($json['code']))
|
||||||
|
|| trim((string) $json['code']) === ''
|
||||||
|
) {
|
||||||
|
return ['success' => false, 'message' => __('短信宝返回了无效的 JSON 响应', 'aksrt'), 'transport' => 'smsbao_http'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = (string) $json['code'];
|
||||||
if ($result === '0') {
|
if ($result === '0') {
|
||||||
return ['success' => true, 'message' => __('验证码短信已发送', 'aksrt'), 'transport' => 'smsbao_http'];
|
return ['success' => true, 'message' => __('验证码短信已发送', 'aksrt'), 'transport' => 'smsbao_http'];
|
||||||
}
|
}
|
||||||
$message = self::ERROR_MESSAGES[$result] ?? __('短信宝发送失败', 'aksrt');
|
|
||||||
return ['success' => false, 'message' => $message . ' | ' . __('错误码:', 'aksrt') . ' ' . $result, 'transport' => 'smsbao_http'];
|
$message = trim((string) ($json['msg'] ?? ''));
|
||||||
|
if ($message === '') {
|
||||||
|
$message = __('短信宝发送失败', 'aksrt');
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
'success' => false,
|
||||||
|
'message' => $message . ' | ' . __('错误码:', 'aksrt') . ' ' . $result,
|
||||||
|
'transport' => 'smsbao_http',
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function get_status(array $config): array {
|
public function get_status(array $config): array {
|
||||||
|
|||||||
Reference in new issue
Block a user