大致分为四个部分:

  • 定义TOKEN
  • 声明一个类 wechatCallbackapiTest
  • 创建类wechatCallbackapiTest 的一个实例对象 $wechatObj
  • 调用类的 valid() 方法。

详细分析

定义TOKEN

TOKEN 是用来交互时进行安全认证的,开发者可以随意定义,但要和公众平台里设置的一样。

声明一个类

声明一个类 wechatCallbackapiTest,该类中包含有三个方法。

  • valid() 申请 成为开发者 时向微信发送验证信息。验证通过后,需要注释掉对此函数的调用。
  • responseMsg()处理并回复用户发送过来的消息,也是用的最多的一个函数,几乎所有的功能都在这里实现。
在此处可以获取到用户的openid
  
public function responseMsg(){
        //get post data, May be due to the different environments
        //接收微信公众平台发送过来的用户消息,该消息数据结构为XML,不是php默认的识别数据类型,
        //因此这里用了$GLOBALS['HTTP_RAW_POST_DATA']来接收
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
          //extract post data
        if (!empty($postStr)){
                //使用 simplexml_load_string() 函数将接收到的XML消息数据载入对象$postObj中。                
                  $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);                
                $fromUsername = $postObj->FromUserName;//用户的 openid
                $toUsername = $postObj->ToUserName;//公众账号的ID
                $keyword = trim($postObj->Content);//trim() 函数从字符串的两端删除空白字符和其他预定义字符,得到用户输入的关键词
                $time = time();
                //微信输出内容模板
                $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(!empty( $keyword )){
                      $msgType = "text";//给用户返回文本消息类型
                    $contentStr = "Welcome to wechat world!";//回复的消息内容
                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                    echo $resultStr;
                }else{
                    echo "Input something...";//you can output help
                }
        }else {
            echo "";
            exit;
        }
    }


  • checkSignature()

开发者通过检验signature对请求进行校验。若确认此次GET请求来自微信服务器,原样返回echostr参数内容,则接入生效,否则接入失败。

signature结合了开发者填写的token参数和请求中的timestamp参数、nonce随机数参数。

加密/校验流程:

  • 1. 将token、timestamp、nonce三个参数进行字典序排序
  • 2. 将三个参数字符串拼接成一个字符串后进行sha1加密
  • 3. 开发者获得加密后的字符串可与signature对比,验证该请求是否来源于微信

调用类的valid()方法执行接口验证,接口设置成功后需要将其注释掉。

艺搜参考

javascript:void(0)

时间宝贵,只能复制+粘贴,若图片无法显示或排版混乱,请访问elesos.com查找原文