打算使用百度的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