阿里通信,手机短信提醒PHP代码

阿里手机短信提醒PHP代码实例(已验证)

//给用户发手机短信提醒
    $params = array ();
// *** 需用户填写部分购买后这些参数依据链接找,必须要一一对应,不然会报错 ***
// fixme 必填: 请参阅 https://ak-console.aliyun.com/ 取得您的AK信息
            $accessKeyId = "******";
            $accessKeySecret = "************";
// fixme 必填: 短信接收号码
            $params["PhoneNumbers"] = $phone_other;
// 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"] = "********";
// fixme 可选: 设置模板参数, 假如模板中存在变量需要替换则为必填项
            $pdname=$action_list['typeName'];
            $params['TemplateParam'] = Array (
                "code" => "12345",
                "product" => "阿里通信",
                "mtname"=>$username_other,
                "pdname"=>$pdname,
                "pdtime"=>$pay_timed,
            );
// 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);
            }
// 此处可能会抛出异常,注意catch
    $content = request(
        $accessKeyId,
        $accessKeySecret,
        "dysmsapi.aliyuncs.com",
        array_merge($params, array(
            "RegionId" => "cn-hangzhou",
            "Action" => "SendSms",
            "Version" => "2017-05-25",
        ))
    // fixme 选填: 启用https
    // ,true

);

/**
 * 生成签名并发起请求
 *
 * @param $accessKeyId string AccessKeyId (https://ak-console.aliyun.com/)
 * @param $accessKeySecret string AccessKeySecret
 * @param $domain string API接口所在域名
 * @param $params array API具体参数
 * @param $security boolean 使用https
 * @return bool|\stdClass 返回API接口调用结果,当发生错误时返回false
 */
function request($accessKeyId, $accessKeySecret, $domain, $params, $security=false) {
    $apiParams = array_merge(array (
        "SignatureMethod" => "HMAC-SHA1",
        "SignatureNonce" => uniqid(mt_rand(0,0xffff), true),
        "SignatureVersion" => "1.0",
        "AccessKeyId" => $accessKeyId,
        "Timestamp" => gmdate("Y-m-d\TH:i:s\Z"),
        "Format" => "JSON",
    ), $params);
    ksort($apiParams);
    $sortedQueryStringTmp = "";
    foreach ($apiParams as $key => $value) {
        $sortedQueryStringTmp .= "&" .encode($key) . "=" .encode($value);
    }
    $stringToSign = "GET&%2F&" .encode(substr($sortedQueryStringTmp, 1));
    $sign = base64_encode(hash_hmac("sha1", $stringToSign, $accessKeySecret . "&",true));
    $signature = encode($sign);
    $url = ($security ? 'https' : 'http')."://{$domain}/?Signature={$signature}{$sortedQueryStringTmp}";
    try {
        $content = fetchContent($url);
        return json_decode($content);
    } catch( \Exception $e) {
        return false;
    }
}
function encode($str)
{
    $res = urlencode($str);
    $res = preg_replace("/\+/", "%20", $res);
    $res = preg_replace("/\*/", "%2A", $res);
    $res = preg_replace("/%7E/", "~", $res);
    return $res;
}
function fetchContent($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        "x-sdk-client" => "php/2.0.0"
    ));
    if(substr($url, 0,5) == 'https') {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    }
    $rtn = curl_exec($ch);
    if($rtn === false) {
        trigger_error("[CURL_" . curl_errno($ch) . "]: " . curl_error($ch), E_USER_ERROR);
    }
    curl_close($ch);
    return $rtn;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用 PHP 发送阿里云短信的示例代码: ```php // 替换成你的 AccessKeyId 和 AccessKeySecret $accessKeyId = "your_access_key_id"; $accessKeySecret = "your_access_key_secret"; // 签名和模板编号 $signName = "your_sign_name"; $templateCode = "your_template_code"; // 手机号码和验证码 $phoneNumbers = "18888888888"; $verifyCode = "123456"; // 构建请求参数 $params = array ( "code" => $verifyCode ); // 发起请求 $helper = new SmsHelper($accessKeyId, $accessKeySecret); $response = $helper->send($phoneNumbers, $signName, $templateCode, $params); // 处理响应结果 if ($response->Code == 'OK') { // 发送成功 } else { // 发送失败 } // SmsHelper 类定义 class SmsHelper { private $accessKeyId; private $accessKeySecret; private $serverUrl = "http://dysmsapi.aliyuncs.com"; public function __construct($accessKeyId, $accessKeySecret) { $this->accessKeyId = $accessKeyId; $this->accessKeySecret = $accessKeySecret; } public function send($phoneNumbers, $signName, $templateCode, $params) { $paramsJson = json_encode($params); $paramsArray = array ( "PhoneNumbers" => $phoneNumbers, "SignName" => $signName, "TemplateCode" => $templateCode, "TemplateParam" => $paramsJson, "RegionId" => "cn-hangzhou", "Action" => "SendSms", "Version" => "2017-05-25" ); $paramsString = http_build_query($paramsArray); $signature = $this->computeSignature($paramsArray); $url = "{$this->serverUrl}/?Signature={$signature}&{$paramsString}"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $response = curl_exec($ch); curl_close($ch); return json_decode($response); } private function computeSignature($params) { ksort($params); $canonicalQueryString = http_build_query($params); $stringToSign = "GET&%2F&" . urlencode($canonicalQueryString); $signature = base64_encode(hash_hmac("sha1", $stringToSign, $this->accessKeySecret . "&", true)); return urlencode($signature); } } ``` 在上面的代码中,`SmsHelper` 类封装了发送短信的方法,其中 `send` 方法接受手机号码、签名、模板编号和消息参数作为参数,返回一个响应对象。你只需要将代码中的占位符替换成你自己的参数即可在你的应用程序中使用这个类发送短信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值