<?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 == ) {
            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, );
        curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_content);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, );
        curl_setopt($ch, CURLOPT_HEADER, );
        $res = curl_exec($ch);
        curl_close($ch);
        //header('Content-Type:text/html; charset=utf-8');
        return $res;
    }
 
}

php短信发送的更多相关文章

  1. PhpSms 稳定可靠的php短信发送库

    可能是目前最聪明.优雅的PHP短信发送库了.从此不再为各种原因造成的个别短信发送失败而烦忧! phpsms的任务均衡调度功能由toplan/task-balancer提供. GitHub地址:http ...

  2. C#利用Web Service实现短信发送(转)

    通过编程方式实现短信息的发送对很多人来说是一件比较烦杂的事情,目前一般的解决方法是通过计算机和手机的连线,通过可对手机编程的语言编写相关的手机短信息程序来实现,而这种方法对于一般人来说是很难达到的,因 ...

  3. [工具开发] 一信通 Web 短信发送客户端

    一.简介 为了协助公司运营部对几家短信平台进行测试,我根据各自的接口文档编写了几个简单的短信发送客户端: 下面是一信通 Web 短信发送客户端,使用 HTTP GET 方法. 二.效果图 1. 首页 ...

  4. Android短彩信源码解析-短信发送流程(三)

    3.短信pdu的压缩与封装 相关文章: ------------------------------------------------------------- 1.短信发送上层逻辑 2.短信发送f ...

  5. C# 编写短信发送Window服务

    我们做项目过程中,一般都会有发送短信的需求.最常见的就是户注册或者登录时发送短信验证码.不同类型的短信发送,我们都可以放到到一张短信表中,然后通过一个定时的作业去执行短信发送.而定时作业的执行,我们就 ...

  6. 使用飞信api接口实现短信发送(只能发送好友)

    找了很久才找到一个能用的飞信API接口(http://quanapi.sinaapp.com/fetion.php?u=飞信登录手机号&p=飞信登录密码&to=接收飞信的手机号& ...

  7. 功能:使用QQ号登陆,并加上微信和短信提醒,是否增量备份可选,阿里大鱼短信发送开发与测试,聚合数据(用JSON发短信,比较清楚)

    微博就可以,所以其它软件也可以http://desktop.weibo.com/ http://blog.csdn.net/jueblog/article/details/14497181http:/ ...

  8. Android短彩信源码解析-短信发送流程(二)

    转载请注明出处:http://blog.csdn.net/droyon/article/details/11699935 2,短彩信发送framework逻辑 短信在SmsSingleRecipien ...

  9. Swift - 短信发送功能的实现

    使用MessageUI.framework框架可以实现短信发送功能,步骤如下: (1)首先判断设备是否有发送短信功能 (2)如果设备允许发送短信,创建一个MFMessageComposeViewCon ...

  10. c#简单易用的短信发送服务 悠逸企业短信服务

     悠逸企业短信发送服务,是一种比较简单易操作的短信发送服务,使用POST的方式,请求相应地址就可以实现短信发送功能 1 /// <summary> /// 短信发送服务 /// </ ...

随机推荐

  1. 高速公路(Highway,ACM/ICPC SEERC 2005,UVa1615)

    I think: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <m ...

  2. win7下virtualbox装linux共享win7文件问题(已测试可用)

    virtualbox这个比较强大,在win7上跑redhat5u4很流畅.os之间共享文件是个大家都很关心的问题,这会直接关系到虚拟机用的爽不爽. 在win7和其上的虚拟机linux之间共享文件也很容 ...

  3. 混合应用中的javascript实践

    混合应用中的javascript实践 混合应用(hybird app) 在几年前便进入大众视野,近来更是越发风生水起,深受人民群众的喜爱. 目录 概念 什么是混合应用 混合方式 交互 方法注入 参数传 ...

  4. Unity 3D 关于给APK包加广告的流程

    http://hunterwang.diandian.com/post/2012-11-23/40042217286 最近一直纠结着用Unity给安卓的应用添加广告,用Unity3d做安卓我还是第一次 ...

  5. reverse array java

    /* package whatever; // don't place package name! */ import java.util.*; import java.lang.*; import ...

  6. 关于seajs

    (这些文章都是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) 最近经常听到各种JS前缀的名称,瞬间感觉自己弱爆了,啥都没用过呢,这么下去将来怎么嫁人呢.   ...

  7. Windows Server 2012 GUI与Core的切换

    Server Core是在Windows Server 2008 系统上开始引入的极小的服务器安装选项,server core 的作用就是为特定的服务提供一个可执行的功能有限的低维护服务器环境,为我们 ...

  8. Ubuntu上安装gtk2.0不能安装的问题,“下列的软件包有不能满足的依赖关系”

    zez@localhoss:~$ sudo apt-get install libgtk2.0-dev正在读取软件包列表... 完成正在分析软件包的依赖关系树       正在读取状态信息... 完成 ...

  9. tar: Removing leading `/’ from member names

    tar: Removing leading `/’ from member names+2 分类:Web服务器 标签:tar 3,910人浏览   这并不是一个错误,而是一个警告,原因很简单,就是你在 ...

  10. PHP编译支持mysqli

    PHP编译支持mysqli前提是必须安装mysql直接上命令先进入源码包我的源码包是在/usr/local/php-5.2.1/ext/mysqli这样进入 cd /usr/local/php-5.2 ...