一、短信服务使用阿里大于提供的短信接口
阿里大于官方网站上的接入流程:
在阿里大于申请接口后,需要做以下操作:
- 申请签名
- 申请短信模板
- 创建Accesskey,可以通过权限最大的Accesskey创建子Accesskey,便于权限控制
- 充值,如果账户中余额不足的话,是发布出去短信的
二、在laravel中使用阿里大于接口
之前在laravel中使用composer安装阿里大于的扩展包,但是尝试之后,一直返回code=11的错误码,是扩展包的权限不足,具体原因还未找到
然后就在laravel引入官方提供的skd包,下面介绍具体在laravel中使用官方sdk包的过程:
- 从官网上下载php版短信服务的skd包,解压后有四个文件夹,分别是:api_demo,api_sdk,msg_demo,msg_sdk
- 在laravel中根目录下的 app文件夹下新建一个文件夹 libs,把api_sdk和msg_sdk复制到libs文件夹下.
- 利用composer自动加载文件 关于laravel利用composer自动加载介绍,请参考:http://laravelacademy.org/post/7074.html
- 找到项目根目录下的composer.json文件,利用composer的classmap选项加载
然后执行 composer dumpautoload
- 代码:
<?php //use 命名空间+类名 use Aliyun\Core\Config; //命名空间 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); } }之后用就实例化调用方法就可以了。
本文参考:http://blog.csdn.net/lishanleilixin/article/details/78126955