kirabhor / laravel-otp-validate
Laravel OTP验证包,内置重试和重发机制。支持最大重试和最大重发次数限制。可以通过用户自定义模板将OTP/安全码通过短信或电子邮件发送。
Requires
- php: ^7.1.8
- guzzlehttp/guzzle: ^7.0.1
- nesbot/carbon: ^2.22
Requires (Dev)
- orchestra/testbench: ^6.0@dev
README
此包用于简化OTP验证过程的设置。无需麻烦,即插即用。按照以下步骤进行操作,您将能够获得一个完整的OTP验证系统。您可以用它进行身份验证或电子商务生产销售,订单确认。
安装
安装包
使用composer安装此包
composer require ferdous/laravel-otp-validate
添加服务提供程序和外观
对于Laravel 5.5及以上版本
一旦添加了包,服务提供程序和外观将自动发现。
对于Laravel的旧版本
将服务提供程序添加到config/app.php
文件中的providers数组中
Ferdous\OtpValidator\OtpValidatorServiceProvider::class
将外观添加到config/app.php
文件中的aliases数组中
'OtpValidator' => Ferdous\OtpValidator\OtpValidatorServiceProvider::class
发布配置
完成操作后,使用以下命令将配置发布到您的配置文件夹中
php artisan vendor:publish --provider="Ferdous\OtpValidator\OtpValidatorServiceProvider"
此命令将创建一个config/otp.php
文件。
电子邮件配置
从.env
文件中设置电子邮件配置。无需其他更改。
短信配置
由于短信网关使用不同的方法和额外的头和参数,您可能需要更新otp.php
文件中的短信配置。
迁移数据库
运行以下命令以创建otps表。
php artisan migrate
它将创建一个包含所需列的otps表。
环境
将以下键值对添加到Laravel应用程序中的.env
文件
# Basic OTP Configs
OTP_SERVICE='enabled'
OTP_TIMEOUT=120
OTP_DIGIT=5
OTP_RESEND_SERVICE='enabled'
OTP_MAX_RETRY=2
OTP_MAX_RESEND=1
# Company and Service
OTP_SERVICE_NAME=
OTP_COMPANY_NAME=
# OTP via Email / SMS
OTP_SEND_BY_EMAIL=1
OTP_SEND_BY_SMS=1
# Email Configurations
OTP_EMAIL_FROM=
OTP_EMAIL_FROM_NAME=
OTP_EMAIL_SUBJECT=
# SMS Configurations
OTP_SMSC_URL='https://sms'
OTP_SMSC_METHOD=
OTP_COUNTRY_CODE=
OTP_SMSC_OVER_JSON=
OTP_SMSC_PARAM_TO_NAME=
OTP_SMSC_PARAM_MSG_NAME=
OTP_SMSC_USER=
OTP_SMSC_PASS=
定义
配置中的功能定义如下
- service:启用/禁用OTP服务
- timeout:OTP的超时时间
- digit:OTP的位数
- resend-service:启用/禁用重发服务
- max-retry:单个请求的最大重试次数
- max-resend:单个请求的最大重发次数
- service-name:服务使用的用途
- company-name:公司名称
- send-by:分享OTP的两种方式(电子邮件/短信)
- email:此密钥指定电子邮件所需的信息(例如,发件人,名称,主题等)
- sms:配置与短信网关发送短信。 (通用配置器)
OTP请求模板
一旦模板文件发布,打开resources/views/vendor/template-otp/
示例控制器
运行以下命令以创建控制器。
php artisan make:controller OtpController
以下是OtpController中调用OTP验证器的示例。
namespace App\Http\Controllers; use Ferdous\OtpValidator\Object\OtpRequestObject; use Ferdous\OtpValidator\OtpValidator; use Ferdous\OtpValidator\Object\OtpValidateRequestObject; class OtpController extends Controller { /** * @return array */ public function requestForOtp() { return OtpValidator::requestOtp( new OtpRequestObject('1432', 'buy-shirt', '01711084714', 'ferdousul.haque@gmail.com') ); } /** * @param Request $request * @return array */ public function validateOtp(Request $request) { $uniqId = $request->input('uniqueId'); $otp = $request->input('otp'); return OtpValidator::validateOtp( new OtpValidateRequestObject($uniqId,$otp) ); } /** * @param Request $request * @return array */ public function resendOtp(Request $request) { $uniqueId = $request->input('uniqueId'); return OtpValidator::resendOtp($uniqueId); } }
将以下内容添加到routes/web.php
文件中。
Route::get('/test/otp-request', 'OtpController@requestForOtp');
Route::get('/test/otp-validate', 'OtpController@validateOtp');
Route::get('/test/otp-resend', 'OtpController@resendOtp');
响应/错误描述
以下表格描述了响应中生成的错误代码及其对应含义。
{ "code": 201, "message": "OTP Sent to the recipient", "requestId": 1432, "type": "buy-shirt" }
请求OTP响应代码
OTP验证响应代码
许可协议
MIT
特别感谢
- Nahid Bin Azhar 提供反馈。
支持
- 对于任何错误,请帮助创建一个问题。
- 对于安装或配置方面的问题,请随时联系我。 ferdousul.haque@gmail.com
特色文章
示例短信网关配置
Muthofun
如果您正在尝试集成孟加拉国最受欢迎的短信网关之一,muthofun 是我们国家一个流行的批量短信网关。以下是 Muthofun 短信网关的示例配置
'smsc' => [ 'url' => env('OTP_SMSC_URL'), 'method' => env('OTP_SMSC_METHOD', 'GET'), 'add_code' => env('OTP_COUNTRY_CODE',null), 'json' => env('OTP_SMSC_OVER_JSON',1), 'headers' => [], 'params' => [ 'send_to_param_name' => env('OTP_SMSC_PARAM_TO_NAME','number'), 'msg_param_name' => env('OTP_SMSC_PARAM_MSG_NAME','msg'), 'others' => [ 'user' => env('OTP_SMSC_USER'), 'password' => env('OTP_SMSC_PASS'), 'unicode' => 1 ], ] ];
.env 文件将如下所示
OTP_SMSC_URL='http://clients.muthofun.com:8901/esmsgw/sendsms.jsp?'
OTP_SMSC_METHOD='GET'
OTP_COUNTRY_CODE='88'
OTP_SMSC_OVER_JSON=0
OTP_SMSC_PARAM_TO_NAME='mobiles'
OTP_SMSC_PARAM_MSG_NAME='sms'
OTP_SMSC_USER='YourUserName'
OTP_SMSC_PASS='YourPassWord'
Infobip
以下是如何与 Infobip 短信平台集成的示例,Infobip 是一个知名的短信网关。
使用 GET 方法
'smsc' => [ 'url' => env('OTP_SMSC_URL'), 'method' => env('OTP_SMSC_METHOD', 'GET'), 'add_code' => env('OTP_COUNTRY_CODE',null), 'json' => env('OTP_SMSC_OVER_JSON',1), 'headers' => [], 'params' => [ 'send_to_param_name' => env('OTP_SMSC_PARAM_TO_NAME','number'), 'msg_param_name' => env('OTP_SMSC_PARAM_MSG_NAME','msg'), 'others' => [ 'username' => env('OTP_SMSC_USER'), 'password' => env('OTP_SMSC_PASS'), 'from' => 'InfoSMS', 'flash' => true ], ] ];
.env 文件将如下所示
OTP_SMSC_URL='https://{baseUrl}/sms/1/text/query?'
OTP_SMSC_METHOD='GET'
OTP_COUNTRY_CODE='88'
OTP_SMSC_OVER_JSON=0
OTP_SMSC_PARAM_TO_NAME='to'
OTP_SMSC_PARAM_MSG_NAME='text'
OTP_SMSC_USER='YourUserName'
OTP_SMSC_PASS='YourPassWord'
msg91
以下是与 msg91 短信网关集成的示例。
使用 GET 方法
'smsc' => [ 'url' => env('OTP_SMSC_URL'), 'method' => env('OTP_SMSC_METHOD', 'GET'), 'add_code' => env('OTP_COUNTRY_CODE',null), 'json' => env('OTP_SMSC_OVER_JSON',1), 'headers' => [], 'params' => [ 'send_to_param_name' => env('OTP_SMSC_PARAM_TO_NAME','number'), 'msg_param_name' => env('OTP_SMSC_PARAM_MSG_NAME','msg'), 'others' => [ 'authkey' => 'YourAuthKey', 'sender' => 'YourSenderId', 'route' => '1', 'country' => '88', ], ], 'wrapper' => 'sms', ];
.env 文件将如下所示
OTP_SMSC_URL='https://control.msg91.com/api/v2/sendsms?'
OTP_SMSC_METHOD='POST'
OTP_COUNTRY_CODE='88'
OTP_SMSC_OVER_JSON=1
OTP_SMSC_PARAM_TO_NAME='to'
OTP_SMSC_PARAM_MSG_NAME='text'
OTP_SMSC_USER='YourUserName'
OTP_SMSC_PASS='YourPassWord'