zoukankan      html  css  js  c++  java
  • 微信公众平台搭建与开发(二)开发模式的搭建和关键词回复

    在第一部分介绍了编辑模式,可是编辑模式有较大局限性。以下主要開始介绍开发模式,这一部门先简介下开发模式的环境搭建和关键词回复。

    开发模式首先要有一个虚拟主机,本人使用的是新浪开发人员平台的虚拟主机。使用云豆计算流量,若成为新浪开发人员用户基本上就能够免费使用了,本人注冊用户所赠送的云豆不知道能用多久。当然国内比較大还有就是百度开发人员平台。注冊后发现部署还没有新浪的方便。而且在BAE3.0以后好像也是要收费的。有兴趣的朋友能够研究下google的开发人员平台,不知道是否要收费。


    在注冊新浪开发人员平台用户后,创建一个相关应用,之后把微信的DEMO代码上传后就可以。在操作中即能上传和编辑代码,还是十分方便的。

    之后回到微信公众平台主页。填写url地址和Token。并开启开发模式


    当出现上面步骤时。表示你已经完毕开发模式的部署。可是开发模式和编辑模式仅仅能二选一。

    以下对微信的DEMO程序作具体的解释。

    DEMO程序能够在微信公众平台开发人员文档中-》接入指南-》PHP演示样例代码下载中找到。

    <?

    php /** * wechat php test */ //define your token define("TOKEN", "weixin");//与微信公众平台一直,更改后微信公众平台也要随之更改 $wechatObj = new wechatCallbackapiTest(); //$wechatObj->valid();//验证开发模式接口 $wechatObj->responseMsg();//调用回复信息方法 class wechatCallbackapiTest { public function valid()//若此次GET请求来自微信server。请原样返回echostr參数内容。则接入生效 { $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"];//保存微信端发送的变量,因为发送的是XML格式,使用$_POST无法解析,所以使用$GLOBALS //extract post data if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);//解析XML格式数据 $fromUsername = $postObj->FromUserName;//微信用户端的username $toUsername = $postObj->ToUserName;//你的公众账号ID $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";//回复文本信息类型为text文本 //$contentStr = "Welcome to wechat world!"; $contentStr = "欢迎关注微信!";//回复的信息内容,微信文本格式最多支持682个汉字 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);//对XML格式中的变量进行赋值 echo $resultStr;//输出回复信息。即发送微信 }else{ echo "Input something..."; } }else { echo ""; exit; } } //开发人员通过检验signature对请求进行校验(以下有校验方式)。若确认此次GET请求来自微信server,请原样返回echostr參数内容,则接入生效。成为开发人员成功,否则接入失败。 //加密/校验流程例如以下: //1. 将token、timestamp、nonce三个參数进行字典序排序 //2. 将三个參数字符串拼接成一个字符串进行sha1加密 //3. 开发人员获得加密后的字符串可与signature对照,标识该请求来源于微信 private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } } ?

    >

    //$wechatObj->valid();//验证开发模式接口
    $wechatObj->responseMsg();//调用回复信息方法
    对于演示样例的代码的凝视已经在代码中,这里要注意的是,若要自己主动回复消息,将验证函数凝视,而且调用回复信息函数就可以。

    针对关键词的自己主动回复,仅仅须要改动responseMsg()函数就可以。

     public function responseMsg()//回复微信的关键
        {
    		//get post data, May be due to the different environments
            $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//保存微信端发送的变量。因为发送的是XML格式。使用$_POST无法解析,所以使用$GLOBALS
    
          	//extract post data
    		if (!empty($postStr)){
                    
                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);//解析XML格式数据
                $fromUsername = $postObj->FromUserName;//微信用户端的username
                $toUsername = $postObj->ToUserName;//你的公众账号ID
                $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";//回复文本信息类型为text文本
                        //$contentStr = "Welcome to wechat world!";
                        //$contentStr = "欢迎关注微信!";//回复的信息内容,微信文本格式最多支持682个汉字
                        if($keyword == "1"){
                            $contentStr = "你输入的是1。";
                        }
                        else if($keyword == "2"){
                            $contentStr = "你输入的是2。";
                        }else{
                            $contentStr = "你输入的是其它!";
                        }
                        
                        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);//对XML格式中的变量进行赋值
                        echo $resultStr;//输出回复信息,即发生微信
                    }else{
                    	echo "Input something...";
                    }
    
            }else {
            	echo "";
            	exit;
            }
        }


    sprintf(format,arg1,arg2,arg++)參数 描写叙述 
    format 必需。

    转换格式。 
    arg1 必需。规定插到 format 字符串中第一个 % 符号处的參数。 
    arg2 可选。规定插到 format 字符串中第二个 % 符号处的參数。

     
    arg++ 可选。规定插到 format 字符串中第三、四等等 % 符号处的參数。

  • 相关阅读:
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 实现业务
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 开发流程
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 报表系统集成说明
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 处理报表
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 数据访问
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 分布式应用
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 实现插件
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 对象设计器使用帮助
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 数据层开发
    Jquery 中的CheckBox、 RadioButton、 DropDownList、CheckBoxList、RadioButtonList的取值赋值
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7147860.html
Copyright © 2011-2022 走看看