调用短信API还须要两个参数:php
能够经过阿里云控制台的 秘钥管理页面 建立、管理全部的访问秘钥对,且保证它处于“启用”状态。因为访问秘钥是阿里云对 API 请求进行安全验证的关键因子,请妥善保管你的访问秘钥。若是某些秘钥对出现泄漏风险,建议及时删除该秘钥对并生成新的替代秘钥对。laravel
下载阿里云提供的SDK开发并将api_sdk/lib/Core和api_sdk/lib/Api复制一份放到项目app/Tools/dysms下,没有的话须要本身建立。
打开项目根目录下的composer.json文件,在classmap,加上图示代码
打开命令行工具在项目根目录输入:git
composer dumpautoload
执行成功以下图
接下来就是正式的开发了,直接使用sdk里面导入包的方式进行引入:
第一次postman测试运行报错以下:
这是由于EndpointerProvider里面,没有setEndpoints就直接使用了getEndpointers,因此返回为空信息,setEndpoints操做是在EndpointConf中调用的,加载xml中的endpoints,在调用代码中加入github
// 手动加载endpoint EndpointConfig::load();
再次运行代码发现报以下错误:
这是由于代理的缘由,注释一下代码就能够了:
shell
开发完整代码,github源码地址:json
<?php namespace App\Http\Controllers\Admin; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Input; use Aliyun\Core\Profile\DefaultProfile; use Aliyun\Core\DefaultAcsClient; use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest; use Aliyun\Core\Regions\EndpointConfig; class Dysms extends Controller { static $acsClient = null; //阿里短信 public function Dysms() { // 初始化SendSmsRequest实例用于设置发送短信的参数 $request = new SendSmsRequest(); //可选-启用https协议 //$request->setProtocol("https"); // 必填,设置短信接收号码 $request->setPhoneNumbers(Input::get('phone')); // 必填,设置签名名称,应严格按"签名名称"填写,请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign $request->setSignName("签名"); // 必填,设置模板CODE,应严格按"模板CODE"填写, 请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/template $request->setTemplateCode("模版CODE"); // 可选,设置模板参数, 假如模板中存在变量须要替换则为必填项 $request->setTemplateParam(json_encode(array( // 短信模板中字段的值 "code" => rand(000000, 999999), "product" => "dsd" ), JSON_UNESCAPED_UNICODE)); // 可选,设置流水号 $request->setOutId("1234567"); // 选填,上行短信扩展码(扩展码字段控制在7位或如下,无特殊需求用户请忽略此字段) // $request->setSmsUpExtendCode("1234567"); // 发起访问请求 $acsResponse = static::getAcsClient()->getAcsResponse($request); //打印执行结果 dd($acsResponse); // 执行成功后的返回状态 // {#1538 // +"Message": "OK" // +"RequestId": "0CE56BFE-5E9A-4F3F-8AEC-5C524720CE83" // +"BizId": "480519725607521112^0" // +"Code": "OK" // } } /** * 取得AcsClient * * @return DefaultAcsClient */ public static function getAcsClient() { //产品名称:云通讯流量服务API产品,开发者无需替换 $product = "Dysmsapi"; //产品域名,开发者无需替换 $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); // 手动加载endpoint EndpointConfig::load(); // 增长服务结点 DefaultProfile::addEndpoint($endPointName, $region, $product, $domain); // 初始化AcsClient用于发起请求 static::$acsClient = new DefaultAcsClient($profile); } return static::$acsClient; } }
PS:最后不得不吐槽下,阿里用OSS和阿里短信好多坑啊,这么大的一个公司。api