laravel框架使用阿里短信接入

laravel框架使用阿里短信接入,第1张

laravel框架使用阿里短信接入
EG: accessKeyid和accessKeySecret还有模板ID、签名名称这几项必要参数自己去阿里云获取


一、下载SDK和demo


下载并解压后

在laravel框架的app目录下创建libs/Aliyun目录并将上面两个文件夹复制进去,如果按照此方法则不需要改命名空间,如果你放在别的地方就根据你的路径修改一下命名空间


在根目录的composer.json里添加如下配置:


然后在cmd中进入根目录然后进行
composer dumpautoload

执行后若出现如下图所示,则表示更新成功


二、代码部分

1、首先引入文件并载入短信平台节点

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; Config::load();

2、发送代码

public function send(Request $request)
{
$phone = $request['phone'];//接收的手机号
//print_r($phone);die;
$code = rand(100000,999999);//随机生成的6位验证码
session('code',$code);//将随机数写入session
session('mphone',$phone);//写入获取的手机号
session('codetime',time());//写入当前时间
$response = SmsController::sendSms(
"你的签名",//signName
"你的短信模板code",//templateCode
$phone,//手机号
Array( // 短信模板中字段的值
"code"=>$code,
)
);
$row = [];
if ($response->Code == 'OK')
{
$row = ['status'=>1,'code'=>$code];
}
else
{
$row = ['status'=>0,'code'=>$response->Code,'message'=>$response->Message];
}
return json_encode($row);
} static $acsClient = null; /**
* 取得AcsClient
*
* @return DefaultAcsClient
*/
public static function getAcsClient() {
//产品名称:云通信流量服务API产品,开发者无需替换
$product = "深呼吸app"; //产品域名,开发者无需替换
$domain = "dysmsapi.aliyuncs.com"; // TODO 此处需要替换成开发者自己的AK (https://ak-console.aliyun.com/)
$accessKeyId = "你自己的AccessKeyId"; // AccessKeyId $accessKeySecret = "你自己的AccessKeySecret"; // AccessKeySecret // 暂时不支持多Region
$region = "cn-hangzhou"; // 服务结点
$endPointName = "cn-hangzhou"; if(static::$acsClient == null)
{
//初始化acsClient,暂不支持region化
$profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret); EndpointConfig::load();
DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);
// 增加服务结点
// 初始化AcsClient用于发起请求
static::$acsClient = new DefaultAcsClient($profile);
}
return static::$acsClient;
} /**
* 发送短信
*
* @param string $signName <p>
* 必填, 短信签名,应严格"签名名称"填写,参考:<a href="https://dysms.console.aliyun.com/dysms.htm#/sign">短信签名页</a>
* </p>
* @param string $templateCode <p>
* 必填, 短信模板Code,应严格按"模板CODE"填写, 参考:<a href="https://dysms.console.aliyun.com/dysms.htm#/template">短信模板页</a>
* (e.g. SMS_0001)
* </p>
* @param string $phoneNumbers 必填, 短信接收号码 (e.g. 12345678901)
* @param array|null $templateParam <p>
* 选填, 假如模板中存在变量需要替换则为必填项 (e.g. Array("code"=>"12345", "product"=>"阿里通信"))
* </p>
* @param string|null $outId [optional] 选填, 发送短信流水号 (e.g. 1234)
* @param string|null $smsUpExtendCode [optional] 选填,上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
* @return stdClass
*/
public static function sendSms($signName, $templateCode, $phoneNumbers, $templateParam = null, $outId = null, $smsUpExtendCode = null) { // 初始化SendSmsRequest实例用于设置发送短信的参数
$request = new SendSmsRequest(); // 必填,设置雉短信接收号码
$request->setPhoneNumbers($phoneNumbers); // 必填,设置签名名称
$request->setSignName($signName); // 必填,设置模板CODE
$request->setTemplateCode($templateCode); // 可选,设置模板参数
if($templateParam) {
$request->setTemplateParam(json_encode($templateParam));
}
// 可选,设置流水号
if($outId) {
$request->setOutId($outId);
}
// 选填,上行短信扩展码
if($smsUpExtendCode) {
$request->setSmsUpExtendCode($smsUpExtendCode);
}
// 发起访问请求
$acsResponse = static::getAcsClient()->getAcsResponse($request);
// 打印请求结果
// var_dump($acsResponse);
return $acsResponse;
}

有的人会出现:

发现问题在 app/libs/Aliyun/Core/DefaultAcsClient.doActionImpl(),是程序主动抛出的错误。


官方注释说 $domain是产品域名,开发者无需替换。


but。








没替换,报个什么错啊。


既然不需要,就直接在/DefaultAcsClient.doActionImpl()把$domain 写死

然后测试接口会返回结果:

这样就发送成功了


					
										


					

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/586965.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存