php短信发送
2015-07-20 16:32
585 查看
<?php
class Sms
{
private $userId = 'XXXXX';
private $password = 'XXXXXX';
private $templateId = 'XXXXXX';
/**
* @var string 短信服务器地址
*/
private $server_uri = 'XXXXXX';
private $port = 'XXXXXX';
/**
* 发送短信
* @param $message 信息内容
* @param $mobile 手机号码
* @param string $signature 签名
* @return bool 成功返回true, 网络请求失败返回false, 其他返回失败编码
*/
public function sendOneMsg($message, $mobile, $signature='demo')
{
$xml_content = $this->createXmlContent($message, $mobile, $signature);
$xml = $this->sendHttpRequest(trim($xml_content));
if(! $xml) {
return false; // 网络请求失败
}
// 解析返回的编码
$res = simplexml_load_string($xml);
if($res->retCode == 1000) {
return true;
}
return $res->retCode;
}
/**
* 创建 xml内容
* @param $message 信息
* @param $mobile 要发送的手机号码
* @param $signature 签名
* @return string
*/
private function createXmlContent($message, $mobile, $signature)
{
$data = array(
'userId' => $this->userId, // 账号
'password' => $this->password, // 小写的md5后的用户密码
'templateId' => $this->templateId, // 模板id
'phone' => $mobile,
'port' => $this->port,
'data' => $message,
'signature' => $signature,
);
// 设置xml版本和编码
$dom = new \DOMDocument('1.0', 'UTF-8');
// 创建根节点
$request = $dom->createElement('request');
$dom->appendChild($request);
foreach($data as $key => $val) {
// 创建元素
$key = $dom->createElement($key);
$request->appendChild($key);
// 创建元素值
$text = $dom->createTextNode($val);
$key->appendChild($text);
}
return $dom->saveXML();
}
/**
* 发送http请求
* @param $xml_content
* @return mixed
*/
private function sendHttpRequest($xml_content)
{
$now = time();
$headers[] = 'Content-Type:text/xml';
$headers[] = 'Content-Length:' . strlen($xml_content);
$headers[] = 'Cmd:mt';
$headers[] = 'TS:'. $now;
$headers[] = 'Authorization:' . strtoupper(md5($xml_content. $now . $this->password));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->server_uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_content);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$res = curl_exec($ch);
curl_close($ch);
//header('Content-Type:text/html; charset=utf-8');
return $res;
}
}
class Sms
{
private $userId = 'XXXXX';
private $password = 'XXXXXX';
private $templateId = 'XXXXXX';
/**
* @var string 短信服务器地址
*/
private $server_uri = 'XXXXXX';
private $port = 'XXXXXX';
/**
* 发送短信
* @param $message 信息内容
* @param $mobile 手机号码
* @param string $signature 签名
* @return bool 成功返回true, 网络请求失败返回false, 其他返回失败编码
*/
public function sendOneMsg($message, $mobile, $signature='demo')
{
$xml_content = $this->createXmlContent($message, $mobile, $signature);
$xml = $this->sendHttpRequest(trim($xml_content));
if(! $xml) {
return false; // 网络请求失败
}
// 解析返回的编码
$res = simplexml_load_string($xml);
if($res->retCode == 1000) {
return true;
}
return $res->retCode;
}
/**
* 创建 xml内容
* @param $message 信息
* @param $mobile 要发送的手机号码
* @param $signature 签名
* @return string
*/
private function createXmlContent($message, $mobile, $signature)
{
$data = array(
'userId' => $this->userId, // 账号
'password' => $this->password, // 小写的md5后的用户密码
'templateId' => $this->templateId, // 模板id
'phone' => $mobile,
'port' => $this->port,
'data' => $message,
'signature' => $signature,
);
// 设置xml版本和编码
$dom = new \DOMDocument('1.0', 'UTF-8');
// 创建根节点
$request = $dom->createElement('request');
$dom->appendChild($request);
foreach($data as $key => $val) {
// 创建元素
$key = $dom->createElement($key);
$request->appendChild($key);
// 创建元素值
$text = $dom->createTextNode($val);
$key->appendChild($text);
}
return $dom->saveXML();
}
/**
* 发送http请求
* @param $xml_content
* @return mixed
*/
private function sendHttpRequest($xml_content)
{
$now = time();
$headers[] = 'Content-Type:text/xml';
$headers[] = 'Content-Length:' . strlen($xml_content);
$headers[] = 'Cmd:mt';
$headers[] = 'TS:'. $now;
$headers[] = 'Authorization:' . strtoupper(md5($xml_content. $now . $this->password));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->server_uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_content);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$res = curl_exec($ch);
curl_close($ch);
//header('Content-Type:text/html; charset=utf-8');
return $res;
}
}
相关文章推荐
- PHP版QQ互联OAuth示例代码分享
- PHP中读取文件的几个方法
- PHP 安装Xdebug 编译缓存
- PHPCMS调用栏目下的子栏目
- 为什么要使用RTP
- php5.6编译安装关于mysql的报错
- VPS服务器利用WINSCP软件进行SFTP管理服务器文件
- 开发板上的tftp 上传和下载用法
- YII框架实现排序
- php实现编辑和保存文件的方法
- php数组生成html下拉列表的方法
- Zend Studio 上 安装使用Aptana插件
- Zend Studio主题
- php -- 魔术方法 之 调用方法:__call()、__callStatic()
- php 数组转xml
- phpMyAdmin出现找不到mysql扩展和Cannot log in to the MySQL server问题
- 小心入怀Yaf
- thinkphp 路径常量
- 利用php实现文件迁移重命名
- thinkphp模块部分学习