Skip to content

Commit

Permalink
优化发送SmsHandler
Browse files Browse the repository at this point in the history
  • Loading branch information
gyp719 committed Dec 21, 2022
1 parent f7a6919 commit e588b7e
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 9 deletions.
36 changes: 27 additions & 9 deletions app/Handlers/SmsHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,22 @@

class SmsHandler
{
public function send(SmsTemplate $smsTemplate, $phone): Response
public function send(SmsTemplate $smsTemplate, $phone)/*: Response*/
{
$options = [];
// 搜是否包含 phone 键值,并返回对应的键名。
if (($key = array_search('phone', $smsTemplate['options'])) !== false) {
$options[$key] = $phone;

// 是否包含 phone 键, 存在替换为手机号
foreach ($smsTemplate['options'] as $key => $value) {
if ($smsTemplate['request_option'] == SmsTemplate::REQUEST_OPTION_MULTIPART) {
$options[] = [
'name' => $key,
'contents' => $value == 'phone' ? $phone : $value,
];
} else {
$options[$key] = $value == 'phone' ? $phone : $value;
}
}

// 组装好请求参数
$request_params = array(
$smsTemplate['request_option'] => $options
Expand All @@ -28,9 +37,14 @@ public function send(SmsTemplate $smsTemplate, $phone): Response
// HTTP 客户端请求
$response = Http::send($smsTemplate['method'], $smsTemplate['url'], $request_params);

if ($response->successful()) {
if ($response->successful() ||
isset($response['status']) ||
isset($response['success']) ||
isset($response['type']) ||
isset($response['message'])
) {
// 定义返回信息的键
$messageKeys = ['message', 'msg'];
$messageKeys = ['message', 'msg', 'info', 'errorMsg', 'operating', 'type', 'status', 'data'];

foreach ($messageKeys as $messageKey) {
if (array_key_exists($messageKey, $response->json())) {
Expand All @@ -40,11 +54,15 @@ public function send(SmsTemplate $smsTemplate, $phone): Response

$smsLog = new SmsLog([
'phone' => $phone,
'description' => $response[$messageKey],
'description' => $response[$messageKey] ?: '',
]);
$smsLog->smsTemplate()->associate($smsTemplate);
// 0 成功
if (in_array($response['code'], [0, 200])) {

if (
(isset($response['code']) && in_array($response['code'], [0, 200])) ||
(isset($response['status']) && in_array($response['status'], [0, 200])) ||
(isset($response['success']) && $response['success'] == true)
) {
$smsLog['send_status'] = SmsLog::SEND_STATUS_SUCCESS;
} else {
$smsLog['send_status'] = SmsLog::SEND_STATUS_FAIL;
Expand Down
2 changes: 2 additions & 0 deletions app/Models/SmsTemplate.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ class SmsTemplate extends Model
];

// 请求选项
// form-data 对应请求头 multipart/form-data
// x-www-form-urlencoded 对应请求头 application/x-www-form-urlencoded
const REQUEST_OPTION_QUERY = 'query';
const REQUEST_OPTION_MULTIPART = 'multipart';
const REQUEST_OPTION_FORM_PARAMS = 'form_params';
Expand Down

0 comments on commit e588b7e

Please sign in to comment.