首页 > 代码库 > 解读微信公共平台开发

解读微信公共平台开发

搭建环境

前一段在CSDN上跟了一篇帖子然后不少同学都来添加我的QQ来询问一些关于微信公共平台的搭建和开发问题。其实本人觉得微信公共平台开发的门槛并不高,是大家把它想的太神秘。因为是本博第一篇文章如果写的不好还请大家多多谅解。 跳过微信公共账号的申请和微信公共平台的基本功能,如果这点有需要帮助的可以直接问问自己的小学老师。直奔主题,在主菜单选择“功能->高级功能”然后进入“开发模式”开启开发模式病点击“成为开发者”接口配置信息先空着,可以在这里找到示例代码。 现在到了搭建微信服务器的步骤了,你可以选择SAE、BAE或者云主机来搭建,本人将会用极少的篇幅来将这几种方法一一做个简短的说明。

  • SAE:申请账号神马的还是跳过,在个人首页选择“创建新应用”,二级域名、应用名称、应用描述按自己的情况填写,开发语言选择PHP,应用类型选择web应用,接着在应用信息中选择代码管理,选择“上传您的代码”,将前面下载的实例代码上传即可;
  • 云服务器:直接将前面下载的压缩包接下用FTP上传到你的服务器中即可;
  • BAE:在个人首页选择快速创建应用,然后在选择“Web应用”,应用名称自取,接入方式选择"PC Iframe应用",同意条款->确定,在接下来的窗口中应用域名、应用名称自取,环境类型选择PHP,执行环境选择公共集群,SVN还是GIT按自己的情况来定,然后在我的应用中选择刚才建好的应用,在云环境->版本管理中选择创建新版本,然后选择上传PHP代码包将我们下载的zip实例代码上传即可;

开发模式的基本功能设计

示例代码解读:

  • Token:默认值是weixin,为了自定义也可更改为其他值。修改后公共平台的开发模式借口也要修改;
  • valid()方法主要是验证开发模式接口;
  • respinseMsg():微信回复信息方法;

*其他方法就不做赘述了 然后我们就开始coding吧!

微信自动回复内容

<?php/*** wechat php test*///define your tokendefine("TOKEN", "weixin");$wechatObj = new wechatCallbackapiTest();//$wechatObj->valid();$wechatObj->responseMsg();

首先注释掉$wechatObj->valid(); 然后调用responseMsg()方法;这时候你就可以发送信息到你的微信平台,将会得到“Welcome to wechat world!”这条信息,也可以修改$contentStr = "Welcome to wechat world!";为你向要得到的信息;

关注回复

根据官方的API 4.5中我们可以看到参数Even中的subscribe,由于官方文档没有提取这两个参数,我们需要进行提取。我们在程序中添加变量$type和$customevent,而提取这个参数的方法我们可以参考官方代码中的ToUserName的方法。而处理关注时间,我们可以使用if语句,当$type的值为event,$customevent的值为subscribe时,返回关注信息;

    $postObj = simplexml_load_string($postStr, ‘SimpleXMLElement‘, LIBXML_NOCDATA);            $fromUsername = $postObj->FromUserName;            $toUsername = $postObj->ToUserName;            $type=$postObj->MsgType;            $customevent=$postObj->Event;            $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 ($type=="event" and $customevent=="subscribe") {                # code...                $contentStr="感谢您的关注! \n 本微信每周将会不定时推送翊仰最近看的一些书或新闻的看法和感想,                以及最近翊仰关注的一些技术领域的学习经验!\n 回复“关于”查看翊仰一些联系方式";                $msgType="text"                resultStr=sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);            }

微信关键词自动回复

代码实例如下:

if (!empty($postStr)){            $postObj = simplexml_load_string($postStr, ‘SimpleXMLElement‘, LIBXML_NOCDATA);            $fromUsername = $postObj->FromUserName;            $toUsername = $postObj->ToUserName;            $type=$postObj->MsgType;            $customevent=$postObj->Event;            $latitude=$postObj->Location_X;//通过地图获取纬度            $longitude=$postObj->Location_Y;//通过地图获取精度            $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>";             switch ($type) {//分类信息类型                case "event":                    if ($customevent="subscribe") {                        $contentStr="感谢您的关注! \n 本微信每周将会不定时推送翊仰最近看的一些书或新闻的看法和感想,                以及最近翊仰关注的一些技术领域的学习经验!\n 回复“关于”查看翊仰一些联系方式 \n 查看翊仰的blog:https://neikubar.farbox.com/ 可搜索以往文章。";                    }                    break;                case "location":                    $contentStr="你的纬度是{$latitude},经度是{$longitude},定位已完成!";                    break;                case ‘text‘:                    switch ($keyword) {                        case ‘关于‘:                            $contentStr="翊仰的微博:Http://www.weibo.com/weangyiyang \n 翊仰的blog:https://neikubar.farbox.com/";                            break;                        default:                            $contentStr="此功能尚未开放";                            break;                    }                    break;                default:                    $contentStr="此功能尚未开放";                    break;            }                $msgType = "text";                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);                echo $resultStr;    }else {        echo "";        exit;    }}