大家好,又见面了,我是你们的朋友全栈君。
微信公众号与微信客户端之间的通信机制如下图所示:
公众账号需要根据不同微信用户的不同消息做出不同的响应,所以每一个公众账号需要开发自己独有的系统,这套系统需要运行在公网环境下,但是我们通常普通开发人员没有这个条件,所以我选择了新浪云(天真的我以为是免费的,结果花了10个小洋)。
第一步 注册微信公众账号
我用已有的微信号,扫码即可得到一个
第二步 注册新浪云
微信公众平台提供了一个php示例代码:http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.zip
下载下来,解压缩,打开编辑。将token值设置为你所需要的值,token可由开发者任意填写,用作生成签名。所以这里我选择PHP,之前我从来没写过PHP。
如上图所示,点击weixin->管理应用,然后点击 应用->代码管理 上传公众号后台系统的代码。(因为我也是刚开始学,所以没有修改示例程序,直接上传wx_sample.zip)
上面的基本上是我从网上搜集到的材料,但是下面这个坑,自己踩了将近3个小时,我看网上很多人也遇到了相同的问题。就是URL和Token都设置好了,而且确认无误,但是点击提交以后,提示配置错误。找了一些材料,首先用记事本把wx_sample.php的编码改成了utf-8,但是有人用BOM头的问题,所以用ultra-edit另存为utf-8无BOM,终于才提交通过。
现在你就可以用你自己的微信号给公众号发消息,并且编写自己的代码做出响应了。
代码语言:javascript复制<?php//define your tokendefine("TOKEN", "weixin");$wechatObj = new wechatCallbackapiTest();//$wechatObj->valid();$wechatObj->responseMsg(); class wechatCallbackapiTest{ public function valid() { $echoStr = $_GET["echostr"]; //valid signature , option if($this->checkSignature()){ //如果验证失败,可以加上这一句 header('content-type:text'); echo $echoStr; exit; } else{ echo "error!"; 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 liudan 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; } }}?>
效果如下,再次基础上搞个聊天机器人,图灵机器人等等就可以了
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/234083.html原文链接:https://javaforall.cn