zoukankan      html  css  js  c++  java
  • PHP开发实用-阿里短信服务(Short Message Service)

    步骤 1 使用阿里云短信服务正常发短信需要

    • 短信签名
    • 短信模板
    1. 1申请短信签名
        根据用户属性来创建符合自身属性的签名信息。企业用户需要上传相关企业资质证明,个人用户需要上传证明个人身份的证明。
        短信签名需要审核通过后才可以使用。
      申请短信签名
      1.2 申请短信模板
        短信模板,即具体发送的短信内容。短信模板可以支持验证码、短信通知、推广短信、国际/港澳台消息四种模式。验证码和短信通知,通过变量替换实现个性短信定制。推广短信不支持在模板中添加变量。
        短信模板需要审核通过后才可以使用。
      申请短信模板

    步骤 2 获取阿里云访问密钥

    调用短信API还需要两个参数:

    • Access Key ID
    • Access Key Secret

      可以通过阿里云控制台的 秘钥管理页面 创建、管理所有的访问秘钥对,且保证它处于“启用”状态。由于访问秘钥是阿里云对 API 请求进行安全验证的关键因子,请妥善保管你的访问秘钥。如果某些秘钥对出现泄漏风险,建议及时删除该秘钥对并生成新的替代秘钥对。

    获取Access Key ID

    步骤 3 将阿里云短信整合进Laravel进行开发

    阿里云开发包
      下载阿里云提供的SDK开发并将api_sdk/lib/Core和api_sdk/lib/Api复制一份放到项目app/Tools/dysms下,没有的话需要自己创建。
    整合进Laravel
    打开项目根目录下的composer.json文件,在classmap,加上图示代码
    添加自动加载
    打开命令行工具在项目根目录输入:

    composer dumpautoload  
    

    执行成功如下图
    自动加载成功
    接下来就是正式的开发了,直接使用sdk里面导入包的方式进行引入:
    引入
    第一次postman测试运行报错如下:
    运行报错
    这是因为EndpointerProvider里面,没有setEndpoints就直接使用了getEndpointers,所以返回为空信息,setEndpoints操作是在EndpointConf中调用的,加载xml中的endpoints,在调用代码中加入

    // 手动加载endpoint
    EndpointConfig::load();
    

    再次运行代码发现报如下错误:
    代理报错
    这是因为代理的原因,注释一下代码就可以了:
    注释curl代理

    开发完整代码,github源码地址

    <?php
    
    namespace AppHttpControllersAdmin;
    
    use IlluminateHttpRequest;
    use AppHttpControllersController;
    use IlluminateSupportFacadesInput;
    
    use AliyunCoreProfileDefaultProfile;
    use AliyunCoreDefaultAcsClient;
    use AliyunApiSmsRequestV20170525SendSmsRequest;
    use AliyunCoreRegionsEndpointConfig;
    
    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和阿里短信好多坑啊,这么大的一个公司。

  • 相关阅读:
    day19(上)_IO流2(BufferedReaer,BufferedWriter,BufferedInputStream,BufferedOutputStream)
    day19(下)_IO流4(InputStreamReader,OutputStreamWriter,流操作规律总结)
    Synchronized锁 IT
    Linux查看端口信息命令 IT
    ReentrantLock锁 IT
    让网站实时生成多种电子书:jar、umd、chm、pdf、epub
    mysql性能的检查和调优方法
    新型的大型bbs架构(squid+nginx)
    uchome中的防反复提交机制
    joymobiler V2.7发布,支持pdf文档的生成
  • 原文地址:https://www.cnblogs.com/caiji/p/9007375.html
Copyright © 2011-2022 走看看