提交 b35cd307 编写于 作者: T timjuly 提交者: 安正超

腾讯云阿里云发送短信可以指定模板 (#166)

* 短信签名

* phpunit

* 5.6

* phpunit 7

* unit test

* Update AliyunGateway.php

* Update AliyunGateway.php

* Update QcloudGateway.php

* Update AliyunGateway.php

* Update QcloudGateway.php
上级 3b455856
......@@ -12,4 +12,4 @@ sudo: false
install: travis_retry composer install --no-interaction --prefer-source
script: vendor/bin/phpunit --verbose
\ No newline at end of file
script: ./vendor/bin/phpunit --verbose --coverage-text
......@@ -7,7 +7,7 @@
"php": ">=5.6"
},
"require-dev": {
"phpunit/phpunit": "^5.6",
"phpunit/phpunit": "^5.7 || ^7.5",
"mockery/mockery": "1.0.x-dev"
},
"autoload": {
......@@ -21,10 +21,8 @@
}
},
"license": "MIT",
"authors": [
{
"name": "overtrue",
"email": "i@overtrue.me"
}
]
}
"authors": [{
"name": "overtrue",
"email": "i@overtrue.me"
}]
}
\ No newline at end of file
......@@ -7,8 +7,7 @@
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false">
stopOnFailure="false">
<testsuites>
<testsuite name="Application Test Suite">
<directory>./tests/</directory>
......
......@@ -53,6 +53,12 @@ class AliyunGateway extends Gateway
*/
public function send(PhoneNumberInterface $to, MessageInterface $message, Config $config)
{
$data = $message->getData($this);
$signName = !empty($data['sign_name']) ? $data['sign_name'] : $config->get('sign_name');
unset($data['sign_name']);
$params = [
'RegionId' => self::ENDPOINT_REGION_ID,
'AccessKeyId' => $config->get('access_key_id'),
......@@ -64,9 +70,9 @@ class AliyunGateway extends Gateway
'Action' => self::ENDPOINT_METHOD,
'Version' => self::ENDPOINT_VERSION,
'PhoneNumbers' => !\is_null($to->getIDDCode()) ? strval($to->getZeroPrefixedNumber()) : $to->getNumber(),
'SignName' => $config->get('sign_name'),
'SignName' => $signName,
'TemplateCode' => $message->getTemplate($this),
'TemplateParam' => json_encode($message->getData($this), JSON_FORCE_OBJECT),
'TemplateParam' => json_encode($data, JSON_FORCE_OBJECT),
];
$params['Signature'] = $this->generateSign($params);
......
......@@ -45,7 +45,13 @@ class QcloudGateway extends Gateway
*/
public function send(PhoneNumberInterface $to, MessageInterface $message, Config $config)
{
$type = !empty($message->getData($this)['type']) ? $message->getData($this)['type'] : 0;
$data = $message->getData($this);
$signName = !empty($data['sign_name']) ? $data['sign_name'] : $config->get('sign_name');
unset($data['sign_name']);
$type = !empty($data['type']) ? $data['type'] : 0;
$params = [
'tel' => [
'nationcode' => $to->getIDDCode() ?: 86,
......@@ -57,11 +63,11 @@ class QcloudGateway extends Gateway
'extend' => '',
'ext' => '',
];
if (!is_null($message->getTemplate($this)) && is_array($message->getData($this))) {
if (!is_null($message->getTemplate($this)) && is_array($data)) {
unset($params['msg']);
$params['params'] = array_values($message->getData($this));
$params['params'] = array_values($data);
$params['tpl_id'] = $message->getTemplate($this);
$params['sign'] = $config->get('sign_name') ? $config->get('sign_name') : '';
$params['sign'] = $signName;
}
$random = substr(uniqid(), -10);
......
......@@ -11,6 +11,7 @@
namespace Overtrue\EasySms\Tests\Gateways;
use Overtrue\EasySms\Contracts\GatewayInterface;
use Overtrue\EasySms\Exceptions\GatewayErrorException;
use Overtrue\EasySms\Gateways\QcloudGateway;
use Overtrue\EasySms\Message;
......@@ -28,18 +29,6 @@ class QcloudGatewayTest extends TestCase
];
$gateway = \Mockery::mock(QcloudGateway::class.'[request]', [$config])->shouldAllowMockingProtectedMethods();
$expected = [
'tel' => [
'nationcode' => '86',
'mobile' => strval(new PhoneNumber(18888888888)),
],
'type' => 0,
'msg' => 'This is a test message.',
'timestamp' => time(),
'extend' => '',
'ext' => '',
];
$gateway->shouldReceive('request')
->andReturn([
'result' => 0,
......@@ -79,18 +68,6 @@ class QcloudGatewayTest extends TestCase
];
$gateway = \Mockery::mock(QcloudGateway::class.'[request]', [$config])->shouldAllowMockingProtectedMethods();
$expected = [
'tel' => [
'nationcode' => 251,
'mobile' => 18888888888,
],
'type' => 0,
'msg' => 'This is a test message.',
'timestamp' => time(),
'extend' => '',
'ext' => '',
];
$gateway->shouldReceive('request')
->andReturn([
'result' => 0,
......@@ -121,4 +98,55 @@ class QcloudGatewayTest extends TestCase
$gateway->send(new PhoneNumber(18888888888, 251), $message, $config);
}
public function testSendUsingTemplate()
{
$config = [
'sdk_app_id' => 'mock-sdk-app-id',
'app_key' => 'mock-api-key',
];
$gateway = \Mockery::mock(QcloudGateway::class.'[request]', [$config])->shouldAllowMockingProtectedMethods();
$gateway->shouldReceive('request')
->with(\Mockery::any(), \Mockery::any(), \Mockery::subset([
'json' => [
'tpl_id' => 'template-id',
'params' => [
'param1',
'param2',
],
],
]))
->andReturn([
'result' => 0,
'errmsg' => 'OK',
'ext' => '',
'sid' => 3310228982,
'fee' => 1,
], [
'result' => 1001,
'errmsg' => 'sig校验失败',
])->twice();
$message = \Mockery::mock(Message::class);
$message->allows()->getTemplate()->withArgs([GatewayInterface::class])->andReturns('template-id');
$message->allows()->getData()->withArgs([GatewayInterface::class])->andReturns(['param1', 'param2', 'sign_name' => 'sign']);
$message->allows()->getContent()->withArgs([GatewayInterface::class])->andReturns(null);
$config = new Config($config);
$this->assertSame([
'result' => 0,
'errmsg' => 'OK',
'ext' => '',
'sid' => 3310228982,
'fee' => 1,
], $gateway->send(new PhoneNumber(18888888888), $message, $config));
$this->expectException(GatewayErrorException::class);
$this->expectExceptionCode(1001);
$this->expectExceptionMessage('sig校验失败');
$gateway->send(new PhoneNumber(18888888888), $message, $config);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册