zoukankan      html  css  js  c++  java
  • 微信公众平台开发2:示例代码分析

    大致分为四个部分:

    • 定义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()方法执行接口验证,接口设置成功后需要将其注释掉。

    艺搜参考

    http://www.cnblogs.com/mchina/archive/2013/06/07/3120592.html

  • 相关阅读:
    CSRF 攻击原理及防护
    XSS 攻击原理及防护
    git 基础命令大全
    vue3.0 VS vue2.0
    Android eMMC Booting[wiki百科]
    Android Fastboot[wiki百科]
    Android View.onMeasure方法的理解[转]
    某android游戏逆向小记
    Android网络编程—同时上传参数和文件到服务器 [转载]
    apk自我保护的一种实现方式——运行时自篡改dalvik指令【转载】
  • 原文地址:https://www.cnblogs.com/elesos/p/5924497.html
Copyright © 2011-2022 走看看