zoukankan      html  css  js  c++  java
  • 微信公众号开发第三课 实现简单微信文本通讯

    微信开发前,需要设置token,这个是微信设置的,可以任意设置,用来实现微信通讯。这里有一个别人写的微信类,功能还比较不错。weixin.class.php代码如下

    <?php
    class Weixin
    {
        public $token = '';//token
        public $debug =  false;//是否debug的状态标示,方便我们在调试的时候记录一些中间数据
        public $setFlag = false;
        public $msgtype = 'text';   //('text','image','location')
        public $msg = array();
     
        public function __construct($token,$debug)
        {
            $this->token = $token;
            $this->debug = $debug;
        }
    //获得用户发过来的消息(消息内容和消息类型  )
        public function getMsg()
        {
            $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
         
            if (!empty($postStr)) {
                $this->msg = (array)simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $this->msgtype = strtolower($this->msg['MsgType']);
            }
        }
    //回复文本消息
        public function makeText($text='')
        {
            $CreateTime = time();
            $FuncFlag = $this->setFlag ? 1 : 0;
            $textTpl = "<xml>
                <ToUserName><![CDATA[{$this->msg['FromUserName']}]]></ToUserName>
                <FromUserName><![CDATA[{$this->msg['ToUserName']}]]></FromUserName>
                <CreateTime>{$CreateTime}</CreateTime>
                <MsgType><![CDATA[text]]></MsgType>
                <Content><![CDATA[%s]]></Content>
                <FuncFlag>%s</FuncFlag>
                </xml>";
            return sprintf($textTpl,$text,$FuncFlag);
        }
    	
    //根据数组参数回复图文消息
        public function makeNews($newsData=array())
        {
            $CreateTime = time();
            $FuncFlag = $this->setFlag ? 1 : 0;
            $newTplHeader = "<xml>
                <ToUserName><![CDATA[{$this->msg['FromUserName']}]]></ToUserName>
                <FromUserName><![CDATA[{$this->msg['ToUserName']}]]></FromUserName>
                <CreateTime>{$CreateTime}</CreateTime>
                <MsgType><![CDATA[news]]></MsgType>
                <Content><![CDATA[%s]]></Content>
                <ArticleCount>%s</ArticleCount><Articles>";
            $newTplItem = "<item>
                <Title><![CDATA[%s]]></Title>
                <Description><![CDATA[%s]]></Description>
                <PicUrl><![CDATA[%s]]></PicUrl>
                <Url><![CDATA[%s]]></Url>
                </item>";
            $newTplFoot = "</Articles>
                <FuncFlag>%s</FuncFlag>
                </xml>";
            $Content = '';
            $itemsCount = count($newsData['items']);
            $itemsCount = $itemsCount < 10 ? $itemsCount : 10;//微信公众平台图文回复的消息一次最多10条
            if ($itemsCount) {
                foreach ($newsData['items'] as $key => $item) {
                    if ($key<=9) {
                        $Content .= sprintf($newTplItem,$item['title'],$item['description'],$item['picurl'],$item['url']);
                    }
                }
            }
            $header = sprintf($newTplHeader,$newsData['content'],$itemsCount);
            $footer = sprintf($newTplFoot,$FuncFlag);
            return $header . $Content . $footer;
        }
        public function reply($data)
        {
           
            echo $data;
        }
        public function valid()
        {
            if ($this->checkSignature()) {
                if( $_SERVER['REQUEST_METHOD']=='GET' )
                {
                    echo $_GET['echostr'];
                    exit;
                }
            }else{
                
                exit;
            }
        }
        private function checkSignature()
        {
            $signature = $_GET["signature"];
            $timestamp = $_GET["timestamp"];
            $nonce = $_GET["nonce"];
     
            $tmpArr = array($this->token, $timestamp, $nonce);
            sort($tmpArr);
            $tmpStr = implode( $tmpArr );
            $tmpStr = sha1( $tmpStr );
     
            if( $tmpStr == $signature ){
                return true;
            }else{
                return false;
            }
        }
    	
    }
    ?>
    

     接着正式开发,使用百度SVN地址,创建weixinapi.php文件,这个根据你后台设置名称。

    <?php
    define("TOKEN", "");
    define('DEBUG', false);
    include_once('weixin.class.php');
    require_once("db.php");
                
    $weixin = new Weixin(TOKEN,DEBUG);//实例化
    $weixin->getMsg();
    $type = $weixin->msgtype;//消息类型
    $keyword = $weixin->msg['Content'];//获取的文本
    if ($type==='text') {
    $reply = $weixin->makeText($key);
    }elseif($type==='event'){//第一次关注推送事件
        $reply = $weixin->makeText("欢迎关注");
    }else{//其他类型
    $reply = $weixin->makeText("暂时没有图片,声音,地理位置等功能,后续开发会增加,感谢你关注");
    }
    
    $weixin->reply($reply);

    这样就实现了一个例子,第一次关注事件回复,非文本回复,以及文本回复,这里文本回复是你输入什么就返回什么。

    具体实现功能就写在文本回复里面。

    其他的功能暂时不做,具体开发下节再说。

  • 相关阅读:
    html/css 滚动到元素位置,显示加载动画
    React 监听页面滚动,界面动态显示
    Html/css 列表项 区分列表首尾
    Html/css 水平布局居中
    Html 设置标题栏顶部固定
    TypeScript 引用资源文件后提示找不到的异常处理
    Github自动打包并推送Nuget版本
    获取电脑的网络连接状态(六)适配器状态 及 几种方案耗时对比
    获取电脑的网络连接状态(五)WebClient
    获取电脑的网络连接状态(四)IPHost
  • 原文地址:https://www.cnblogs.com/logoove/p/3413598.html
Copyright © 2011-2022 走看看