您現在的位置是:首頁 > PHP類庫

云信PHP短信發送接口類詳解說明

李清波2017-03-08PHP類庫

/*--------------------------------

功能: 使用smsapi.class.php類發送短信

說明: http://api.sms.cn/sms/?ac=send&uid=用戶賬號&pwd=MD5位32密碼&mobile=號碼&content=內容

官網: www.sms.cn

狀態: {"stat":"100","message":"發送成功"}


100 發送成功

101 驗證失敗

102 短信不足

103 操作失敗

104 非法字符

105 內容過多

106 號碼過多

107 頻率過快

108 號碼內容空

109 賬號凍結

112 號碼錯誤

116 禁止接口發送

117 綁定IP不正確

161 未添加短信模板

162 模板格式不正確

163 模板ID不正確

164 全文模板不匹配

--------------------------------*/


變量模板發送示例

demo.php

<?php
include 'smsapi.class.php';

//接口賬號
$uid = 'testsms';

//登錄密碼
$pwd = 'test22224234';

/**
* 實例化接口
*
* @param string $uid 接口賬號
* @param string $pwd 接口密碼
*/
$api = new SmsApi($uid,$pwd);


/*
* 變量模板發送示例
* 模板內容:您的驗證碼是:{$code},對用戶{$username}操作綁定手機號,有效期為5分鐘。如非本人操作,可不用理會。【云信】
* 變量模板ID:100003
*/

//發送的手機 多個號碼用,英文逗號隔開

$mobile = '15900000000';

//短信內容參數
$contentParam = array(
	'code'		=> $api->randNumber(),
	'username'	=> '您好'
	);

//變量模板ID
$template = '100005';

//發送變量模板短信
$result = $api->send($mobile,$contentParam,$template);

if($result['stat']=='100') {
	echo '發送成功';
} else {
	echo '發送失敗:'.$result['stat'].'('.$result['message'].')';
}


全文模板發送示例

demo2.php

<?php
include 'smsapi.class.php';

//接口賬號
$uid = 'testsms';

//登錄密碼
$pwd = 'test22224234';

/**
* 實例化接口
*
* @param string $uid 接口賬號
* @param string $pwd 接口密碼
*/
$api = new SmsApi($uid,$pwd);



/*
* 全文模板發送示例
* 模板內容:登錄驗證碼:{**}。如非本人操作,可不用理會!【云信】
*
*/

//發送的手機 多個號碼用,英文逗號隔開
$mobile = '15900000000';

//短信內容
$content = '登錄驗證碼:'.$api->randNumber().'。如非本人操作,可不用理會!【云信】';


//發送全文模板短信
$result = $api->sendAll($mobile,$content);

if($result['stat']=='100')
{
	echo '發送成功';
}
else
{
	echo '發送失敗:'.$result['stat'].'('.$result['message'].')';
}


//當前請求返回的原始信息
//echo $api->getResult();

//取剩余短信條數
//print_r($api->getNumber());

//獲取發送狀態
//print_r($api->getStatus());

//接收上行短信(回復)
//print_r($api->getReply());



smsapi.class.php

<?php
/**
SMS短信接口類
@author		sms.cn
@link		http://www.sms.cn
*/


class SmsApi {
	/**
	* SMSAPI請求地址
	*/
	const API_URL = 'http://api.sms.cn/sms/';

	/**
	* 接口賬號
	* 
	* @var string
	*/
	protected $uid;

	/**
	* 接口密碼
	* 
	* @var string
	* @link http://sms.sms.cn/ 請到此處(短信設置->接口密碼)獲取
	*/
	protected $pwd;

	/**
	* sms api請求地址
	* @var string
	*/
	protected $apiURL;


	/**
	* 短信發送請求參數
	* @var string
	*/
	protected $smsParams;

	/**
	* 接口返回信息
	* @var string
	*/
    protected $resultMsg;

	/**
	* 接口返回信息格式
	* @var string
	*/
	protected $format;

	/**
	* 構造方法
	* 
	* @param string $uid 接口賬號
	* @param string $pwd 接口密碼
	*/
    public function __construct($uid = '', $pwd = '')
    {
		//用戶和密碼可直接寫在類里
		$def_uid = '';
		$def_pwd = '';
        $this->uid	= $uid ?: $def_uid;
        $this->pwd	= $pwd ?: $def_pwd;
        $this->apiURL = self::API_URL;
		$this->format = 'json';
    }
	/**
	* SMS公共參數
	* @return array 
	*/
    protected function publicParams()
    {
        return array(
            'uid'		=> $this->uid,
            'pwd'		=> md5($this->pwd.$this->uid),
            'format'	=> $this->format,
        );
    }
	/**
	* 發送變量模板短信
	*
	* @param string $mobile 手機號碼
	* @param string $content 短信內容參數
	* @param string $template 短信模板ID
	* @return array
	*/
	public function send($mobile, $contentParam,$template='') {
		//短信發送參數
		$this->smsParams = array(
			'ac'		=> 'send',
			'mobile'	=> $mobile,
			'content'	=> $this->array_to_json($contentParam),
			'template'	=> $template
		);
		$this->resultMsg = $this->request();
		return $this->json_to_array($this->resultMsg, true);
	}

	/**
	* 發送全文模板短信
	*
	* @param string $mobile 手機號碼
	* @param string $content 短信內容
	* @return array
	*/
	public function sendAll($mobile, $content) {
		//短信發送參數
		$this->smsParams = array(
			'ac'		=> 'send',
			'mobile'	=> $mobile,
			'content'	=> $content,
		);
		$this->resultMsg = $this->request();

		return $this->json_to_array($this->resultMsg, true);
	}

	/**
	* 取剩余短信條數
	*
	* @return array
	*/
	public function getNumber() {
		//參數
		$this->smsParams = array(
			'ac'		=> 'number',
		);
		$this->resultMsg = $this->request();
		return $this->json_to_array($this->resultMsg, true);
	}


	/**
	* 獲取發送狀態
	*
	* @return array
	*/
	public function getStatus() {
		//參數
		$this->smsParams = array(
			'ac'		=> 'status',
		);
		$this->resultMsg = $this->request();
		return $this->json_to_array($this->resultMsg, true);
	}
	/**
	* 接收上行短信(回復)
	*
	* @return array
	*/
	public function getReply() {
		//參數
		$this->smsParams = array(
			'ac'		=> 'reply',
		);
		$this->resultMsg = $this->request();
		return $this->json_to_array($this->resultMsg, true);
	}
	/**
	* 取已發送總條數
	*
	* @return array
	*/
	public function getSendTotal() {
		//參數
		$this->smsParams = array(
			'ac'		=> 'number',
			'cmd'		=> 'send',
		);
		$this->resultMsg = $this->request();
		return $this->json_to_array($this->resultMsg, true);
	}

	/**
	* 取發送記錄
	*
	* @return array
	*/
	public function getQuery() {
		//參數
		$this->smsParams = array(
			'ac'		=> 'query',
		);
		$this->resultMsg = $this->request();
		return $this->json_to_array($this->resultMsg, true);
	}

	/**
	* 發送HTTP請求
	* @return string
	*/
	private function request()
	{
		$params = array_merge($this->publicParams(),$this->smsParams);
		if( function_exists('curl_init') )
		{
			return $this->curl_request($this->apiURL,$params);
		}
		else
		{
			return $this->file_get_request($this->apiURL,$params);
		}
	}
	/**
	* 通過CURL發送HTTP請求
	* @param string $url		 //請求URL
	* @param array $postFields //請求參數 
	* @return string
	*/
	private function curl_request($url,$postFields){
		$postFields = http_build_query($postFields);
		//echo $url.'?'.$postFields;
		$ch = curl_init ();
		curl_setopt ( $ch, CURLOPT_POST, 1 );
		curl_setopt ( $ch, CURLOPT_HEADER, 0 );
		curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
		curl_setopt ( $ch, CURLOPT_URL, $url );
		curl_setopt ( $ch, CURLOPT_POSTFIELDS, $postFields );
		$result = curl_exec ( $ch );
		curl_close ( $ch );
		return $result;
	}
	/**
	* 通過file_get_contents發送HTTP請求
	* @param string $url  //請求URL
	* @param array $postFields //請求參數 
	* @return string
	*/
	private function file_get_request($url,$postFields)
	{
		$post='';
		while (list($k,$v) = each($postFields)) 
		{
			$post .= rawurlencode($k)."=".rawurlencode($v)."&";	//轉URL標準碼
		}
		return file_get_contents($url.'?'.$post);
	}
	/**
	* 獲取當前HTTP請返回信息
	* @return string
	*/
	public function getResult()
	{
		$this->resultMsg;
	}
	/**
	* 獲取隨機位數數字
	* @param  integer $len 長度
	* @return string       
	*/
	public function randNumber($len = 6)
	{
		$chars = str_repeat('0123456789', 10);
		$chars = str_shuffle($chars);
		$str   = substr($chars, 0, $len);
		return $str;
	}

	//把數組轉json字符串
	function array_to_json($p)
	{
		return urldecode(json_encode($this->json_urlencode($p)));
	}
	//url轉碼
	function json_urlencode($p)
	{
		if( is_array($p) )
		{
			foreach( $p as $key => $value )$p[$key] = $this->json_urlencode($value);
		}
		else
		{
			$p = urlencode($p);
		}
		return $p;
	}

	//把json字符串轉數組
	function json_to_array($p)
	{
		if( mb_detect_encoding($p,array('ASCII','UTF-8','GB2312','GBK')) != 'UTF-8' )
		{
			$p = iconv('GBK','UTF-8',$p);
		}
		return json_decode($p, true);
	}
}

?>


隨便看看

評論