jstang博客

时间:

  • 首页
  • zblog作品
  • 前端笔记
  • python
  • seo
  • cms
    • zblog
    • 帝国cms
  • 杂记

当前位置:

  • 首页
  • 前端笔记

微信公众号验证及被动回复事件

发布时间:2023-03-11

作者: jstang

1557 0

验证完后,取消验证,进行相关事件处理


<?php

responseMsg();

/*
    用于第一次验证我们网站url合法性
     */
     function firstValid(){
        //  echo(1);
            //检验签名的合法性
            if(_checkSignature()){
                //签名合法,告知微信公众平台服务器
                echo $_GET['echostr'];
            }
        }
    
/**
     * 验证签名
     * @return bool
     */
     function _checkSignature(){
        //获得由微信公众平台请求的验证数据
        $signature = $_GET['signature'];
        $timestamp = $_GET['timestamp'];
        $nonce = $_GET['nonce'];
        //将时间戳,随机字符串,token按照字母顺序排序,病并连接
        $tmp_arr = array('这是token',$timestamp,$nonce);
        sort($tmp_arr,SORT_STRING);//字典顺序
        $tmp_str = implode($tmp_arr);//连接
        $tmp_str = sha1($tmp_str);//sha1加密
        if($signature==$tmp_str){
            return true;
        }else{
            return false;
        }
    }
    
     function responseMsg(){
             //读取数据
                $xml = file_get_contents('php://input');
                if(!empty($xml)){
                    //将xml数据转换成对象
                    $postObj = simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA);

                    $toUser = $postObj->FromUserName;
                    $formUser = $postObj->ToUserName;
                    $time = time();
                    //判断用户传入的类型  (文本  图文)
                    if($postObj->MsgType == 'text' && $postObj->Content == '自定义的关键词回复才会触发'){
                        
                        
                        $unionid = unionid($toUser);
                        
                        
                         $url = '学员api'.$unionid;
                         $res = getJson($url);
                        if ($res['data']['member_info'] != null ) {
                            
                            $realname = $res['data']['member_info']['realname'];  // 名称
                            $grade_name = $res['data']['member_info']['grade_name'];  // 年级
                            $major_name = $res['data']['member_info']['major_name'];  // 专业
                            // 查询数据库
                            $db=new mysqli('xxxxxx','xxxxxxxx','xxxxxxxxx','xxxxxxxxx');
                            if(mysqli_connect_error()){
                                putMark('Could not connect to database.');
                                exit;
                            }
                            $sql = "SELECT picurl FROM zf_kefu WHERE nianji = '".$grade_name."' AND zhuanye LIKE '%".$major_name."%' AND type = '客服' LIMIT 1";
                            $sqlis = "SELECT picurl FROM zf_kefu WHERE nianji = '".$grade_name."' AND zhuanye LIKE '%".$major_name."%' AND type = '客服' AND ispost = 0 limit 1";
                            $result = $db->query($sql);
                            $row=$result->fetch_row();
                            if ($row) {
                                $result = $db->query($sqlis);
                                $row=$result->fetch_row();
                                if ($row) {
                                    $picurl = implode('',$row);
                                } else {
                                    $db->query("update zf_kefu set ispost = 0 where type = '客服'");
                                    $result = $db->query($sqlis);
                                    $row=$result->fetch_row();
                                    $picurl = implode('',$row);
                                }

                            }else{
                                // 这里可以返回一个随意的客服
                                putMark('数据库获取该学员专属客服失败'.$realname.'-'.$grade_name.'-'.$major_name);
                            }
                            
                            $title1 = '标题';
                            $description1 = '内容~';
                            $url = $picurl;
                            imgtxt($toUser,$formUser,$time,$title1,$description1,$picurl,$url);
                            
                            $db->query("update zf_kefu set ispost = 1  where picurl = '".$picurl."'");

            
                        }else{
                            putMark('学信查询api无unionid'.$unionid);
                        }
        


                        // $content = 'xxxxxxxxx-xxxxxxxxx';
                        // $content_tezt = 'xxxxxxxxxxxx';
                        // text($toUser,$formUser,$time,$content_tezt);
                        // img($toUser,$formUser,$time,$content);
                    }
                }
     }
          
    function unionid($toUser){
        $accessToken = accessToken();
        $url = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$accessToken.'&openid='.$toUser.'&lang=zh_CN';
        $res = getJson($url);
        $unionid = $res['unionid'];
        if($unionid) {
            return $unionid;
        }
        
    }
     
    function text($toUser,$formUser,$time,$content)
        {
                   
            $templade = "<xml>
              <ToUserName><![CDATA[%s]]></ToUserName>
              <FromUserName><![CDATA[%s]]></FromUserName>
              <CreateTime>%s</CreateTime>
              <MsgType><![CDATA[text]]></MsgType>
              <Content><![CDATA[%s]]></Content>
            </xml>";
            echo sprintf($templade,$toUser,$formUser,$time,$content);
        }   
        
     function img($toUser,$formUser,$time,$content)
     {
         $templade = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[image]]></MsgType><Image><MediaId><![CDATA[%s]]></MediaId></Image></xml>";
         echo sprintf($templade,$toUser,$formUser,$time,$content);
     }
     function imgtxt($toUser,$formUser,$time,$title1,$description1,$picurl,$url){
          $templade = "
          <xml>
  <ToUserName><![CDATA[%s]]></ToUserName>
  <FromUserName><![CDATA[%s]]></FromUserName>
  <CreateTime>%s</CreateTime>
  <MsgType><![CDATA[news]]></MsgType>
  <ArticleCount>1</ArticleCount>
  <Articles>
    <item>
      <Title><![CDATA[%s]]></Title>
      <Description><![CDATA[%s]]></Description>
      <PicUrl><![CDATA[%s]]></PicUrl>
      <Url><![CDATA[%s]]></Url>
    </item>
  </Articles>
</xml>";
         echo sprintf($templade,$toUser,$formUser,$time,$title1,$description1,$picurl,$url);
     }
     
                
  
    
    function putMark($params){
        # 记录入参
$time = date('Y-m-d h:i:s',time());
// $paramsStr = json_encode($params,JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);
$data = $time.'---'.$params;
$address = 'log.log';
file_put_contents($address,$data."\r\n",FILE_APPEND);
}


    
    
    
function accessToken() {
    $tokenFile = "access_token.txt";//緩存文件名
    $data = json_decode(file_get_contents($tokenFile));
    if ($data->expires_in < time() == 1 or !$data->expires_in) {
        $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=xxxxxxxxxxx';
        $res = getJson($url);
        $access_token = $res['access_token'];
        if($access_token) {
            $data = [];
            $data['expires_in'] = time() + 7200;
            $data['access_token'] = $access_token;
            $fp = fopen($tokenFile, "w");
            fwrite($fp, json_encode($data));
            fclose($fp);
            
        }
    } 
    else {
        $access_token = $data->access_token;
    }
    return $access_token;
}


function getJson($url){
    $headerArray =array("Content-type:application/json;","Accept:application/json");
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);
    $output = curl_exec($ch);
    curl_close($ch);
    return json_decode($output, true);

}
function postJson($url,$data){
    $ch = curl_init();
    $headers = array(
        "Content-type: application/json;charset='utf-8'",
        "Accept: application/json",
        "Cache-Control: no-cache",
        "Pragma: no-cache",
    );

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    $ret = curl_exec($ch);
    curl_close($ch);
    $ret = json_decode($ret,true);

    return $ret;

}


    标签:php 微信公众号

    文章版权及转载声明

    作者:jstang本文地址:https://jstang.cn/post/229.html发布于2023-03-11
    文章转载或复制请以超链接形式并注明出处jstang博客

    • 上一篇 :php 企业微信外部联系人回调
    • 下一篇 :织梦dedecms常用写法

    同类推荐

    发表评论

    留言:dddxzxx

    最新文章

    windows定时访问脚本bat

    windows定时访问脚本bat

    @echo off:loopREM 获取当前小时(24小时制...

    • 55
    • 0
    宝塔瘦身,清理硬盘

    宝塔瘦身,清理硬盘

    1  /var/log/journal/...

    • 143
    • 0
    世界知识现在掌握在每个人的手掌中

    世界知识现在掌握在每个人的手掌中

    世界知识现在掌握在每个人的手掌中...

    • 228
    • 0
    想法--执行

    想法--执行

    未来属于那些有想法、还能动手去做的人。创办一家公司并不真的需...

    • 238
    • 0
    老张站群-单程序N域名站群插件演示

    老张站群-单程序N域名站群插件演示

    操作演示视频部分https://www.bilibili.c...

    • 739
    • 0

    热门排行

    css实现超出固定长度的部分以省略号显示

    css实现超出固定长度的部分以省略号显示

    1.一行中超出固定长度的部分以省略号显示#div1{&n...

    • 40453
    • 1
    老张站群-站群教程

    老张站群-站群教程

    注意 进行 超时设置 以防止50x PS : 源站...

    • 2684
    • 0
    python线程池

    python线程池

    ...

    • 2375
    • 0
    微信小程序对象赋值

    微信小程序对象赋值

    data{valueDa:{}}this.set...

    • 2354
    • 0
    小说正在扼杀我的阅读思考能力....

    小说正在扼杀我的阅读思考能力....

    从18岁就开始看第一本小说《诛仙》,慢慢的看到了现在28岁。...

    • 2343
    • 0

    猜你喜欢

    dede织梦接口发布后自动更新首页栏目页

    dede织梦接口发布后自动更新首页栏目页

    ...

    • 1323
    • 0
    严禁“嘚瑟”!!!

    严禁“嘚瑟”!!!

    自己只是收获一时快感但能让你产生“嘚瑟”“炫耀”的点已经就会...

    • 1627
    • 0
    css 固定宽高后图片裁剪

    css 固定宽高后图片裁剪

    object-fit: cover;...

    • 1204
    • 0
    获取分类信息

    获取分类信息

    当前分类的顶级分类信息...

    • 1492
    • 0
    微信公众号验证及被动回复事件

    微信公众号验证及被动回复事件

    验证完后,取消验证,进行相关事件处理<?php...

    • 1556
    • 0

    标签

    • pbootcms迁移
    • 织梦cms
    • zblog插件
    • 标签3
    • thinkphp
    • php
    • 标签1
    • 标签2
    • องค์ประกอบของนักเรียนชั้นประถมศึกษา
    • 测试标签
    嘿,欢迎咨询
    jstang博客
    回到顶部

    涉及到的所有程序逻辑仅用来学习交流,严禁用于非法用途,产生的一切后果自行承担! 。用户在使用程序时,应遵守相关法律法规,不得利用本软件进行任何违法活动 ,因用户违反本《协议》或使用程序造成的任何损失和法律责任,由用户自行承担,本程序不承担 任何责任。冀ICP备2022024290号-1