免费发送短信验证码

jerry thinkphp 2015年11月19日 收藏
调用短信平台,免费发送短信验证码,前提是你必须注册成为短信平台开发者。获得开发者ID.
前天弄了个短信验证的东西,有免费的短信验证真的很不错,对于做开发的人来说是个好消息,感谢电信能力开放平台的贡献。
以下是我自己调用电信短信验证码接口做的一个短信验证类,拿出来跟大家分享一下,不好勿喷。
  1. <?php

  2. class PHPSMS
  3. {

  4.  

  5.  
  6.     public function send($mobile, $message)
  7.     {
  8.         $App_Id=C('AppId');
  9.         $App_Secret=C('AppSecret');
  10.         $access_token=$this->get_Access_token();
  11.         $token=$this->getToken();
  12.         $timestamp = date('Y-m-d H:i:s');
  13.         $url="http://api.189.cn/v2/dm/randcode/sendSms";

  14.         $param['app_id']= "app_id=".$App_Id;
  15.         $param['access_token'] = "access_token=".$access_token;
  16.         $param['timestamp'] = "timestamp=".$timestamp;
  17.         $param['phone']="phone=".$mobile;
  18.         $param['token']="token=".$token;
  19.         $param['randcode']="randcode=".$message;
  20.         ksort($param);
  21.         $plaintext = implode("&",$param);
  22.         $param['sign'] = "sign=".rawurlencode(base64_encode(hash_hmac("sha1", $plaintext, $App_Secret, $raw_output=True)));
  23.         ksort($param);

  24.         $result=$this->curl_post($url,implode("&",$param));
  25.         $resultArr=json_decode($result);

  26.         

  27.     }
  28.     //获取信任码
  29.     public function getToken(){

  30.         $App_Id=C('AppId');
  31.         //dump($App_Id);
  32.         $App_Secret=C('AppSecret');
  33.          $access_token=$this->get_Access_token();
  34.          $timestamp = date('Y-m-d H:i:s');
  35.         $url = "http://api.189.cn/v2/dm/randcode/token?";

  36.         $param['app_id']= "app_id=".$App_Id;
  37.         $param['access_token'] = "access_token=".$access_token;
  38.         $param['timestamp'] = "timestamp=".$timestamp;
  39.         ksort($param);
  40.         $plaintext = implode("&",$param);
  41.         $param['sign'] = "sign=".rawurlencode(base64_encode(hash_hmac("sha1", $plaintext, $App_Secret, $raw_output=True)));
  42.         ksort($param);
  43.         $url .= implode("&",$param);
  44.         //$result = curl_get($url);
  45.        
  46.         $r=$this->curl_get($url);
  47.         $result=json_decode($r,true);
  48.         return $result['token'];
  49.         
  50.     }
  51.     //获取访问令牌 
  52.     public function get_Access_token(){
  53.         
  54.         $App_Id=C('AppId');
  55.         $App_Secret=C('AppSecret');
  56.         $grant_type='client_credentials';
  57.        
  58.         $send = 'app_id='.$App_Id.'&app_secret='.$App_Secret.'&grant_type='.$grant_type;
  59.    
  60.         $access_token = $this->curl_post("https://oauth.api.189.cn/emp/oauth2/v3/access_token", $send);
  61.         $access_token = json_decode($access_token, true);
  62.        
  63.         return $access_token['access_token'];
  64.   
  65.     }

  66. function curl_post($url,$data){ // 模拟提交数据函数      
  67.     $curl = curl_init(); // 启动一个CURL会话      
  68.     curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址                  
  69.     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查      
  70.     curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在      
  71.     curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器      
  72.     curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转      
  73.     curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer      
  74.     curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求      
  75.     curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包      
  76.     curl_setopt($curl, CURLOPT_COOKIEFILE, $GLOBALS['cookie_file']); // 读取上面所储存的Cookie信息      
  77.     curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环      
  78.     curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容      
  79.     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回      
  80.     $tmpInfo = curl_exec($curl); // 执行操作      
  81.     if (curl_errno($curl)) {      
  82.        echo 'Errno'.curl_error($curl);      
  83.     }      
  84.     curl_close($curl); // 关键CURL会话      
  85.     return $tmpInfo; // 返回数据      
  86.   }

  87.     /**
  88.      * 模拟提交参数,支持https提交 可用于各类api请求
  89.      * @param string $url : 提交的地址
  90.      * @param array $data :POST数组
  91.      * @param string $method : POST/GET,默认GET方式
  92.      * @return mixed
  93.      */
  94.     function curl_get($url, $data='', $method='GET'){ 
  95.         $curl = curl_init(); // 启动一个CURL会话
  96.         curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
  97.         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查
  98.         curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在
  99.         curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
  100.         curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
  101.         curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
  102.         if($method=='POST'){
  103.             curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
  104.             if ($data != ''){
  105.                 curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
  106.             }
  107.         }
  108.         curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
  109.         curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
  110.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
  111.         $tmpInfo = curl_exec($curl); // 执行操作
  112.         curl_close($curl); // 关闭CURL会话
  113.         return $tmpInfo; // 返回数据
  114.     }
  115.        
  116. }

附件sendSms.zip ( 2.41 MB 下载:598 次 )