专注于WEB技术的IT博客

对微信开发文档示例代码的理解

时间:2014-05-09分类: php浏览:4240
分享到:

微信公众平台,现在如火如荼中,特别是企业,都喜欢给自己的网站加入个微信扫描图,以求客户的关注,用微信公众号来打造自己的营销平台。。。于是乎,关于微信公众平台的开发需求也应运而生了。

从今天起,我来也要关注一下微信公众平台接口的开发。

在微信公众人平台的官网开发文档下载了案例文件wx_sample.php,把代码啃了一下,现附上自己的见解:

/**
  * wechat php test
  */

//define your token
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();

class wechatCallbackapiTest
{
	public function valid()
    {
        $echoStr = $_GET["echostr"];//随机字符串

        //valid signature , option
        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;//获取$postObj对象中FromUserName的<![CDATA[%s]]>值
                $toUsername = $postObj->ToUserName;
                $keyword = trim($postObj->Content);
                $time = time();
				/*
				*ToUserName--开发者微信号
				*FromUserName--发送方帐号(一个OpenID)
				*CreateTime--消息创建时间 (本为整型,不过这里以字符串格式输出)
				*MsgType--location
				*Content--文本消息内容
				*%s - 字符串格式
				*/
                $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!";
					//sprintf输出格式函数
					//$textTpl为输出格式
				
                	$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                	echo $resultStr;
                }else{
                	echo "Input something...";
                }

        }else {
        	echo "";
        	exit;
        }
    }
	/*
	 *加密/校验流程如下:
     *1. 将token、timestamp、nonce三个参数进行字典序排序
     *2. 将三个参数字符串拼接成一个字符串进行sha1加密
     *3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
	*/	
	private function checkSignature()
	{
        $signature = $_GET["signature"];//微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
        $timestamp = $_GET["timestamp"]; //时间戳
        $nonce = $_GET["nonce"];//随机数	
        		
		$token = TOKEN;
		$tmpArr = array($token, $timestamp, $nonce);
		sort($tmpArr, SORT_STRING); //进行字典序排序
		$tmpStr = implode( $tmpArr );
		$tmpStr = sha1( $tmpStr ); //sha1加密后与签名对比
		
		if( $tmpStr == $signature ){
			return true;
		}else{
			return false;
		}
	}
}


猜你喜欢
phpcms微信插件自定义菜单绑定栏目获取消息的实现与应用
phpcms微信插件新增绑定栏目群发功能
phpcms微信插件自动回复的优化方法
基于phpcms v9开发的微信公众号平台管理模块终于完成
如何使用微信公众平台的开发接口
微信公众平台开发之关注/取消关注事件
微信公众平台开发入门教程
标签 : 微信开发 php
除非注明,本文首发网志博客,欢迎转载!转载请注明本文地址:http://w3note.com/web/163.html,谢谢。
  • 评论
  • 赞助本站