php微信公众平台开发--接入微信API

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
    public function index(){
        //获得参数 signature nonce token timestamp echostr
        //微信服务器发出参数都是以get形式发送
        $nonce        = $_GET['nonce'];
        $timestamp    = $_GET['timestamp'];
        $echostr      = $_GET['echostr'];
        $signature    = $_GET['signature'];
        $token        = 'zorozdd';
        //形成数组 按照字典序排序sort
        $array  =  array($nonce , $timestamp , $token);
        sort($array);
        //拼接成字符串 sha1加密 与signature进行校验
        $str = sha1( implode( $array ) );
        if( $str == $signature && $echostr){
        //第一次接入微信API 之后连入不会再有$echostr这个参数
            echo $echostr;
            exit;
        }else{
            $this->reponseMsg();
        }
    }
    public function reponseMsg(){
        //获取微信post过来的数据(xml格式)
        $postArr = $GLOBALS['HTTP_RAW_POST_DATA'];
        //处理消息类型 设置回复类型和内容
        /*这是推送数据包样式范例
        <xml>
        <ToUserName><![CDATA[toUser]]></ToUserName>
        <FromUserName><![CDATA[FromUser]]></FromUserName>
        <CreateTime>123456789</CreateTime>
        <MsgType><![CDATA[event]]></MsgType>
        <Event><![CDATA[subscribe]]></Event>
        </xml>*/
        $postObj = simplexml_load_string( $postArr );
        /*
        将XML转化为对象之后对象内存在如下参数
        $postObj->ToUserName = '';
        $postObj->FromUserName = '';
        $postObj->CreateTime = '';
        $postObj->MsgType = '';
        $postObj->Event = '';
        */
        //判断该数据包是否是事件推送
        if ( strtolower($postObj->MsgType) == 'event' ){
        //如果是关注subscribe事件
            if( strtolower($postObj->Event == 'subscribe') ){
                $toUser   = $postObj->FromUserName;
                $fromUser = $postObj->ToUserName;
                $time     = time();
                $msgType  = 'text';
                $content  = '欢迎关注Zorozdd的的公众账号,测试用信息发送,你的账号为'.$toUser;
                $template = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <Content><![CDATA[%s]]></Content>
                            </xml>";
                $info     = sprintf($template,$toUser,$fromUser,$time,$msgType,$content);
                echo $info;
            }
        }
        //单图文回复范例
        /*
        if ( strtolower($postObj->MsgType) == 'text' ){
            if ($postObj->Content == 'hello' ){
                $template = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <Content><![CDATA[%s]]></Content>
                            </xml>";
                $toUser   = $postObj->FromUserName;
                $fromUser = $postObj->ToUserName;
                $time     = time();
                $content  = 'hello,word.today is colorful.';
                $msgType  = 'text';
                echo sprintf($template,$toUser,$fromUser,$time,$msgType,$content);
            }
        }
        */
        if ( strtolower($postObj->MsgType) == 'text' && $postObj->Content == '1' ){
            $toUser   = $postObj->FromUserName;
            $fromUser = $postObj->ToUserName;
            $time     = time();
            $arr = array(
                    array(
                        'title'       => 'zorozdd’word',
                        'description' => '这里是测试用公众平台',
                        'picUrl'      => 'https://www.baidu.com/img/bd_logo1.png',
                        'url'         => 'http://i.blog.sina.com.cn/'
                    ),
                    array(
                        'title'       => '软件测试基础入门',
                        'description' => '软件测试基础',
                        'picUrl'      => 'http://pic.pptbz.com/pptpic/201601/2016012052598041.jpg',
                        'url'         => 'http://i.blog.sina.com.cn/'
                    ),
                    array(
                        'title'       => 'PHP高级教程精通进阶',
                        'description' => 'PHP高级教程精通',
                        'picUrl'      => 'http://pic.pptbz.com/pptpic/201510/2015103172664321.jpg',
                        'url'         => 'http://i.blog.sina.com.cn/'
                    ),
            );
            $template = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[%s]]></MsgType>
                        <ArticleCount>".count($arr)."</ArticleCount>
                        <Articles>";
            foreach ($arr as $k=>$v){
            $template .="<item>
                        <Title><![CDATA[".$v['title']."]]></Title> 
                        <Description><![CDATA[".$v['description']."]]></Description>
                        <PicUrl><![CDATA[".$v['picUrl']."]]></PicUrl>
                        <Url><![CDATA[".$v['url']."]]></Url>
                        </item>";
            }
            $template .= "</Articles>
                        </xml>;";
            echo sprintf($template,$toUser,$fromUser,$time,'news');
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值