博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信公众平台搭建与开发(二)开发模式的搭建和关键词回复
阅读量:5876 次
发布时间:2019-06-19

本文共 4619 字,大约阅读时间需要 15 分钟。

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

开发模式首先要有一个虚拟主机,本人使用的是新浪开发人员平台的虚拟主机。使用云豆计算流量,若成为新浪开发人员用户基本上就能够免费使用了,本人注冊用户所赠送的云豆不知道能用多久。当然国内比較大还有就是百度开发人员平台。注冊后发现部署还没有新浪的方便。而且在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 = "
%s
0
";//微信的目标方。来源方。系统时间,信息类型,内容,是否星标微信 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 字符串中第三、四等等 % 符号处的參数。

你可能感兴趣的文章
ElementUI Table组件,如何在多页数据下勾选多行
查看>>
什么是Scala Scala如何学习和入门之我的个人学习经验以及相关实战
查看>>
golang 指针实践
查看>>
Android JNI 代码自动生成
查看>>
elemetui中好用的小技巧
查看>>
Laravel 文件上传提示 “The file "" deos not exits ” ,但确实已经上传了文件
查看>>
4.4 -4.5
查看>>
一天一个知识点 - 浅谈 JavaScript 原型链
查看>>
【变态需求】bootstrapTable列排序-选择正序倒序不排序
查看>>
Interface实现Fragment之间的通讯
查看>>
基于Vue+Canvas移动端的简单水印制作
查看>>
微信小游戏学习笔记 - 使用three.js 绘制一个旋转的三角形
查看>>
charles之localhost、127.0.0.1抓不到包的问题
查看>>
一些git实用技巧
查看>>
关于flutter APP更新相关部分内容
查看>>
Centos7.6安装MySQL+Redis(最新版)
查看>>
ListIterator
查看>>
Redis实战之限制操作频率
查看>>
单例模式
查看>>
RxSwift笔记四变换序列
查看>>