ホームページ >バックエンド開発 >PHPチュートリアル >laravelのSMS認証コード機能を実装する手順を詳しく解説
今回はlaravelで認証コードをテキストメッセージで送信する機能を実装する手順について詳しく解説していきます。 . ここで実際のケースを見てみましょう。
はじめに少し前に、SMS認証コード機能を実装したいと思っていましたが、長い間止まっていました。
まず、Alibaba Cloud の SMS サービス ビジネスを使用します。最初のアクセス プロセスは次のとおりです。
Alibaba Cloud で SMS サービスをアクティブ化した後に行う必要があること:1.アプリケーションテンプレート 3. Accesskey を作成します。Alibaba Cloud が提供するサブユーザーを使用して Accesskey を作成できることに注意してください。これはより安全です。 4. Recharge
laravel には、以前 Alibaba Cloud を使用していました。 、次のように使用します:
1、ターミナルまたはコマンドからプロジェクトを入力し、実行します: composer require iscms/alisms-for-laravel
2、変更: iscmsAlismsAlidayuServiceProvider::class
code> configapp.php の Providers の下に次のような内容を追加します: composer require iscms/alisms-for-laravel
2,将:iscmsAlismsAlidayuServiceProvider::class
加入configapp.php的Providers下 类似:
3,运行:php artisan vendor:publish
,这样会在config文件夹下新增一个alisms.php文件,内容如下:
<?php return [ 'KEY' =>env('ALISMS_KEY',null), 'SECRETKEY'=>env('ALISMS_SECRETKEY',null), ];
4,在.env文件中写入:
ALISMS_KEY=23305789 ALISMS_SECRETKEY=**************
注意:ALISMS_KEY和ALISMS_SECRETKEY就是阿里云生成的访问秘钥成对(AccessKeyId 与 AccessKeySecret)
开始使用:
1,在您需要调用短信服务的控制器中引入SMS:
use iscmsAlismsSendsmsPusher as Sms;
phpArtisan Vendor:publish
。これにより、次の内容を含む aisms.php ファイルが config フォルダーの下に追加されます: public function construct(Sms $sms) { $this->sms=$sms; } public function index() { $result=$this->sms->send("$phone","$name","$content","$code"); }
{ code:"生成的验证码", product:"示例项目" }
ALISMS_KEY と ALISMS_SECRETKEY は、Alibaba Cloud によって生成されたアクセス キーのペア (AccessKeyId と AccessKeySecret) です
を使用します。 iscmsAlismsSendsmsPusher as Sms;<p style="text-align: left;"><pre class="brush:php;toolbar:false;">composer dumpautoload</pre></p>パラメータの説明: $phone、$name、$content、$code<p style="text-align: left;"></p>
<p style="text-align: left;"></p>$phone は SMS を受信する側の SMS 番号を指します。<p style="text-align: left;"></p>
<p style="text-align: left;"></p>$name は SMS を受信する側の SMS 番号を指します。 Alibaba Dayu SMS http://www.alidayu.com/admin/service/sign で署名できる SMS 署名に追加します。 <p style="text-align: left;"></p>
<p style="text-align: left;"></p>$content は、SMS テンプレート内の変数コンテンツを参照します。たとえば、<p style="text-align: left;"></p>。 <p style="text-align: left;"></p> の Ali Big Fish テンプレート テンプレートに次の SMS があります<p style="text-align: left;"></p> テンプレート名: 本人確認確認コード<p style="text-align: left;"><img alt="" src="https://img.php.cn/upload/article/000/061/021/b359a8f04a6c9b8eec2b3212de8de152-2.png"> テンプレート ID: SMS_3910275</p>
<p style="text-align: left;">*テンプレートの内容: 確認コード $[code]、${product} の本人確認を受けています、他人には言わないでください! </p>
<p style="text-align: left;">すると、対応する $content は </p><pre class="brush:js;toolbar:false;"><?php
// namespace App\Http\Controllers\sms;
use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
use Aliyun\Api\Sms\Request\V20170525\QuerySendDetailsRequest;
use App\Http\Controllers\Controller;
// 加载区域结点配置
Config::load();
class SmsController extends Controller
{
/**
* 构造器
* @param string $accessKeyId 必填,AccessKeyId
* @param string $accessKeySecret 必填,AccessKeySecret
*/
public function construct($accessKeyId="######",$accessKeySecret="#######")
{
// 短信API产品名
$product = "Dysmsapi";
// 短信API产品域名
$domain = "dysmsapi.aliyuncs.com";
// 暂时不支持多Region
$region = "cn-hangzhou";
// 服务结点
$endPointName = "cn-hangzhou";
// 初始化用户Profile实例
$profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
// 增加服务结点
DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);
// 初始化AcsClient用于发起请求
$this->acsClient = new DefaultAcsClient($profile);
}
/**
* 发送短信范例
* @param [type] $phoneNumbers 必填, 短信接收号码
* @param string $signName 必填, 短信签名,应严格"签名名称"填写,
* @param string $templateCode 必填, 短信模板Code,应严格按"模板CODE"填写,
* @param [type] $outId 选填, 假如模板中存在变量需要替换则为必填项
* @return [type] [description]
*/
public function sendSms($phoneNumbers,$signName="XX软件",$templateCode="SMS_XXXXXX",$outId=null)
{
// 初始化SendSmsRequest实例用于设置发送短信的参数
$request = new SendSmsRequest;
// 必填,设置雉短信接收号码
$request->setPhoneNumbers($phoneNumbers);
// 必填,设置签名名称
$request->setSignName($signName);
// 必填,设置模板CODE
$request->setTemplateCode($templateCode);
$num = rand(100000,999999);
// 可选,设置模板参数
$request->setTemplateParam(json_encode(
Array(
"code" => "$num"
)
));
// 可选,设置流水号
if($outId) {
$request->setOutId($outId);
}
// 发起访问请求
$acsResponse = $this->acsClient->getAcsResponse($request);
}
/**
* 查询短信发送情况范例
* @param [type] $phoneNumbers 必填, 短信接收号码
* @param [type] $sendDate 必填,短信发送日期,格式Ymd,支持近30天记录查询
* @param integer $pageSize 必填,分页大小
* @param integer $currentPage 必填,当前页码
* @param [type] $bizId 选填,短信发送流水号
* @return [type] [description]
*/
public function queryDetails($phoneNumbers,$sendDate,$pageSize=10,$currentPage=1,$bizId=null)
{
// 初始化QuerySendDetailsRequest实例用于设置短信查询的参数
$request = new QuerySendDetailsRequest();
$request->setPhoneNumber($phoneNumbers);
$request->setSendDate($sendDate);
$request->setPageSize($pageSize);
$request->setCurrentPage($currentPage);
if($bizId) {
$request->setBizId($bizId);
}
$acsResponse = $this->acsClient->getAcsResponse($request);
}
}</pre> になるはずです<p style="text-align: left;"> これで普通に使えるようになりましたが、タオバオで確認したところ、なぜ使用中にコンソールから code=11 というエラーコードが返されたのかわかりません。 isv 権限の問題で、その後 Alibaba Cloud でユーザー権限制御を最大まで開いたのですが、拡張機能パッケージを変更しても同じエラーが発生しました。まだ解決していないので書き込みました。ララベルオリジナル。 </p>
<p style="text-align: left;">まず、Alibaba Cloud 公式 Web サイトから SMS サービスの SDK パッケージをダウンロードします。</p>🎜 SDK ツール パッケージには、1 つの aliyun-php-sdk-core パッケージともう 1 つの alicom-dysms-api パッケージの合計 2 つのクラス ライブラリが含まれています。 2 つのパッケージが依存関係としてプロジェクト クラス ライブラリに追加されます。 🎜🎜SDKパッケージのPHPバージョンを選択し、圧縮パッケージを解凍します。その中には、api_demo、api_sdk、msg_demo、msg_sdkの4つのフォルダーがあります🎜🎜laravelプロジェクトのappフォルダーの下にlibsという名前の新しいフォルダーを作成し、api_sdkを追加します。と msg_sdk を libs フォルダーにコピーします。 🎜🎜ルートディレクトリでcomposer.jsonファイルを見つけ、composer.jsonで定義されているクラスマップオプションを見つけて、インポートされた2つのパッケージを書き込みます: 🎜🎜🎜🎜🎜ターミナルをプロジェクトフォルダーに入れて実行します: 🎜rrreee🎜これはサードパーティのクラスライブラリがlaravelに導入されています。 🎜🎜コードファイルを作成します🎜🎜単純にカプセル化しました: 🎜<pre class="brush:js;toolbar:false;"><?php
// namespace App\Http\Controllers\sms;
use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
use Aliyun\Api\Sms\Request\V20170525\QuerySendDetailsRequest;
use App\Http\Controllers\Controller;
// 加载区域结点配置
Config::load();
class SmsController extends Controller
{
/**
* 构造器
* @param string $accessKeyId 必填,AccessKeyId
* @param string $accessKeySecret 必填,AccessKeySecret
*/
public function construct($accessKeyId="######",$accessKeySecret="#######")
{
// 短信API产品名
$product = "Dysmsapi";
// 短信API产品域名
$domain = "dysmsapi.aliyuncs.com";
// 暂时不支持多Region
$region = "cn-hangzhou";
// 服务结点
$endPointName = "cn-hangzhou";
// 初始化用户Profile实例
$profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
// 增加服务结点
DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);
// 初始化AcsClient用于发起请求
$this->acsClient = new DefaultAcsClient($profile);
}
/**
* 发送短信范例
* @param [type] $phoneNumbers 必填, 短信接收号码
* @param string $signName 必填, 短信签名,应严格"签名名称"填写,
* @param string $templateCode 必填, 短信模板Code,应严格按"模板CODE"填写,
* @param [type] $outId 选填, 假如模板中存在变量需要替换则为必填项
* @return [type] [description]
*/
public function sendSms($phoneNumbers,$signName="XX软件",$templateCode="SMS_XXXXXX",$outId=null)
{
// 初始化SendSmsRequest实例用于设置发送短信的参数
$request = new SendSmsRequest;
// 必填,设置雉短信接收号码
$request->setPhoneNumbers($phoneNumbers);
// 必填,设置签名名称
$request->setSignName($signName);
// 必填,设置模板CODE
$request->setTemplateCode($templateCode);
$num = rand(100000,999999);
// 可选,设置模板参数
$request->setTemplateParam(json_encode(
Array(
"code" => "$num"
)
));
// 可选,设置流水号
if($outId) {
$request->setOutId($outId);
}
// 发起访问请求
$acsResponse = $this->acsClient->getAcsResponse($request);
}
/**
* 查询短信发送情况范例
* @param [type] $phoneNumbers 必填, 短信接收号码
* @param [type] $sendDate 必填,短信发送日期,格式Ymd,支持近30天记录查询
* @param integer $pageSize 必填,分页大小
* @param integer $currentPage 必填,当前页码
* @param [type] $bizId 选填,短信发送流水号
* @return [type] [description]
*/
public function queryDetails($phoneNumbers,$sendDate,$pageSize=10,$currentPage=1,$bizId=null)
{
// 初始化QuerySendDetailsRequest实例用于设置短信查询的参数
$request = new QuerySendDetailsRequest();
$request->setPhoneNumber($phoneNumbers);
$request->setSendDate($sendDate);
$request->setPageSize($pageSize);
$request->setCurrentPage($currentPage);
if($bizId) {
$request->setBizId($bizId);
}
$acsResponse = $this->acsClient->getAcsResponse($request);
}
}</pre><p style="text-align: left;">之后用就实例化调用方法就可以了。</p>
<p>相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!</p>
<p>推荐阅读:</p>
<p style="text-align: left;"><a href="http://www.php.cn/php-weizijiaocheng-396365.html" target="_blank">怎么让360搜索引擎收录php改写方法</a><br></p>
<p style="text-align: left;"><a href="http://www.php.cn/php-weizijiaocheng-396366.html" target="_blank">PHP使用Curl实现模拟登录及抓取数据步骤详解</a><br></p>
<p style="text-align: left;"><a href="http://www.php.cn/php-weizijiaocheng-396356.html" target="_blank">PHP使用file_get_contents发送http请求步骤详解</a><br></p>
以上がlaravelのSMS認証コード機能を実装する手順を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。