您现在的位置是:网站首页 > 脚本编程>

微信公众平台开发(二)代码分析

2014-06-261076人围观
简介 一、简介微信公众平台提供了一个简单的php示例代码,在做进一步开发之前,我们有必要将其详细了解一下。二、代码获取微信官网:http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.zip 三、代码分析

一、简介

微信公众平台提供了一个简单的php示例代码,在做进一步开发之前,我们有必要将其详细了解一下。

二、代码获取

微信官网:http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.zip

三、代码分析

<?php

define("TOKEN", "weixin");

$wechatObj = new wechatCallbackapiTest();

$wechatObj->valid();

class wechatCallbackapiTest

{

    public function valid()

{

   $echoStr = $_GET["echostr"];

        if($this->checkSignature()){

            echo $echoStr;

            exit;

        }

    }

    public function responseMsg()

    {

        //get post data, May be due to the different environments

        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

 

        //extract post data

        if (!empty($postStr)){

                

                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

                $fromUsername = $postObj->FromUserName;

                $toUsername = $postObj->ToUserName;

                $keyword = trim($postObj->Content);

                $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...";

                }

 

        }else {

            echo "";

            exit;

        }

    }

        

    private function checkSignature()

    {

        $signature = $_GET["signature"];

        $timestamp = $_GET["timestamp"];

        $nonce = $_GET["nonce"];    

                

        $token = TOKEN;

        $tmpArr = array($token$timestamp$nonce);

        sort($tmpArr);

        $tmpStr = implode$tmpArr );

        $tmpStr = sha1$tmpStr );

        

        if$tmpStr == $signature ){

            return true;

        }else{

            return false;

        }

    }

}

?>

四、整体解析

官方的原始代码大致分为四部分

1.自定义token

2.声明一个类

3.实例化类

4.调用valid()

自定义token是为了和官方微信公众平台进行通信,进行交互安全认证。

五、类中三个方法的作用

class wechatCallbackapiTest

{

//用于申请 成为开发者 时向微信发送验证信息。

public function valid()

{}

处理并回复用户发送过来的消息,也是用的最多的一个函数,几乎所有的功能都在这里实现。

public function responseMsg()

{}

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

 private function checkSignature()

{}

}

加密/校验流程:

1. 将token、timestamp、nonce三个参数进行字典序排序

2. 将三个参数字符串拼接成一个字符串进行sha1加密

3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信


如书写有误请指证,联系QQ:826782664 添加请说明原因

打赏本站,你说多少就多少

精彩评论

Copyright © 2013-2019 千奇博客 保留所有权利 辽ICP备13008238号