打算使用百度的SMS云服务来发短信,主要是用来作为业务通知。不过网上没有示例代码,在CSDN上面看到一个人写的,试用了一下,不能工作。http://blog.csdn.net/thekeypoint/article/details/46771211。这是唯一的PHP资料。
向百度官方提问,希望他们提供一个SDK。杳无音讯。后来我们决定自己写一个。
代码下载地址:
https://github.com/g089h515r806/baidusms
这是我封装后的调用代码:调用BiaduSmsClient示例代码:
<?php
include_once 'BaiduSmsClient.php';
header('Content-Type:text/html;charset=utf-8');
$config = array(
'endPoint' => 'sms.bj.baidubce.com',
'accessKey' => '615c2ed10718888888888888888',
'secretAccessKey' => 'a6e71bcfb99999999999999999999',
);
$smsClient = new BaiduSmsClient($config);
$message = array(
"invokeId" => "rMi6pVgB-sfaf-tsdf",
"phoneNumber" => "1368888888888888",
"templateCode" => "smsTpl:e7476asdfsdf0de19d04ae906",
"contentVar" => array(
"code" => "123abc1234",
),
);
$ret = $smsClient->sendMessage($message);
print var_export($ret, true);
封装了以后,使用百度SMS发送短息,就会像示例中那样方便。
核心代码BaiduSmsClient.php:
<?php
/*
* 百度官方没有提供官方的SMS SDK,这个SMS客户端由yaiyuan.com开发,作者:老葛
* sign.php为百度开发的文档,里面有错误。我做了修正。现在成功。
* 这个文件,采用GPL协议开源。
*
*/
include_once 'sign.php';
class BaiduSmsClient{
//终端,默认为sms.bj.baidubce.com
protected $endPoint;
//AK
protected $accessKey;
//SK
protected $secretAccessKey;
/**
* $config = array(
* 'endPoint' => 'sms.bj.baidubce.com',
* 'accessKey' => '618888888888888888888888',
* 'secretAccessKey' => 'a6888888888888888888888888',
* );
*/
function __construct(array $config) {
$this->endPoint = isset($config['endPoint']) ? $config['endPoint'] : 'sms.bj.baidubce.com';
$this->accessKey = isset($config['accessKey']) ? $config['accessKey'] : '';
$this->secretAccessKey = isset($config['secretAccessKey']) ? $config['secretAccessKey'] : '';
}
/**
* $message = array(
* "invokeId" => "rMVbbbb-Cssdc-dfgg", //你申请的签名ID
* "phoneNumber" => "1856666666", //手机电话号码
* "templateCode" => "smsTpl:e747612asdadsasdasdasd", //模板的唯一标识
* "contentVar" => array(
* "code" => "123abc1234", //模板里面的key变量 ${key}
* ),
* );
*
* 返回一个数组:
* 成功:array( 'code' => '1000', 'message' => '成功', 'requestId' => '45e1235-3b07-4421-83f8-cf4c74b1232c', )
* 失败:array( 'requestId' => 'a1145bba-95c0-4341-83de-115d41741f0f', 'code' => '401', 'message' => '权限认证失败', )
*/
public function sendMessage($message_array) {
//生成json格式
$json_data = json_encode($message_array);
//生成签名
$signer = new SampleSigner();
$credentials = array("ak" => $this->accessKey,"sk" => $this->secretAccessKey);
$httpMethod = "POST";
$path = "/bce/v2/message";
$params = array();
$timestamp = new \DateTime();
$timestamp->setTimezone(new \DateTimeZone("GMT"));
$datetime = $timestamp->format("Y-m-d\TH:i:s\Z");
$datetime_gmt = $timestamp->format("D, d M Y H:i:s T");
$headers = array("Host" => $this->endPoint);
$str_sha256 = hash('sha256', $json_data);
$headers['x-bce-content-sha256'] = $str_sha256;
$headers['Content-Length'] = strlen($json_data);
$headers['Content-Type'] = "application/json";
$headers['x-bce-date'] = $datetime;
$options = array(SignOption::TIMESTAMP => $timestamp, SignOption::HEADERS_TO_SIGN =>array('host', 'x-bce-content-sha256',),);
$ret = $signer->sign($credentials, $httpMethod, $path, $headers, $params, $options);
$headers_curl = array(
'Content-Type:application/json',
'Host:' . $this->endPoint,
'x-bce-date:' . $datetime,
'Content-Length:' . strlen($json_data),
'x-bce-content-sha256:' . $str_sha256,
'Authorization:' . $ret,
"Accept-Encoding: gzip,deflate",
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/2008052906 Firefox/3.0',
'Date:' .$datetime_gmt,
);
//$url = 'http://sms.bj.baidubce.com/bce/v2/message';
$url = 'http://' . $this->endPoint . $path;
//$url = '/bce/v2/message';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
//curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
//curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $json_data);
//curl_setopt($curl, CURLOPT_HEADER, 1);
//curl_setopt($curl,CURLOPT_PROXY,'127.0.0.1:8888');//设置代理服务器
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers_curl);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
$errorno = curl_errno($curl);
curl_close($curl);
//print var_export($result, true);
return json_decode($result);
}
。。。
代码下载地址:
https://github.com/g089h515r806/baidusms

