laravel 에서 문자 로 인증 코드 를 보 내 는 실현 방법

머리말
얼마 전 문자 인증 코드 기능 을 구현 하려 고 했 지만 오래 걸 렸 다.
먼저 저 는 아 리 클 라 우 드 의 문자 서비스 업 무 를 사 용 했 는데 첫 번 째 접속 절 차 는 다음 과 같 습 니 다.

아 리 운 에서 문자 서 비 스 를 개통 한 후에 해 야 할 일:
1,서명 신청  2,신청 양식   3.Accesskey 를 만 듭 니 다.알 리 클 라 우 드 가 제공 하 는 하위 사용 자 를 통 해 Accesskey 를 만 들 수 있 습 니 다.그러면 더욱 안전 합 니 다.  4,충전
laravel 은 문자 업 무 를 진행 하 는 확장 팩 이 많 습 니 다.전에 제 가 사용 한 것 은 아 리 보다 크 고 다음 과 같 습 니 다.
1.터미널 이나 명령 에서 항목 으로 들 어 갑 니 다.실행:composer require iscms/alisms-for-laravel2,iscms\Alisms\AlidayuServiceProvider::classconfig\app.php 를 추가 한 Providers 에서 유사 합 니 다:

3.실행:php artisan vendor:publishconfig 폴 더 에 alisms.phop 파일 을 추가 합 니 다.내용 은 다음 과 같 습 니 다.

<?php
 return [
  'KEY' =>env('ALISMS_KEY',null),
  'SECRETKEY'=>env('ALISMS_SECRETKEY',null),
 ];
 4..env 파일 에 쓰기:

ALISMS_KEY=23305789
ALISMS_SECRETKEY=**************
 주의:ALISMSKEY 와 ALISMSSECRETKEY 는 바로 아 리 클 라 우 드 가 생 성 한 방문 비밀 키 쌍(AccessKeyId 와 AccessKeySecret)입 니 다.
사용 시작:
 1.문자 서 비 스 를 호출 해 야 하 는 컨트롤 러 에 SMS 를 도입 합 니 다.
   use iscms\Alisms\SendsmsPusher as Sms;

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

 public function index()
 {
  $result=$this->sms->send("$phone","$name","$content","$code");
 }
매개 변수 설명:$phone,$name,$content,$code
  • $phone 은 문자 메 시 지 를 받 는 측의 문자 번 호 를 가리킨다.
  • $name 문자 서명 은 아 리 대 어 문자 로 서명 할 수 있 습 니 다.http://www.alidayu.com/admin/service/sign 찾기
  • $content 는 문자 템 플 릿 의 변수 내용 을 말 합 니 다.예 를 들 어
  • 자신의 아 리 대 어 템 플 릿 에 다음 문자 템 플 릿 이 있 습 니 다.
    템 플 릿 이름:인증 코드
    템 플 릿 ID:SMS3910275
    *템 플 릿 내용:인증 코드$[code],${product}인증 을 진행 하고 있 습 니 다.다른 사람 에 게 말 하지 마 세 요!
    그러면 대응 하 는 우리 의$content 는
    
       {
      code:"      ",
      product:"    "
     }
    여기 서 정상적으로 사용 할 수 있 습 니 다.그런데 왜 그런 지 모 르 겠 습 니 다.제 가 사용 하 는 과정 에서 콘 솔 은 code=11 의 오류 코드 를 되 돌려 주 었 습 니 다.타 오 바 오 에서 확인 한 후에 isv 권한 의 문제 때 문 입 니 다.그 후에 저 는 아 리 클 라 우 드 에서 사용자 의 권한 을 최대 로 제 어 했 지만 이런 오류 가 발생 할 수 있 습 니 다.확장 팩 을 바 꾸 었 는 지 이 문 제 는 아직 해결 되 지 않 았 습 니 다.그래서 나 는 laravel 에서 원생 을 썼 다.
    먼저 아 리 클 라 우 드 홈 페이지 에서 문자 서비스 에 관 한 sdk 가방 을 다운로드 합 니 다.
    SDK 패키지 에는 모두 2 개의 라 이브 러 리 가 포함 되 어 있 습 니 다.하 나 는 aliyun-phop-sdk-core 패키지 이 고,다른 하 나 는 alicom-dysms-api 패키지 입 니 다.이 두 패 키 지 를 프로젝트 라 이브 러 리 에 추가 하여 의존 합 니 다.
    PHP 버 전의 sdk 패 키 지 를 선택 하면 압축 패 키 지 를 풀 고 네 개의 폴 더 가 있 습 니 다:apidemo,api_sdk,msg_demo,msg_sdk
    laravel 프로젝트 의 app 폴 더 아래 libs 라 는 폴 더 를 새로 만 들 고 apisdk 와 msgsdk 를 libs 폴 더 로 복사 합 니 다.
    루트 디 렉 터 리 에 있 는 coposer.json 파일 을 찾 고 coposer.json 에서 정의 하 는 classmap 옵션 을 찾 아 도입 한 두 개의 가방 을 기록 합 니 다.

    터미널 항목 폴 더 에 들 어가 서 실행:
    
    composer dumpautoload
    이렇게 해서 laravel 에 제3자 라 이브 러 리 를 도입 했다.
    코드 파일 생 성
    나 는 그것 을 간단하게 포장 했다.
    
    <?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);
      }
     }
    그 다음 에 예화 호출 방법 을 사용 하면 됩 니 다.
    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기