php 实例 - 阿里云手机短信验证码 SDK 轻量版

发布时间:2018-03-26 编辑:小张个人博客 查看次数:7247

阿里云短信服务

阿里云短信服务是指通过调用阿里云短信发送API,将指定短信内容发送给指定手机用户。用户收到的短信来自106开头的号码,短信的内容多用于企业向用户传递验证码、系统通知、会员服务等信息。

阿里云短信验证码使用流程见下图:

阿里云短信验证码使用流程

SDK及DEMO下载:

阿里云短信验证 SDK 轻量版(轻量版支持 php > = 5.4,使用方法:先运行 Test.php 测试 PHP 环境,测试成功后再运行 Demo )

https://help.aliyun.com/document_detail/55359.html?spm=a2c4g.11186623.2.8.4UldXI

阿里云短信发送 API ( SendSms ) - PHP

发送短信接口(SendSms) 操作步骤如下:

步骤 1 创建阿里云账号

为了访问短信服务,您需要有一个阿里云账号。如果没有,可首先按照如下步骤创建阿里云账号:

1、访问阿里云官方网站,免费注册阿里云账号 。

2、按照屏幕提示完成注册流程并进行实名认证,短信服务只支持实名认证用户使用。为了更好地使用阿里云服务,建议尽快完成实名认证,否则部分阿里云服务将无法使用。具体实名认证流程。

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

为了使用短信发送 API - PHP SDK,您必须申请阿里云的访问密钥。

阿里云访问秘钥是阿里云为用户使用 API(非控制台)来访问其云资源设计的“安全口令”。您可以用它来签名 API 请求内容以通过服务端的安全验证。

该访问秘钥成对(AccessKeyIdAccessKeySecret)生成和使用。每个阿里云用户可以创建多对访问秘钥,且可随时启用(Active)禁用(Inactive)或者删除已经生成的访问秘钥对。

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

步骤 3 在控制台完成模板与签名的申请,获得调用接口必备的参数

短信签名

根据用户属性来创建符合自身属性的签名信息。企业用户需要上传相关企业资质证明,个人用户需要上传证明个人身份的证明。

短信模板

短信模板,即具体发送的短信内容。

短信模板可以支持验证码、短信通知、推广短信三种模式。验证码和短信通知,通过变量替换实现个性短信定制。推广短信不支持在模板中添加变量。

注:短信签名和短信模板需要审核通过后才可以使用。

为了成功发送一条短信通知,您至少需要完成以下步骤

1、在控制台完成短信签名与短信模板的申请,获得调用接口必备的参数。

2、在“短信签名”页面完成签名的申请,获得短信签名的字符串。

3、在“短信模板”页面完成模板的申请,获得模板ID。

传入参数列表:

参数列表

返回参数列表:

返回参数列表

编写样例程序如下:

<?php

require_once "/SignatureHelper.php";

/**
 * 发送短信
 */
function aliSendSms() {
    $params = array ();

    // *** 需用户填写部分 ***

    // fixme 必填: 请参阅 https://ak-console.aliyun.com/ 取得您的AK信息
    $accessKeyId = "LTA********Mu";
    $accessKeySecret = "VyibNxdo*************sujgCU";

    // fixme 必填: 短信接收号码
    $params["PhoneNumbers"] = 173*****2309;

    // fixme 必填: 短信签名,应严格按"签名名称"填写,请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign
    $params["SignName"] = "小张个人博客";

    // fixme 必填: 短信模板Code,应严格按"模板CODE"填写, 请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/template
    $params["TemplateCode"] = "SMS_128****06";
   
   // 生成随机 4 位数字 使用系统函数执行效率会高许多
     $code  =  str_pad(mt_rand(0, pow(10, 4) - 1), 4, '0', STR_PAD_LEFT); 
      session_start();
     $_SESSION['moblie_code'] = $code;
    // fixme 可选: 设置模板参数, 假如模板中存在变量需要替换则为必填项
    $params['TemplateParam'] = Array (
        "code" => $code
    );
    // fixme 可选: 设置发送短信流水号
    $params['OutId'] = "12345";

    // fixme 可选: 上行短信扩展码, 扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段
    $params['SmsUpExtendCode'] = "1234567";


    // *** 需用户填写部分结束, 以下代码若无必要无需更改 ***
    if(!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {
        $params["TemplateParam"] = json_encode($params["TemplateParam"], JSON_UNESCAPED_UNICODE);
    }
    // 初始化SignatureHelper实例用于设置参数,签名以及发送请求
    $helper = new SignatureHelper();
    // 此处可能会抛出异常,注意catch
    $content = $helper->request(
        $accessKeyId,
        $accessKeySecret,
        "dysmsapi.aliyuncs.com",
        array_merge($params, array(
            "RegionId" => "cn-hangzhou",
            "Action" => "SendSms",
            "Version" => "2017-05-25",
        ))
        // fixme 选填: 启用https
        // ,true
    );
  return  $content;
}

// 验证发送短信(SendSms)接口
print_r(aliSendSms());

阿里云短信验证码成功发送

阿里云短信验证码

错误码列表

Code描述
OK请求成功
isp.RAM_PERMISSION_DENYRAM权限DENY
isv.OUT_OF_SERVICE业务停机
isv.PRODUCT_UN_SUBSCRIPT未开通云通信产品的阿里云客户
isv.PRODUCT_UNSUBSCRIBE产品未开通
isv.ACCOUNT_NOT_EXISTS账户不存在
isv.ACCOUNT_ABNORMAL账户异常
isv.SMS_TEMPLATE_ILLEGAL短信模板不合法
isv.SMS_SIGNATURE_ILLEGAL短信签名不合法
isv.INVALID_PARAMETERS参数异常
isp.SYSTEM_ERROR系统错误
isv.MOBILE_NUMBER_ILLEGAL非法手机号
isv.MOBILE_COUNT_OVER_LIMIT手机号码数量超过限制
isv.TEMPLATE_MISSING_PARAMETERS 模板缺少变量
isv.BUSINESS_LIMIT_CONTROL业务限流
isv.INVALID_JSON_PARAMJSON参数不合法,只接受字符串值
isv.BLACK_KEY_CONTROL_LIMIT黑名单管控
isv.PARAM_LENGTH_LIMIT参数超出长度限制
isv.PARAM_NOT_SUPPORT_URL不支持URL
isv.AMOUNT_NOT_ENOUGH账户余额不足

注:1、如传递中文出现乱码,请检查编码格式,建议使用utf-8


时间戳格式:

格式为:yyyy-MM-dd’T’HH:mm:ss’Z’;时区为:GMT


短信内容计算规则?

短信字数=短信模板内容字数 + 签名字数

短信字数<=70个字数,按照70个字数一条短信计算

短信字数>70个字数,即为长短信,按照67个字数记为一条短信计算

短信的计费模式?

若短信发送5分钟后还未返回状态,将先扣费,实际返回状态后根据失败条数进行短信量返补。

按阶梯计费,用的越多单价越低;月消费金额=月累计短信成功发送量所在的档位*月累计短信发送成功量;

举例:1-10万单价是0.045元/条,10-30万单价是0.04元/条,若您当月累计用了15万,则消费金额为15万*0.04元/条

短信发送失败,还是会扣费吗?

接口调用失败及运营商返回失败状态,都不会扣费.




出处:小张个人博客

网址:http://blog.023xs.cn/

您的支持是对博主最大的鼓励,感谢您的认真阅读。欢迎转载,但请保留该声明。

顶部