新版文化云后台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

130 lines
3.5 KiB

<?php
/*
* This file is part of the overtrue/easy-sms.
*
* (c) overtrue <i@overtrue.me>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace Overtrue\EasySms\Gateways;
use Overtrue\EasySms\Contracts\MessageInterface;
use Overtrue\EasySms\Contracts\PhoneNumberInterface;
use Overtrue\EasySms\Exceptions\GatewayErrorException;
use Overtrue\EasySms\Support\Config;
use Overtrue\EasySms\Traits\HasHttpRequest;
/**
* Class UcloudGateway.
*/
class UcloudGateway extends Gateway
{
use HasHttpRequest;
const ENDPOINT_URL = 'https://api.ucloud.cn';
const ENDPOINT_Action = 'SendUSMSMessage';
const SUCCESS_CODE = 0;
/**
* Send Message.
*
* @param PhoneNumberInterface $to
* @param MessageInterface $message
* @param Config $config
*
* @return array
*
* @throws GatewayErrorException
*/
public function send(PhoneNumberInterface $to, MessageInterface $message, Config $config)
{
$params = $this->buildParams($to, $message, $config);
$result = $this->get(self::ENDPOINT_URL, $params);
if (self::SUCCESS_CODE != $result['RetCode']) {
throw new GatewayErrorException($result['Message'], $result['RetCode'], $result);
}
return $result;
}
/**
* Build Params.
*
* @param PhoneNumberInterface $to
* @param MessageInterface $message
* @param Config $config
*
* @return array
*/
protected function buildParams(PhoneNumberInterface $to, MessageInterface $message, Config $config)
{
$data = $message->getData($this);
$params = [
'Action' => self::ENDPOINT_Action,
'SigContent' => $config->get('sig_content'),
'TemplateId' => $message->getTemplate($this),
'PublicKey' => $config->get('public_key'),
];
$code = isset($data['code']) ? $data['code'] : '';
if (is_array($code) && !empty($code)) {
foreach ($code as $key => $value) {
$params['TemplateParams.'.$key] = $value;
}
} else {
if (!empty($code) || !is_null($code)) {
$params['TemplateParams.0'] = $code;
}
}
$mobiles = isset($data['mobiles']) ? $data['mobiles'] : '';
if (!empty($mobiles) && !is_null($mobiles)) {
if (is_array($mobiles)) {
foreach ($mobiles as $key => $value) {
$params['PhoneNumbers.'.$key] = $value;
}
} else {
$params['PhoneNumbers.0'] = $mobiles;
}
} else {
$params['PhoneNumbers.0'] = $to->getNumber();
}
if (!is_null($config->get('project_id')) && !empty($config->get('project_id'))) {
$params['ProjectId'] = $config->get('project_id');
}
$signature = $this->getSignature($params, $config->get('private_key'));
$params['Signature'] = $signature;
return $params;
}
/**
* Generate Sign.
*
* @param array $params
* @param string $privateKey
*
* @return string
*/
protected function getSignature($params, $privateKey)
{
ksort($params);
$paramsData = '';
foreach ($params as $key => $value) {
$paramsData .= $key;
$paramsData .= $value;
}
$paramsData .= $privateKey;
return sha1($paramsData);
}
}