laravel 에서 문자 로 인증 코드 를 보 내 는 실현 방법
얼마 전 문자 인증 코드 기능 을 구현 하려 고 했 지만 오래 걸 렸 다.
먼저 저 는 아 리 클 라 우 드 의 문자 서비스 업 무 를 사 용 했 는데 첫 번 째 접속 절 차 는 다음 과 같 습 니 다.
아 리 운 에서 문자 서 비 스 를 개통 한 후에 해 야 할 일:
1,서명 신청 2,신청 양식 3.Accesskey 를 만 듭 니 다.알 리 클 라 우 드 가 제공 하 는 하위 사용 자 를 통 해 Accesskey 를 만 들 수 있 습 니 다.그러면 더욱 안전 합 니 다. 4,충전
laravel 은 문자 업 무 를 진행 하 는 확장 팩 이 많 습 니 다.전에 제 가 사용 한 것 은 아 리 보다 크 고 다음 과 같 습 니 다.
1.터미널 이나 명령 에서 항목 으로 들 어 갑 니 다.실행:
composer require iscms/alisms-for-laravel
2,iscms\Alisms\AlidayuServiceProvider::class
config\app.php 를 추가 한 Providers 에서 유사 합 니 다:3.실행:
php artisan vendor:publish
config 폴 더 에 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템 플 릿 이름:인증 코드
템 플 릿 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);
}
}
그 다음 에 예화 호출 방법 을 사용 하면 됩 니 다.총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.