php实现短信发送代码

5年以前  |  阅读数:649 次  |  编程语言:PHP 

卓望的短信发送。PHP格式。都要不习惯用xml传输数据格式了
标签: <无>

1. [代码][PHP]代码


    <?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;
      }

    }

以上所述就是本文的全部内容了,希望大家能够喜欢。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例