Skip to content

Commit

Permalink
国际短信支持
Browse files Browse the repository at this point in the history
  • Loading branch information
overtrue committed May 20, 2018
1 parent 9d889d4 commit 27a8691
Show file tree
Hide file tree
Showing 42 changed files with 548 additions and 402 deletions.
19 changes: 19 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,25 @@ $easySms->send(13188888888, [
]);
```

## 国际短信

国际短信与国内短信的区别是号码前面需要加国际码,但是由于各平台对国际号码的写法不一致,所以在发送国际短信的时候有一点区别:

```php
use Overtrue\EasySms\PhoneNumber;

// 发送到国际码为 31 的国际号码
$number = new PhoneNumber(13188888888, 31);

$easySms->send($number, [
'content' => '您的验证码为: 6379',
'template' => 'SMS_001',
'data' => [
'code' => 6379
],
]);
```

## 定义短信

你可以根据发送场景的不同,定义不同的短信类,从而实现一处定义多处调用,你可以继承 `Overtrue\EasySms\Message` 来定义短信模型:
Expand Down
10 changes: 4 additions & 6 deletions src/Contracts/GatewayInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,11 @@ public function getName();
/**
* Send a short message.
*
* @param int|string|array $to
* @param \Overtrue\EasySms\Contracts\MessageInterface $message
* @param \Overtrue\EasySms\Support\Config $config
* @param \Overtrue\EasySms\Contracts\PhoneNumberInterface $to
* @param \Overtrue\EasySms\Contracts\MessageInterface $message
* @param \Overtrue\EasySms\Support\Config $config
*
* @return array
*
* @throws \Overtrue\EasySms\Exceptions\GatewayErrorException
*/
public function send($to, MessageInterface $message, Config $config);
public function send(PhoneNumberInterface $to, MessageInterface $message, Config $config);
}
53 changes: 53 additions & 0 deletions src/Contracts/PhoneNumberInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?php

/*
* This file is part of the overtrue/easy-sms.
*
* (c) overtrue <[email protected]>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/

namespace Overtrue\EasySms\Contracts;

/**
* Interface PhoneNumberInterface.
*
* @author overtrue <[email protected]>
*/
interface PhoneNumberInterface extends \JsonSerializable
{
/**
* 86.
*
* @return int
*/
public function getIDDCode();

/**
* 18888888888.
*
* @return int
*/
public function getNumber();

/**
* +8618888888888.
*
* @return string
*/
public function getUniversalNumber();

/**
* 008618888888888.
*
* @return string
*/
public function getZeroPrefixedNumber();

/**
* @return string
*/
public function __toString();
}
40 changes: 40 additions & 0 deletions src/EasySms.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@

use Closure;
use Overtrue\EasySms\Contracts\GatewayInterface;
use Overtrue\EasySms\Contracts\MessageInterface;
use Overtrue\EasySms\Contracts\PhoneNumberInterface;
use Overtrue\EasySms\Contracts\StrategyInterface;
use Overtrue\EasySms\Exceptions\InvalidArgumentException;
use Overtrue\EasySms\Strategies\OrderStrategy;
Expand Down Expand Up @@ -82,9 +84,47 @@ public function __construct(array $config)
*/
public function send($to, $message, array $gateways = [])
{
$to = $this->formatPhoneNumber($to);
$message = $this->formatMessage($message);

return $this->getMessenger()->send($to, $message, $gateways);
}

/**
* @param string|\Overtrue\EasySms\Contracts\PhoneNumberInterface $number
*
* @return \Overtrue\EasySms\PhoneNumber
*/
protected function formatPhoneNumber($number)
{
if ($number instanceof PhoneNumberInterface) {
return $number;
}

return new PhoneNumber(intval($number));
}

/**
* @param array|string|\Overtrue\EasySms\Contracts\MessageInterface $message
*
* @return \Overtrue\EasySms\Contracts\MessageInterface
*/
protected function formatMessage($message)
{
if (!($message instanceof MessageInterface)) {
if (!is_array($message)) {
$message = [
'content' => strval($message),
'template' => strval($message),
];
}

$message = new Message($message);
}

return $message;
}

/**
* Create a gateway.
*
Expand Down
21 changes: 6 additions & 15 deletions src/Gateways/AlidayuGateway.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
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;
Expand All @@ -34,25 +35,15 @@ class AlidayuGateway extends Gateway
const ENDPOINT_FORMAT = 'json';

/**
* Get gateway name.
*
* @return string
*/
public function getName()
{
return 'alidayu';
}

/**
* @param array|int|string $to
* @param \Overtrue\EasySms\Contracts\MessageInterface $message
* @param \Overtrue\EasySms\Support\Config $config
* @param \Overtrue\EasySms\Contracts\PhoneNumberInterface $to
* @param \Overtrue\EasySms\Contracts\MessageInterface $message
* @param \Overtrue\EasySms\Support\Config $config
*
* @return array
*
* @throws \Overtrue\EasySms\Exceptions\GatewayErrorException;
* @throws \Overtrue\EasySms\Exceptions\GatewayErrorException ;
*/
public function send($to, MessageInterface $message, Config $config)
public function send(PhoneNumberInterface $to, MessageInterface $message, Config $config)
{
$params = [
'method' => self::ENDPOINT_METHOD,
Expand Down
23 changes: 7 additions & 16 deletions src/Gateways/AliyunGateway.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
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;
Expand Down Expand Up @@ -42,25 +43,15 @@ class AliyunGateway extends Gateway
const ENDPOINT_SIGNATURE_VERSION = '1.0';

/**
* Get gateway name.
*
* @return string
*/
public function getName()
{
return 'aliyun';
}

/**
* @param array|int|string $to
* @param \Overtrue\EasySms\Contracts\MessageInterface $message
* @param \Overtrue\EasySms\Support\Config $config
* @param \Overtrue\EasySms\Contracts\PhoneNumberInterface $to
* @param \Overtrue\EasySms\Contracts\MessageInterface $message
* @param \Overtrue\EasySms\Support\Config $config
*
* @return array
*
* @throws \Overtrue\EasySms\Exceptions\GatewayErrorException;
* @throws \Overtrue\EasySms\Exceptions\GatewayErrorException ;
*/
public function send($to, MessageInterface $message, Config $config)
public function send(PhoneNumberInterface $to, MessageInterface $message, Config $config)
{
$params = [
'RegionId' => self::ENDPOINT_REGION_ID,
Expand All @@ -72,7 +63,7 @@ public function send($to, MessageInterface $message, Config $config)
'Timestamp' => $this->getTimestamp(),
'Action' => self::ENDPOINT_METHOD,
'Version' => self::ENDPOINT_VERSION,
'PhoneNumbers' => strval($to),
'PhoneNumbers' => strval($to->getZeroPrefixedNumber()),
'SignName' => $config->get('sign_name'),
'TemplateCode' => $message->getTemplate($this),
'TemplateParam' => json_encode($message->getData($this), JSON_FORCE_OBJECT),
Expand Down
23 changes: 7 additions & 16 deletions src/Gateways/BaiduGateway.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
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;
Expand All @@ -35,32 +36,22 @@ class BaiduGateway extends Gateway

const SUCCESS_CODE = 1000;

/**
* Get gateway name.
*
* @return string
*/
public function getName()
{
return 'baidu';
}

/**
* Send message.
*
* @param array|int|string $to
* @param \Overtrue\EasySms\Contracts\MessageInterface $message
* @param \Overtrue\EasySms\Support\Config $config
* @param \Overtrue\EasySms\Contracts\PhoneNumberInterface $to
* @param \Overtrue\EasySms\Contracts\MessageInterface $message
* @param \Overtrue\EasySms\Support\Config $config
*
* @return array
*
* @throws \Overtrue\EasySms\Exceptions\GatewayErrorException;
* @throws \Overtrue\EasySms\Exceptions\GatewayErrorException ;
*/
public function send($to, MessageInterface $message, Config $config)
public function send(PhoneNumberInterface $to, MessageInterface $message, Config $config)
{
$params = [
'invokeId' => $config->get('invoke_id'),
'phoneNumber' => $to,
'phoneNumber' => $to->getNumber(),
'templateCode' => $message->getTemplate($this),
'contentVar' => $message->getData($this),
];
Expand Down
23 changes: 7 additions & 16 deletions src/Gateways/ChuanglanGateway.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
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;
Expand All @@ -28,30 +29,20 @@ class ChuanglanGateway extends Gateway
const ENDPOINT_URL = 'https://sms.253.com/msg/send';

/**
* Get gateway name.
*
* @return string
*/
public function getName()
{
return 'chuanglan';
}

/**
* @param array|int|string $to
* @param \Overtrue\EasySms\Contracts\MessageInterface $message
* @param \Overtrue\EasySms\Support\Config $config
* @param \Overtrue\EasySms\Contracts\PhoneNumberInterface $to
* @param \Overtrue\EasySms\Contracts\MessageInterface $message
* @param \Overtrue\EasySms\Support\Config $config
*
* @return array
*
* @throws \Overtrue\EasySms\Exceptions\GatewayErrorException;
* @throws \Overtrue\EasySms\Exceptions\GatewayErrorException ;
*/
public function send($to, MessageInterface $message, Config $config)
public function send(PhoneNumberInterface $to, MessageInterface $message, Config $config)
{
$params = [
'un' => $config->get('username'),
'pw' => $config->get('password'),
'phone' => $to,
'phone' => $to->getIDDCode().$to->getNumber(),
'msg' => $message->getContent($this),
];

Expand Down
19 changes: 5 additions & 14 deletions src/Gateways/ErrorlogGateway.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
namespace Overtrue\EasySms\Gateways;

use Overtrue\EasySms\Contracts\MessageInterface;
use Overtrue\EasySms\Contracts\PhoneNumberInterface;
use Overtrue\EasySms\Support\Config;

/**
Expand All @@ -20,23 +21,13 @@
class ErrorlogGateway extends Gateway
{
/**
* Get gateway name.
*
* @return string
*/
public function getName()
{
return 'errorlog';
}

/**
* @param array|int|string $to
* @param \Overtrue\EasySms\Contracts\MessageInterface $message
* @param \Overtrue\EasySms\Support\Config $config
* @param \Overtrue\EasySms\Contracts\PhoneNumberInterface $to
* @param \Overtrue\EasySms\Contracts\MessageInterface $message
* @param \Overtrue\EasySms\Support\Config $config
*
* @return array
*/
public function send($to, MessageInterface $message, Config $config)
public function send(PhoneNumberInterface $to, MessageInterface $message, Config $config)
{
if (is_array($to)) {
$to = implode(',', $to);
Expand Down
2 changes: 1 addition & 1 deletion src/Gateways/Gateway.php
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,6 @@ public function setConfig(Config $config)
*/
public function getName()
{
return '';
return \strtolower(str_replace([__NAMESPACE__.'\\', 'Gateway'], '', \get_class($this)));
}
}
Loading

0 comments on commit 27a8691

Please sign in to comment.