1. <?php
    class ReplyModel{
    //验证token,
    public function ValidationToken($token){
    if(isset($_GET["echostr"])){
    $tokenInfo["token"]=$token;
    $tokenInfo["echostr"]=$_GET["echostr"];
    $tokenInfo["signature"]=$_GET["signature"];
    $tokenInfo["timestamp"]=$_GET["timestamp"];
    $tokenInfo["nonce"]=$_GET["nonce"];
    if($this->checkSignature($tokenInfo)){
    return $tokenInfo["echostr"];
    }
    return false;
    }else{
    return true;
    }
    }
    //封装检测函数
    private function checkSignature($info)
    {
    $signature = $info["signature"];
    $timestamp = $info["timestamp"];
    $nonce = $info["nonce"];
    $token = $info["token"];
    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr, SORT_STRING);
    $tmpStr = implode( $tmpArr );
    $tmpStr = sha1( $tmpStr );
    if( $tmpStr == $signature ){
    return true;
    }else{
    return false;
    }
    }
  2.  
  3. //得到xml数据并且解析成一个对象,成功返回$postObj,失败返回null
    public function getXmlAnalysis(){
    //1:获取到微信推送过来的POST数据(xml格式)
    $postArr="<xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[fromUser]]></FromUserName>
    <CreateTime>1348831860</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[1]]></Content>
    <MsgId>1234567890123456</MsgId>
    </xml>";
    $postArr=$GLOBALS["HTTP_RAW_POST_DATA"];
    /*$postArr="<xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[fromUser]]></FromUserName>
    <CreateTime>1348831860</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[5]]></Content>
    <MsgId>1234567890123456</MsgId>
    </xml>";*/
    if (!empty($postArr)){
    libxml_disable_entity_loader(true);
    $postObj = simplexml_load_string($postArr, 'SimpleXMLElement', LIBXML_NOCDATA);
    return $postObj;
    }else{
    return null;
    }
    }
  4.  
  5. //返回纯文本信息,需要传入的参数为解析后的微信服务器数据对象$postObj,需要返回的内容(eg:$relText="你输入的是数字1,返回的是数字1";)
    public function ReplyText($postObj,$relText){
    $textArr=array("");
    $textArr['template']=$relText;;
    $textArr['toUser']=$postObj->FromUserName;
    $textArr['fromUser']=$postObj->ToUserName;
    $textArr['time']=time();
    $textArr['MsgType']='text';
    return $textArr;
    }
  6.  
  7. /*返回图文消息,需要传入的参数为解析后的微信服务器数据对象$postObj,需要返回的内容(eg:$relImageText=array(
    array("title"=>"pqs",
    "description"=>"pqs is user weixin",
    "picurl"=>"https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/logo_white_fe6da1ec.png",
    "url"=>"http://www.scarecrowpqs.com/atmSystem/")
    );;)*/
    public function ReplyImageText($postObj,$relImageText){
    $textArr=array("");
    $textArr['toUser']=$postObj->FromUserName;
    $textArr['fromUser']=$postObj->ToUserName;
    $textArr['time']=time();
    $textArr['MsgType']='news';
    $textArr['template']=$relImageText;
    return $textArr;
    }
  8.  
  9. //返回图片消息,//返回纯文本信息,需要传入的参数为解析后的微信服务器数据对象$postObj,需要返回的内容(eg:$relText="MediaId";)
    public function ReplyImage($postObj,$relImage){
    $textArr=array("");
    $textArr['toUser']=$postObj->FromUserName;
    $textArr['fromUser']=$postObj->ToUserName;
    $textArr['time']=time();
    $textArr['MsgType']='image';
    $textArr['template']=$relImage;
    return $textArr;
    }
  10.  
  11. //获取微信接口,需要传入的参数为appid和appsecret,返回值为$accessToken
    private function getWxAccessToken($appid,$appsecret){
    $url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
    $arr=$this->http_curl($url);
    return $arr;
    }
  12.  
  13. //获取微信接口,判断是否在本地的过期没
    public function getIsWxAccessToken(){
    if($_SESSION['access_token'] && $_SESSION['expires_in']>time()){
    return $_SESSION['access_token'];
    }else{
    $relStr=$this->getWxAccessToken("wx9e92e07e63ba07d9","d4624c36b6795d1d99dcf0547af5443d");
    $_SESSION["access_token"]=$relStr['access_token'];
    $_SESSION["expires_in"]=time()+7200;
    return $relStr['access_token'];
    }
  14.  
  15. }
  16.  
  17. //需要传入的参数为accessToken,返回值为微信服务器地址
    public function getWxServerIp($accessToken){
    $accessToken=$this->getIsWxAccessToken();
    $url="https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=".$accessToken;
    $arr=$this->http_curl($url);
    return $arr;
    }
  18.  
  19. //curl请求函数
    private function http_curl($url,$type='get',$res='json',$arr='',$header=0){
    //初始化curl
    $ch=curl_init();
    //设置curl
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_HEADER,$header);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    //调用接口
    if($type=='post'){
    curl_setopt($ch,CURLOPT_POST,1);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$arr);
    }
    $rel=curl_exec($ch);
    //关闭curl
    if(curl_errno($ch)){
    var_dump(curl_error($ch));
    }else{
    curl_close($ch);
    if($res=='json'){
    $relStr=json_decode($rel,true);
    return $relStr;
    }else{
    return $rel;
    }
    }
    }
  20.  
  21. //定义自定义菜单
    public function setMenuItem($MenuArr,$Access_Token){
    $url="https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$Access_Token;
    $MenuArr=urldecode(json_encode($MenuArr));
    $rel=$this->http_curl($url,'post','json',$MenuArr);
    return $rel;
    }
  22.  
  23. }

PHP微信开发ReplyModel(封装验证,数据获取,信息返回)的更多相关文章

  1. 《C#微信开发系列(4)-接收 / 返回文本消息》

    4.0接收 / 返回文本消息 ①接收/返回文本消息原理说明 当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上,着手开发之前先行阅读微信公众平台接收普通消息 ...

  2. Java企业微信开发_09_身份验证之移动端网页授权(有完整项目源码)

    注: 源码已上传github: https://github.com/shirayner/WeiXin_QiYe_Demo 一.本节要点 1.1 授权回调域(可信域名) 在开始使用网页授权之前,需要先 ...

  3. Java企业微信开发_10_未验证域名归属,JS-SDK功能受限

    1.现象: 在企业微信后台填写可信域名后,提示:未验证域名归属,JS-SDK功能受限,如下图: 点击“申请域名校验”后, 注意:域名根目录 当时一直不清楚这个域名根目录在哪里,最后让我给试出来了 2. ...

  4. 解决:使用ajax验证登录信息返回前端页面时,当前整个页面刷新。

    源代码如下: function loginform(){ $.ajax({ url:"loginValidate.do", type:'post', data:{"nam ...

  5. 《C#微信开发系列(1)-启用开发者模式》

    1.0启用开发者模式 ①填写服务器配置 启用开发模式需要先成为开发者,而且编辑模式和开发模式只能选择一个(进入微信公众平台=>开发=>基本配置)就可以看到以下的界面: 点击修改配置,会出现 ...

  6. 《C#微信开发系列(3)-获取接口调用凭据》

    3.0获取接口调用凭据 ①接口说明 access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.access_token的存储至少要保留 ...

  7. 《C#微信开发系列(2)-自定义菜单管理》

    2.0自定义菜单管理 ①接口说明 微信服务号聊天窗口下面的菜单项(有的公众号有启用有的则没有),这个可以在编辑模式简单配置,也可以在开发模式代码配置.微信公众平台开发者文档:微信公众号开发平台创建自定 ...

  8. 《C#微信开发系列(Top)-微信开发完整学习路线》

    年前就答应要将微信开发的学习路线整理给到大家,但是因为年后回来这段时间学校还有公司那边有很多事情需要兼顾,所以没能及时更新文章.今天特地花时间整理了下,话不多说,上图,希望对大家的学习有所帮助哈. 如 ...

  9. Senparc.Weixin微信开发(1) 开发验证

    官方系列教程 http://www.cnblogs.com/szw/archive/2013/05/20/3089479.html 登录微信公众平台后-左侧找到开发--启用服务器配置 这样,我们才可以 ...

随机推荐

  1. Python脚本控制的WebDriver 常用操作 <五> 访问链接

    下面将使用webdriver来访问一个web链接 测试用例场景 测试中,经常会点击几个链接来进行操作,所以访问链接是基本的常见操作 Python脚本 from selenium import webd ...

  2. python 连接oracle 数据库

    我们在测试中可能需要对oracle 数据库进行操纵,比如这样一个场景,在往oracle 里面插数据的同时,另一个工具从里面读,如何能保证读出来的数据是有顺序的,即:先插入进去的先读出来,根据这个场景们 ...

  3. 查表法计算CRC16校验值

    CRC16是单片机程序中常用的一种校验算法.依据所采用多项式的不同,得到的结果也不相同.常用的多项式有CRC-16/IBM和CRC-16/CCITT等.本文代码采用的多项式为CRC-16/IBM: X ...

  4. Android问题-DelphiXE5编义时提示找不到“连接器(arm-linux-androideabi-ld.exe)"

    问题现象:DelphiXE5编义时提示找不到“连接器(arm-linux-androideabi-ld.exe)" 问题提示:Checking project dependencies... ...

  5. [iOS基础控件 - 1] UI概念

    A. UIView 1.概念      属于UIKit框架      屏幕上能看得见摸得着的东西就是UIView,比如屏幕上的按钮.文字.图片      翻译为:视图/控件/组件      UIBut ...

  6. iOS中几种定时器 - 控制了时间,就控制了一切

    在软件开发过程中,我们常常需要在某个时间后执行某个方法,或者是按照某个周期一直执行某个方法.在这个时候,我们就需要用到定时器. 然而,在iOS中有很多方法完成以上的任务,到底有多少种方法呢?经过查阅资 ...

  7. MongoDB介绍及下载与安装

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型.M ...

  8. iOS--消息推送后方法回调情况(简)

    消息推送 工作 --- 消息推送   消息推送 消息推送集成参考友盟 http://dev.umeng.com/push/ios/integration 注意测试环境下,(友盟)设备在手机启动程序的时 ...

  9. iOS多线程拾贝------操作巨人编程

    iOS多线程拾贝------操作巨人编程 多线程 基本 实现方案:pthread - NSThread - GCD - NSOperation Pthread 多平台,可移植 c语言,要程序员管理生命 ...

  10. delete table 和 truncate table

    delete table 和 truncate table 使用delete语句删除数据的一般语法格式: delete [from] {table_name.view_name} [where< ...