微信回复事件(测试账号)

WinxinSdk.class.php
<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/3/28
 * Time: 18:56
 *
 */

class WinxinSdk
{

    private $appID = "wx***2d";
    private $appsecret = "51***80";
    public static $access_token = "";//也可以写入session
    public static $expires_in = 0;//token失效时间

    public function WinxinSdk($appID,$appsecret)
    {
        $this->appID = $appID;
        $this->appsecret = $appsecret;

    }
    public function getToken()
    {//获取token
        $token = ‘‘;

        if(self::$access_token=="" && time()>self::$expires_in-360)//差十分钟获取就重新获取新的
        {
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appID&secret=$this->appsecret";
            $token = $this->curlGet($url);
            $token = json_decode($token);
            if(isset($token->access_token))
            {
                self::$access_token = $token->access_token;
                self::$expires_in = time()+$token->expires_in;
                return  $token->access_token;
            }
            else
            {
                return false;
            }
        }

        return false;

    }
    /*
     * reposeMsg 没封装好呢
     */
    public function reposeMsg()
    {//接收事件推送过来的数据,并回复
        //文案地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453
        $postArr = $GLOBALS[‘HTTP_RAW_POST_DATA‘];
        //获取到xml数据后,处理消息类型,并设置回复消息内容(回复就是直接打印xml数据)
        //数据格式
        $arr = simplexml_load_string($postArr);
        if(strtolower($arr->MsgType)=="event")
        {
            $toUser = $arr->ToUserName;
            $foUser = $arr->FromUserName;
            $msgType = ‘text‘;
            $createTime = time();
            $content = ‘尊敬的‘.$foUser."谢谢你的关注\n";

            if(strtolower($arr->Event)=="subscribe")
            {//订阅
                $temp = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";
                $temp = sprintf($temp,$foUser,$toUser,$createTime,$msgType,$content);
                return $temp;
            }
        }
    }
    /*
   * textMsg 没封装好呢
   */
    public function textMsg()
    {//接收文本,并回复
        //文案地址:
        $postArr = $GLOBALS[‘HTTP_RAW_POST_DATA‘];
        //获取到xml数据后,处理消息类型,并设置回复消息内容(回复就是直接打印xml数据)
        //数据格式
        $arr = simplexml_load_string($postArr);
        if(strtolower($arr->MsgType)==‘text‘)
        {
            $toUser = $arr->ToUserName;
            $foUser = $arr->FromUserName;
            $msgType = ‘text‘;
            $createTime = time();
            $content = $arr->Content."888888".$toUser."\n";

            $temp = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";
            $temp = sprintf($temp,$foUser,$toUser,$createTime,$msgType,$content);
            return $temp;

        }

    }
    /*
    * getQR 没封装好呢
    */
    public function  getQR($data = null)
    {//获取二维码
        $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".self::$access_token;
        $jsonData = ‘{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}‘;
        $res = $this->curlPost2($url,$jsonData);
        return $res;
    }

    public function customMenu($data)
    {//自定义菜单
        $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".self::$access_token;

        $res = $this->curlPost2($url,$data);
        return $res;
    }
    public function onclickMenu()
    {//点击自定义菜单市出发内容
        //$postArr = file_get_contents("php://input");
        $postArr = $GLOBALS[‘HTTP_RAW_POST_DATA‘];
        $arr = simplexml_load_string($postArr);
        //$this->logs(‘inclickMenu.txt‘,(array)$arr->ToUserName);
        if(strtolower($arr->MsgType)=="event")
        {
            if(strtolower($arr->Event)=="click")
            {
                //接受消息格式
                $rtemp = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[FromUser]]></FromUserName><CreateTime>123456789</CreateTime><MsgType><![CDATA[event]]></MsgType><Event><![CDATA[CLICK]]></Event><EventKey><![CDATA[EVENTKEY]]></EventKey></xml>";
                //推送文本格式
                $temp = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";
                $toUser = $arr->ToUserName;
                $foUser = $arr->FromUserName;
                $msgType = ‘text‘;
                $content = ‘你点击了--‘.$arr->EventKey;
                $createTime = time();
                $temp = sprintf($temp,$foUser,$toUser,$createTime,$msgType,$content);
                return $temp;

            }
        }

    }

    public function curlGet($url)
    {//get请求接口
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        $data = curl_exec($ch);
        $httpCode = curl_getinfo($ch,CURLINFO_HTTP_CODE);
        curl_close($ch);
        return ($httpCode>=200 && $httpCode<300) ? $data:false;
    }
    public function curlPost($url,$data = null)
    {//post请求接口
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        if (!empty($data)){
            curl_setopt($ch, CURLOPT_POST, TRUE);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        }
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        curl_close($ch);
        return  $output;

    }
    public function curlPost2($url,$data)
    {//第一个post方法
        //$data = http_build_query($data);
        $opts = array (
            ‘http‘ => array (
                ‘method‘ => ‘POST‘,
                ‘header‘=> "Content-type: application/x-www-form-urlencodedrn",
                "Content-Length: " . strlen($data) . "rn",
                ‘content‘ => $data
            )
        );

        $context = stream_context_create($opts);
        $html = file_get_contents($url, false, $context);
        return $html;

    }
    public function logs($file,$data)
    {//打印日志
        (is_array($data))?$data = print_r($data,true):$data;
        file_put_contents($file,$data);
    }

}

后台接口配置信息文件,用来接收微信发送的xml消息openweixin.php:

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/3/27
 * Time: 20:16
 */
//此处简单的实现一个自动加载
spl_autoload_register(function($class){
    include_once ("./".$class.".class.php");
});
//文档网址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319

//1.将timestamp,nonce,token按字典序排序 (参数名ASCII码从小到大排序(字典序))
    $timestamp = @$_GET[‘timestamp‘];
    $nonce = @$_GET[‘nonce‘];
    $token= "fps2";
    $signature = @$_GET[‘signature‘];

    $arr = array($timestamp,$nonce,$token);
    sort($arr);

//2.将排序后的三个参数拼接后用sha1加密
    $tmpstr = implode(‘‘,$arr);
    $tmpstr = sha1($tmpstr);
//3.将加密后的字符串与signature进行对比,判断该请求是否来自微信

    if($tmpstr == $signature && isset($_GET[‘echostr‘]))
    {//微信服务器配置 第一次接入会验证合法性,之后接收事件的区别是少传 $_GET[‘echostr‘] 这个参数
        echo $_GET[‘echostr‘];
        exit;
    }
    else
    {//这里可以接收微信服务器传递的事件

        $appID = "wx***2d";
        $appsecret = "51****80";

        $wxSdk = new WinxinSdk($appID,$appsecret);
        $wxSdk->getToken();

        //echo WinxinSdk::$access_token;
        //下面只是测试,其实订阅和发文字消息不可能同时触发,下面的两条同一时间只会触发一个(但是还是不建议这样写,最好判断分开)
        echo $wxSdk->reposeMsg();//订阅回复的内容
        echo $wxSdk->textMsg();//发消息回复的内容
        echo $wxSdk->onclickMenu();//点击自定义菜单市出发内容

原文地址:https://www.cnblogs.com/fps2tao/p/9058425.html

时间: 2024-08-13 20:05:48

微信回复事件(测试账号)的相关文章

微信公众号测试账号获取授权须关注

微信公众号测试账号不关注的话,就没有授权的页面的原因是: 所谓测试号,就是用来测试的,当然有别于正规的公众号. 作为开发者来说,其使用限制在于关注这个测试号的人员和方式. 比如,第一你生成了一个二维码,你可以自己扫描关注,从而成为这个公众号的关注用户,当然也可以发给朋友来关注,来达到真实效果的测试. 原文地址:https://www.cnblogs.com/Fly-sky/p/9445080.html

微信公众平台测试账号

微信公众平台测试账号 公众平台测试账号 微信公众平台测试帐号申请 基本流程: 访问微信公众平台测试账号接口申请https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 微信扫码登录,获取到一个测试账号. 调用接口获取access_token, 创建公众号菜单. 原文地址:https://www.cnblogs.com/mozq/p/12106459.html

使用微信公众平台测试账号开发“网页授权获取用户基本信息”功能

众所周知,微信公众号分为订阅号.服务号和企业号.撇开企业号不谈,虽然只有服务号能够通过微信接口获得用户级别信息(特别是针对每个公众号唯一的openId),但我们可以仍可以在未认证的订阅号中通过平台测试号开发测试用户基本信息. 微信第三方登录的原理和流程不再赘述,下面说明一下测试号开发的过程. 首先打开测试页面,先登录任一类型的公众号(包括未认证的),在左侧菜单找到 开发-->开发者工具,进入“公众平台测试账号”,这里时需要刷微信认证的二维码(任一微信账户都可以,与登录微信公众平台的账号无关).

微信公众号测试账号配置失败竟然是因为一个字符

开发环境: 1.SAE新浪云平台 2.PHP环境 3.在微信申请了一个测试用的公众平台开发账号 4.从微信官方下载的一个php文档 5.token也是默认的weixin,(这个第一次可以不用改,但如果配置成功后再想配置,已经有了token名为weixin的了,这个时候要变化了,第一次配置可以不用变化) 6.注意,在SAE上传代码是压缩成zip形式的,SAE自动配置,如果用SVN上传的,目前来看是不行的. 7.代码配置后,不需要做任何改动,结果在测试平台输入http和token后,提示配置失败(这

1.微信公众号开发:申请公众平台测试账号

1.登陆微信公众平台 https://mp.weixin.qq.com从这地方登陆 过程很简单就不在赘述. 2.在左边菜单找到开发者工具 点击进入 选择下边箭头标注的 点击进入 则会看如下界面  这里就是测试账号的管理平台 PS:然后重点来了 在这个界面往下翻 会看到这个测试号的公众号 二维码 一定要关注这个测试的二维码的公众号  你以后的测试操作 都会在这个二维码上起效果 而不是你本来正式的订阅号什么的 比如消息回复什么的 你用测试号的appid 和秘钥 发送的消息一定是显示在测试的公众号上而

微信支付测试账号申请

微信支付测试账号申请 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 原文地址:https://www.cnblogs.com/hysen/p/9251267.html

今天睡觉去了,明天回复。提供自建VPN测试账号5个,可用2天,4GB流量,PPTP方式

注意:我能看到通过vpn的所有IP包,所以在意隐私和安全的请谨慎使用!不能保证一直可用! 缘起: 我前天在linode上弄了个vps,搭了个PPTP的VPN. 本来是想弄个付费的VPN来着,这样大家用自己用也能省点儿,要不然太贵.结果freeradius限制流量功能不好弄,一时半会儿是弄不好了,而且自助注册的网页以目前的水平也写不出来. 机器闲着也是闲着,还是先弄几个测试账号大家用吧,我也能测试下. 开了5个测试账号,有想用的可以给我站内留言. 计划测试账号可以用到10月28号24:00点,最多

.Net程序员关于微信公众平台测试账户配置 项目总结

今天项目第一次验收,夜晚吃过晚饭后,想把项目中用到的关于微信配置总结一下,虽然网上关于这方面的资料很多很多,还有官方API,但是总感觉缺点什么,就像期初做这个项目时,各方面找了很久的资料,说说配置吧! 1.你必须有一个微信可以访问的网站,然后有一个公众账户. 2.成为开发者. 上面这个URL填写你的网站的链接,微信服务器会放这个URL推送一些验证信息,具体验证信息,你可以查看官方API,写的很详细,因为我用的是MVC,所以我写了一个类,让控制器继承这个类,源码贴下,大家一看就明白.还有这个URL

微信公众平台测试群发消息公开阅读次数和点赞数

微信公众平台这几天在小范围测试公开阅读次数.点赞数,只有一个微信公众号才会显示,有三个地方新改变:文章标题下的作者信息前加了一个"by",换行显示日期.每篇文章的阅读次数和公众账号信息,同时,在文章末尾可对文章进行点赞,还有具体的点赞次数.如下图所示 在同一天,腾讯宣布旗下微博"不再做更新,只维持其基本运转",腾讯微博只维持基本运营,不再做新产品开发.这是微信正在微博化的节奏吗?还微信入侵腾讯微博?谁知道呢?!有微信和手Q就够了,甚至说有微信就可以了. 微信公众平台