>  기사  >  백엔드 개발  >  laravel에서 SMS를 통해 인증 코드를 보내는 구현 방법의 PHP 예

laravel에서 SMS를 통해 인증 코드를 보내는 구현 방법의 PHP 예

jacklove
jacklove원래의
2018-06-26 17:16:221960검색

사용자 등록 및 개인센터 보안관리를 할 때 인증코드를 전송하기 위해 SMS를 사용해야 하는 경우가 종종 있습니다. 다음 글에서는 주로 라라벨에서 SMS를 통한 인증코드 전송 구현 방법을 소개하고 있으며, 샘플을 통해 아주 자세하게 소개하고 있습니다. 코드가 필요한 친구들은 참고해서 아래 에디터와 함께 배워보세요.

머리말

얼마 전 SMS 인증코드 기능을 구현하고 싶었으나 오랫동안 막혔습니다.

먼저 알리바바 클라우드의 SMS 서비스 사업을 이용하고 있습니다.

알리바바 클라우드에서 SMS 서비스를 활성화한 후 해야 할 일:

1. 애플리케이션 템플릿 3. Accesskey 생성 Alibaba Cloud에서 제공하는 하위 사용자를 통해 Accesskey를 생성할 수 있어 더욱 안전합니다. 4. Recharge

laravel에는 이전에 Alibaba Cloud를 사용하기 위한 확장 패키지가 많이 있습니다.

1. 터미널에서 프로젝트를 입력하거나 다음 명령을 실행하세요. composer require iscms/alisms-for-laravelcomposer require iscms/alisms-for-laravel

2,将:iscmsAlismsAlidayuServiceProvider::class加入configapp.php的Providers下 类似:

3,运行:php artisan vendor:publish,这样会在config文件夹下新增一个alisms.php文件,内容如下:

<?php
 return [
  &#39;KEY&#39; =>env(&#39;ALISMS_KEY&#39;,null),
  &#39;SECRETKEY&#39;=>env(&#39;ALISMS_SECRETKEY&#39;,null),
 ];

 4,在.env文件中写入:

ALISMS_KEY=23305789
ALISMS_SECRETKEY=**************

 注意:ALISMS_KEY和ALISMS_SECRETKEY就是阿里云生成的访问秘钥成对(AccessKeyId 与 AccessKeySecret)

开始使用:

 1,在您需要调用短信服务的控制器中引入SMS:

  use iscmsAlismsSendsmsPusher as Sms;

2. 변경: iscmsAlismsAlidayuServiceProvider::class 코드> configapp.php 제공자 아래에 다음과 같은 내용을 추가하세요:

3. 실행: php artisan Vendor:publish. 이렇게 하면 config 폴더 아래에 다음 내용이 포함된 alisms.php 파일이 추가됩니다:


public function __construct(Sms $sms)
 {
  $this->sms=$sms;
 }

 public function index()
 {
  $result=$this->sms->send("$phone","$name","$content","$code");
 }
  • 4 .env 파일에 입력:

  •    {
      code:"生成的验证码",
      product:"示例项目"
     }

  • 참고:

    ALISMS_KEY 및 ALISMS_SECRETKEY는 Alibaba Cloud(AccessKeyId 및 AccessKeySecret)에서 생성된 액세스 키 쌍입니다.
시작하기 :

1. SMS 서비스를 호출해야 하는 컨트롤러에 SMS를 도입하세요:

 iscmsAlismsSendsmsPusher를 SMS로 사용


composer dumpautoload


매개변수 설명: $phone ,$name,$ content, $code


$phone은 SMS를 받는 쪽의 SMS 번호를 의미하고,

$name은 SMS 서명을 의미합니다. http에서 Ali Dayu에서 SMS에 서명할 수 있습니다. ://www.alidayu.com/admin/service/sign


$content 찾기는 SMS 템플릿의 변수 콘텐츠를 나타냅니다. 예를 들어


에는 내 Ali Big Fish 템플릿

에 다음 SMS 템플릿이 있습니다.

템플릿 이름: 신원 확인 확인 코드

템플릿 ID: SMS_3910275

*템플릿 내용: 확인 코드 $[code], ${product} 신원 확인 중입니다. 다른 사람에게 말하지 마세요!


그럼 해당 $content는

<?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);
  }
 }


이제 정상적으로 사용할 수 있는데 왜 사용 중 콘솔에서 code=11의 에러 코드를 반환했는지 모르겠습니다. 타오바오에서는 ISV 권한 문제 때문이었습니다. 그 후 알리바바 클라우드에서 사용자 권한 제어를 최대로 열었지만 확장 패키지를 변경했는데도 여전히 문제가 발생하지 않았습니다. 아직 해결되지 않았으므로 기본적으로 laravel로 작성합니다.

먼저 Alibaba Cloud 공식 웹사이트에서 SMS 서비스용 SDK 패키지를 다운로드하세요.

SDK 도구 패키지에는 총 2개의 클래스 라이브러리가 포함되어 있습니다. 하나는 aliyun-php-sdk-core 패키지이고 다른 하나는 alicom-dysms-api 패키지입니다. 이 두 패키지를 프로젝트 클래스 라이브러리에 종속성으로 추가합니다.

Sdk 패키지의 PHP 버전을 선택하고 압축된 패키지의 압축을 풉니다. 여기에는 api_demo, api_sdk, msg_demo, msg_sdk

laravel 프로젝트의 app 폴더 아래에 libs라는 새 폴더를 생성합니다. libs 폴더에 복사된 api_sdk 및 msg_sdk를 추가합니다.

루트 디렉터리에서 작곡가.json 파일을 찾고, 작곡가.json에 정의된 classmap 옵션을 찾은 다음 가져온 두 개의 패키지를 작성합니다.

프로젝트 폴더에 터미널을 입력하고 다음을 실행합니다.

rrreee

이러한 방식으로 타사 클래스 라이브러리가 laravel에 도입되었습니다.

코드 파일 만들기
저는 간단히 캡슐화했습니다.

rrreee

그런 다음 인스턴스화하고 메서드를 호출하면 됩니다.

요약

🎜🎜🎜🎜🎜당신이 관심을 가질 만한 기사:🎜🎜🎜PHP receiveMail은 이메일 기능을 구현합니다. PHP 예제🎜🎜🎜🎜🎜PHP 공유 이미지 생성 방법 PHP 팁🎜🎜🎜 🎜🎜laravel 5.4+ 소개 PHP 예제를 사용하여 vue + vux + 요소의 환경 매칭 프로세스에🎜🎜🎜🎜🎜🎜🎜🎜🎜

위 내용은 laravel에서 SMS를 통해 인증 코드를 보내는 구현 방법의 PHP 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.