基于微擎开发 发送短信验证码

为什么上不了bet356 通过为什么上不了bet356

基于微擎开发 发送短信验证码

在微擎的基础上开发一个PC 官网,发送验证码跟内部插件相互独立,以下是简单整理。

? 一、? 在framework文件夹内 添加alisms.calss.php 和 signaturehelper.class.php:

alisms.class.php

$model),'sms_code',1);//这里是本地自己数据库拿的
        $params["TemplateCode"] = $model;
 
        // fixme 可选: 设置模板参数, 假如模板中存在变量需要替换则为必填项
        $params['TemplateParam'] = Array (
            "code" => $code['code']
        );
 
        // fixme 可选: 设置发送短信流水号
        $params['OutId'] = "";
 
        // fixme 可选: 上行短信扩展码, 扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段
        $params['SmsUpExtendCode'] = "";
 
 
        // *** 需用户填写部分结束, 以下代码若无必要无需更改 ***
        if(!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {
            $params["TemplateParam"] = json_encode($params["TemplateParam"]);
        }
 
        // 初始化SignatureHelper实例用于设置参数,签名以及发送请求
        load()->classs('signaturehelper');
        $helper = new Signaturehelper();
 
        // 此处可能会抛出异常,注意catch
        $content = $helper->request(
            $accessKeyId,
            $accessKeySecret,
            "dysmsapi.aliyuncs.com",
            array_merge($params, array(
                "RegionId" => "cn-hangzhou",
                "Action" => "SendSms",
                "Version" => "2018-11-20",
            ))
        );
 
        return  $content;
    }
}

signaturehelper.class.php

 "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 .= "&" . $this->encode($key) . "=" . $this->encode($value);
        }
 
        $stringToSign = "GET&%2F&" . $this->encode(substr($sortedQueryStringTmp, 1));
 
        $sign = base64_encode(hash_hmac("sha1", $stringToSign, $accessKeySecret . "&",true));
 
        $signature = $this->encode($sign);
 
        $url = "http://{$domain}/?Signature={$signature}{$sortedQueryStringTmp}";
 
        try {
            $content = $this->fetchContent($url);
            return json_decode($content);
        } catch( \Exception $e) {
            return false;
        }
    }
 
    private function encode($str)
    {
        $res = urlencode($str);
        $res = preg_replace("/\+/", "%20", $res);
        $res = preg_replace("/\*/", "%2A", $res);
        $res = preg_replace("/%7E/", "~", $res);
        return $res;
    }
 
    private function fetchContent($url) {
        if(function_exists("curl_init")) {
            $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"
            ));
            $rtn = curl_exec($ch);
 
            if($rtn === false) {
                trigger_error("[CURL_" . curl_errno($ch) . "]: " . curl_error($ch), E_USER_ERROR);
            }
            curl_close($ch);
 
            return $rtn;
        }
 
        $context = stream_context_create(array(
            "http" => array(
                "method" => "GET",
                "header" => array("x-sdk-client: php/2.0.0"),
            )
        ));
 
        return file_get_contents($url, false, $context);
    }
 
}

二、然后在你的对应控制器中 加入

load()->classs('alisms');
$alisms = new SmsDemo($to, $model, array('code'=>$code));//参数分别是:发送对象,模版,验证码
$send = $alisms->send_sms($to, $model,array('code'=>$code));

关于作者

admin administrator

要发表评论,您必须先登录