微信应用开发【PHP】---笔记1---用户发送问号,公众号响应回复用户当前时间

一、用户发送问号,公众号响应回复用户当前时间

1.逻辑

在这里插入图片描述在这里插入图片描述在这里插入图片描述链接为:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html

if (isset($_GET[‘echostr’])) {
$wechatObj->valid();
} else {
$wechatObj->responseMsg();
}
echostr存在的话,则是后台校验对接请求,就去执行wechatObj类中的valid函数验证开发模式
echostr不存在的话去执行wechatObj类中的responseMsg函数来回复用户信息

2.代码

<?php
/**用户发送问号,公众号响应回复用户当前时间
 *实现方法
 *在wechatCallbackapiTest这个类中有三个函数valid,responseMsg,checkSignature,
 * valid和checkSignature主要是用来验证用的,而responseMsg则是用来回复用户消息的。
 *参考官方链接:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html
 *
 */

error_reporting(0);
header('Content-type:text');
//定义token,token很重要在应用中要注意保密
define("TOKEN", "weixin");//定义token常量,按照你自己的实际来!!!
/**将class wechatCallbackapiTest类实例化
 * 新建一个wechatCallbackapiTest类型对象wechatObj
 * 下面有wechatCallbackapiTest类
 */
$wechatObj = new wechatCallbackapiTest();//实例化类wechatCallbackapiTest

//对接请求,如果请求中包含'echostr'则验证,没有则回复信息
//全局变量$_GET
if (isset($_GET['echostr'])) { //echostr存在的话去执行wechatObj类中的valid函数
    $wechatObj->valid();//使用->访问类中valid方法,用来验证开发模式
} else {//echostr不存在的话去执行wechatObj类中的responseMsg函数
    $wechatObj->responseMsg();//使用->访问类中responseMsg方法,用来回复用户信息
}

/**
 *声明一个类 wechatCallbackapiTest,该类中包含有三个方法(函数)
 * valid,responseMsg,checkSignature。
 * 参数说明:
 * signature    微信加密签名,
 * signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
 * timestamp    时间戳
 * nonce    随机数
 * echostr    随机字符串
 */
class wechatCallbackapiTest
{
//验证接口的函数,用于申请成为开发者时向微信发送验证信息。
    public function valid()
    {
//从微信用户端获取一个随机字符赋予变量echostr
        $echoStr = $_GET["echostr"];
//valid signature,option访问地的checkSignature函数签名验证方法,
//如果签名一致,输出变量echostr,完整验证配置接口的操作
        /**this在OOP中就是伪变量,
         * (伪变量不是真正的变量,只是形式上是变量,变量中存储的是固定的值,$this中并没有,哪个对象调用,$this就代表哪个对象)
         * 同时,也可以将$this理解为对象的引用,$this通过引用的形式访问一个对象的方法和属性
         * 所以$this代表这个类wechatCallbackapiTest
         **/
        if ($this->checkSignature()) {//函数在下面
            echo $echoStr;
            exit;
        }
    }
//校验函数,校验对接身份函数,签名验证程序
    function checkSignature()
    {
//从用户端获取参数signature的值再赋值给变量signature(签名)
//获取参数timestamp的值再赋值给变量timestamp(时间戳)
//获取参数nonce的值再赋值给变量nonce(随机数、临时数)
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
//将TOKEN赋值给变量token(就是固定值"weixin")
        $token = TOKEN;
//数组变量tmpArr,存储$token, $timestamp, $nonce
        $tmpArr = array($token, $timestamp, $nonce);
//新建排序,将token、timestamp、nonce三个参数进行字典序排序
        sort($tmpArr);
//implode() 函数返回由数组元素组合成的字符串
        $tmpStr = implode($tmpArr);
//shal加密!!!
        $tmpStr = sha1($tmpStr);

        if ($tmpStr == $signature) {
            return true;
        } else {
            return false;
        }
    }
//响应消息函数,发送问号响应回复用户时间
    public function responseMsg()
    {
        /*接收微信公众平台上用户发送过来的消息,
        该消息数据结构为XML,不是php默认的识别数据类型,
        因此这里用了$GLOBALS['HTTP_RAW_POST_DATA']来接收,
        同时赋值给了$postStr*/
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        if (!empty($postStr)) {
            //simplexml_load_string为——转换形式良好的 XML 字符串为 SimpleXMLElement 对象,然后输出对象的键和元素
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
//将对象$postObj中的发送消息用户的OPENID赋值给$fromUsername变量
            $fromUsername = $postObj->FromUserName;
//将对象$postObj中的公众账号的ID赋值给$toUsername变量
            $toUsername = $postObj->ToUserName;
//trim() 函数从字符串的两端删除空白字符和其他预定义字符,这里就可以得到用户输入的关键词
            $keyword = trim($postObj->Content);
//time() 函数返回当前时间的 Unix 时间戳,即自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。
            $time = time();
//xml的数据格式,存放微信输出内容的模板
            //5个%;
            $textTpl = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[%s]]></MsgType>
                        <Content><![CDATA[%s]]></Content>
                        <FuncFlag>0</FuncFlag>
                        </xml>";
            if ($keyword == "学号") {
                $msgType = "text";
                $content = "1111111";
                $result = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $content);
                echo $result;
            }
            if ($keyword == "姓名") {
                $msgType = "text";
                $content = "新月";
                $result = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $content);
                echo $result;
            }
            if ($keyword == "?" || $keyword == "?") {//两个问号不一样,一个中文一个英文
                $msgType = "text";
                $content = date("Y-m-d H:i:s", time());
                $result = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $content);
                echo $result;
            }
        } else {
            echo "";
            exit;
        }
    }
}

二、补充:

PHP storm注释快捷键 1.// ctrl+/ 2./* */ shift+ctrl+/

那篇太乱,到这边整理,
乱的那篇链接为https://www.cnblogs.com/jiuzhen/p/12938179.html


2020-06-12
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值