Skip to content

Commit

Permalink
Merge pull request #38 from toplan/2.1
Browse files Browse the repository at this point in the history
2.1
  • Loading branch information
toplan committed Dec 21, 2015
2 parents 99da4ff + cf886a0 commit 17bf708
Show file tree
Hide file tree
Showing 6 changed files with 177 additions and 114 deletions.
149 changes: 92 additions & 57 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#Laravel Sms

###1. 关于2.0
laravel-sms v2.0是基于[phpsms](https://github.com/toplan/phpsms)针对laravel框架二次封装的短信发送库。
###1. 关于v2.*
laravel-sms v2.*是基于[phpsms](https://github.com/toplan/phpsms)针对laravel框架二次封装的短信发送库。
> phpsms的请求负载均衡功能由[task-balancer](https://github.com/toplan/task-balancer)提供。
phpsms为laravel-sms提供了全套的短信发送机制,而且phpsms也有自己的service provider,也就是说你完全可以在laravel框架下无障碍的独立使用phpsms。
Expand All @@ -12,7 +12,7 @@ phpsms为laravel-sms提供了全套的短信发送机制,而且phpsms也有自
###2. why me

既然有了phpsms,为什么还需要laravel-sms呢?
那么既然有了phpsms,为什么还需要laravel-sms呢?
为了更进一步提高开发效率,laravel-sms在phpsms的基础上针对laravel框架定制好了如下功能:

* 队列工作方式
Expand All @@ -39,11 +39,11 @@ phpsms为laravel-sms提供了全套的短信发送机制,而且phpsms也有自
| [SUBMAIL](http://submail.cn) | yes | no | no |¥100(1千条) |¥0.100/条|
| [云之讯](http://www.ucpaas.com/) | yes | no | yes | |¥0.050/条|

# 安装2.0
# 安装
在项目根目录下运行如下composer命令:
```php
//安装2.0版本
composer require 'toplan/laravel-sms:~2.0.6',
//安装2.1版本
composer require 'toplan/laravel-sms:~2.1.0',

//安装开发中版本
composer require 'toplan/laravel-sms:dev-master'
Expand All @@ -56,7 +56,7 @@ phpsms为laravel-sms提供了全套的短信发送机制,而且phpsms也有自
> composer require 'toplan/laravel-sms:1.0.2',
> ```
# 快速上手
# 快速上手v2.*
###1.注册服务提供器
Expand All @@ -74,7 +74,8 @@ phpsms为laravel-sms提供了全套的短信发送机制,而且phpsms也有自

###2.参数配置

* 请先运行如下命令生成配置文件和migration文件
* 请先运行如下命令生成配置文件和migration文件

```php
php artisan vendor:publish
```
Expand All @@ -83,15 +84,15 @@ phpsms为laravel-sms提供了全套的短信发送机制,而且phpsms也有自
> 其中phpsms.php负责配置代理器参数以及规划如何调度代理器。
> laravel-sms.php则全职负责验证码发送/验证模块的配置。
* 在数据库中生成`laravel_sms`[可选]

* 在数据库中生成sms表(可选)
```php
php artisan migrate
```

* 设置代理器使用方案
* 设置代理器使用方案

请在config/phpsms.php中设置代理服务商。
请在config/phpsms.php中设置代理服务商。
```php
'enable' => [
//被使用概率为2/3
Expand All @@ -102,14 +103,13 @@ phpsms为laravel-sms提供了全套的短信发送机制,而且phpsms也有自
];
```

* 配置代理服务商的相关参数

在config/phpsms.php中,找到你想要使用的代理器,并填写好配置信息。
* 配置代理服务商的相关参数

在config/phpsms.php中,找到你想要使用的代理器,并填写好配置信息。

###3.Enjoy it!

在控制器中发送触发短信,如:
在控制器中发送触发短信,如:
```php
//只希望使用模板方式发送短信,可以不设置内容content (如云通讯,Submail)
PhpSms::make()->to('1828****349')->template('Luosimao', 'xxx')->data(['12345', 5])->send();
Expand Down Expand Up @@ -150,39 +150,11 @@ phpsms为laravel-sms提供了全套的短信发送机制,而且phpsms也有自
php artisan queue:listen
```


#验证码短信模块

可以直接访问example.com/sms/info查看该模块是否可用,并可在该页面里观察验证码短信发送数据,方便你进行调试。

###1.[浏览器端]请求发送带验证码短信

该包已经封装好浏览器端的插件(兼容jquery/zepto),只需要为发送按钮添加扩展方法即可实现发送短信。
```html
//js文件在laravel-sms包的js文件夹中,请复制到项目资源目录
<script src="/path/to/laravel-sms.js"></script>
<script>
$('#sendVerifySmsButton').sms({
//token value
token : "{{csrf_token()}}",
//定义如何获取mobile的值
mobileSelector : 'input[name="mobile"]',
//定义手机号的检测规则,当然你还可以到配置文件中自定义你想要的任何规则
mobileRule : 'mobile_required',
//是否请求语音验证码
voice : false,
//定义服务器有消息返回时如何展示,默认为alert
alertMsg : function (msg, type) {
alert(msg);
},
});
</script>
```
> **注意:**
> 如果你使用Luosimao语音验证码,请在配置文件中'Luosimao'中设置'voiceApikey'。
###2.[服务器端]配置短信内容/模板

###1.[服务器端]配置短信内容/模板

* 填写你的验证码短信内容或模板标示符

Expand All @@ -205,14 +177,39 @@ phpsms为laravel-sms提供了全套的短信发送机制,而且phpsms也有自

配置文件config/laravel-sms.php:
```php
'use' => 'mobile_required',
'rules' => [
//唯一性检测规则
'check_mobile_unique' => 'unique:users,mobile',//适用于注册
//存在性检测规则
'check_mobile_exists' => 'exists:users',//适用于找回密码和系统内业务验证
'mobile_required' => 'required|zh_mobile',
...
]
```

###2.[浏览器端]请求发送带验证码短信

该包已经封装好浏览器端的插件(兼容jquery/zepto),只需要为发送按钮添加扩展方法即可实现发送短信。
```html
//js文件在laravel-sms包的js文件夹中,请复制到项目资源目录
<script src="/path/to/laravel-sms.js"></script>
<script>
$('#sendVerifySmsButton').sms({
//token value
token : "{{csrf_token()}}",
//定义如何获取mobile的值
mobileSelector : 'input[name="mobile"]',
//定义手机号的检测规则,当然你还可以到配置文件中自定义你想要的任何规则
mobileRule : 'mobile_required',
//是否请求语音验证码
voice : false,
//定义服务器有消息返回时如何展示,默认为alert
alertMsg : function (msg, type) {
alert(msg);
},
});
</script>
```
> **注意:**
> 如果你使用Luosimao语音验证码,请在配置文件中'Luosimao'中设置'voiceApikey'。
###3.[服务器端]合法性验证

用户填写验证码并提交表单到服务器时,在你的控制器中需要验证手机号和验证码是否正确,你只需要加上如下代码即可:
Expand All @@ -224,6 +221,7 @@ phpsms为laravel-sms提供了全套的短信发送机制,而且phpsms也有自
//more...
]);
if ($validator->fails()) {
//验证失败后建议清空存储的短信发送信息,防止用户重复试错
\SmsManager::forgetSentInfo()
return redirect()->back()->withErrors($validator);
}
Expand All @@ -238,33 +236,31 @@ PS:

#无会话支持

###1. 请求url
###1. 请求地址
* 短信:
scheme://your-domain.com/sms/verify-code

* 语音:
scheme://your-domain.com/sms/voice-verify

###2. 参数
###2. 请求参数
| 参数名 | 必填 | 说明 | 示例 |
| ----- | :-----: | :------: | :-------: |
| mobile || 手机号 | `18280......` |
| mobileRule || 手机号检测规则 | 默认为`mobile_required` |
| seconds || 请求间隔,单位秒 | `60` |
| mobile || 手机号码 | `18280......` |
| mobileRule || 手机号检测规则,默认`mobile_required` | `mobile_required` |
| seconds || 请求间隔(秒),默认`60` | `60` |
| uuid || 唯一标识符 | |

###3. 服务端验证

* 实现存储器:

实现一个接口为`Toplan\Sms\Storage`的存储器,
并在config/laravel-sms.php中配置存储器。
```php
'storage' => 'Toplan\Sms\SessionStorage',
'storage' => 'Your\Namespace\SomeStorage',
```

* 给每个验证规则后加上参数`$uuid`:

```php
$uuid = $request->input('uuid');
$validator = Validator::make(Input::all(), [
Expand All @@ -273,15 +269,54 @@ scheme://your-domain.com/sms/voice-verify
//more...
]);
if ($validator->fails()) {
//验证失败后建议清空存储的短信发送信息,防止用户重复试错
\SmsManager::forgetSentInfo($uuid)
return redirect()->back()->withErrors($validator);
}
```

#自定义代理器
#自定义开发

###1. 自定义代理器
详情请参看[phpsms](https://github.com/toplan/phpsms#自定义代理器)

###2. 自定义Mobile验证规则

* 定义规则
```php
//方式1:
\SmsManager::storeMobileRule('required|zh_mobile|min:13');
//rule的name默认为当前uri

//方式2:
\SmsManager::storeMobileRule([
'rule' => 'required|zh_mobile|min:13',//必须
'uuid' => '...',//可选,用于无会话api,
'name' => '...'//可选,给自定义rule取别名,默认为当前uri
]);
```

> 存储的自定义规则访问example.com/sms/info查看。
* 删除规则
```php
\SmsManager::forgetMobileRule([
'name' => '...',//必填
'uuid' => '...'//可选,用于无会话api,
]);
```

* 验证规则
```php
$rule = CUSTOM_RULE;//注意$rule的使用!!!
$uuid = $request->input('uuid', null);
$validator = Validator::make($request->all(), [
...
'verifyCode' => "required|verify_code:$uuid|confirm_mobile_rule:$rule,$uuid",
...
]);
```

#License

MIT
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "toplan/laravel-sms",
"description": "sms send package for laravel",
"license": "MIT",
"version": "2.0.6",
"version": "2.1.0",
"keywords": ["sms", "laravel sms", "laravel-sms"],
"authors": [
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,33 +13,37 @@ class CreateSmsTable extends Migration {
*/
public function up()
{
Schema::create('sms', function(Blueprint $table)
Schema::create('laravel_sms', function(Blueprint $table)
{
//auto increment id
$table->increments('id');
//to:用于存储手机号
$table->string('to')->default('');
//temp_id:存储模板标记,用于存储任何第三方服务商提供的短信模板标记/id
$table->text('temp_id')->default('');
//模板data:建议json格式
//data:模板短信的模板数据,建议json格式
$table->text('data')->default('');
//内容
//content:内容
$table->text('content')->default('');
//voice_code:语言验证码code
$table->string('voice_code')->default('');
//发送失败次数
$table->mediumInteger('fail_times')->default(0);
//最后一次发送失败时间
$table->integer('last_fail_time')->unsigned()->default(0);
//发送成功时的时间
$table->integer('sent_time')->unsigned()->default(0);
//发送结果,记录发送状态,可用于排错
//代理器使用日志,记录每个代理器的发送状态,可用于排错
$table->text('result_info')->default('');

$table->timestamps();
$table->softDeletes();
$table->engine = 'InnoDB';

//说明1temp_iddata用于发送模板短信。
//说明2content用于直接发送短信内容,不使用模板。
//说明
//1:temp_id和data用于发送模板短信。
//2:content用于直接发送短信内容,不使用模板。
//3:voice_code用于存储语言验证码code
});
}

Expand All @@ -50,7 +54,7 @@ public function up()
*/
public function down()
{
Schema::dropIfExists('sms');
Schema::dropIfExists('laravel_sms');
}

}
20 changes: 6 additions & 14 deletions src/Toplan/LaravelSms/SmsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,10 @@ private function parseInput($request)
public function postVoiceVerify(Request $request)
{
//get data
extract($this->parseInput($request));
extract($input = $this->parseInput($request));

//validate
$verifyResult = SmsManager::validator([
'mobile' => $mobile,
'seconds' => $seconds,
'uuid' => $uuid
], $rule);
$verifyResult = SmsManager::validator($input);
if (!$verifyResult['success']) {
return response()->json($verifyResult);
}
Expand All @@ -60,14 +56,10 @@ public function postVoiceVerify(Request $request)
public function postSendCode(Request $request)
{
//get data
extract($this->parseInput($request));
extract($input = $this->parseInput($request));

//validate
$verifyResult = SmsManager::validator([
'mobile' => $mobile,
'seconds' => $seconds,
'uuid' => $uuid,
], $rule);
$verifyResult = SmsManager::validator($input);
if (!$verifyResult['success']) {
return response()->json($verifyResult);
}
Expand Down Expand Up @@ -103,14 +95,14 @@ public function postSendCode(Request $request)

public function getInfo(Request $request, $uuid = null)
{
$html = '<meta charset="UTF-8"/><h2 align="center" style="margin-top: 20px;">Hello, welcome to laravel-sms for l5.</h2>';
$html = '<meta charset="UTF-8"/><h2 align="center" style="margin-top: 20px;">Hello, welcome to laravel-sms v2.0</h2>';
$html .= '<p style="color: #666;"><a href="https://github.com/toplan/laravel-sms" target="_blank">laravel-sms源码</a>托管在GitHub,欢迎你的使用。如有问题和建议,欢迎提供issue。当然你也能为该项目提供开源代码,让laravel-sms支持更多服务商。</p>';
$html .= '<hr>';
$html .= '<p>你可以在调试模式(设置config/app.php中的debug为true)下查看到存储在session中的验证码短信相关数据(方便你进行调试):</p>';
echo $html;
$uuid = $uuid ?: $request->input('uuid', null);
if (config('app.debug')) {
$smsData = SmsManager::retrieveSentInfo($uuid, true);
$smsData = SmsManager::retrieveDebugInfo($uuid);
dd($smsData);
} else {
echo '<p align="center" style="color: #ff0000;;">现在是非调试模式,无法查看验证码短信数据</p>';
Expand Down
Loading

0 comments on commit 17bf708

Please sign in to comment.