微信公众号开发系列
来源:互联网 发布:搜片大师源码 编辑:程序博客网 时间:2024/05/18 07:18
花了两天时间看了微信公众号开发,大致了解了下。
网上关于开发公众号的资料挺多的,官网的api接口可以多看看
简单说下,微信公众号开发就两种模式,一个是傻瓜式开发,不涉及任何代码,另一种就是使用后台语言,搭建自己服务器,灵活写业务逻辑来处理用户对公众号的请求。
https://mp.weixin.qq.com/wiki
官方的开发者文档写的非常详细,不过初次接触可能会懵逼,特别像我这种常年不用微信的人,为了学微信公众号开发,还特意去使用微信。。。
按照文档说明,基本配置弄完之后,成功接入后台开发。
官方给的demo能展示给你最初的基本自动回复消息。
服务器和官方微信服务器每次通信都是通过封装好的xml文件进行交流
所以,在文档里面展示给我们的都是各种xml接口,你要做的就是在后台处理好业务逻辑
然后把参数通过xml文件传输给微信服务器,相应的你从用户那里获取的信息也都通过xml格式传递。
网上关于开发公众号的资料挺多的,官网的api接口可以多看看
简单说下,微信公众号开发就两种模式,一个是傻瓜式开发,不涉及任何代码,另一种就是使用后台语言,搭建自己服务器,灵活写业务逻辑来处理用户对公众号的请求。
https://mp.weixin.qq.com/wiki
官方的开发者文档写的非常详细,不过初次接触可能会懵逼,特别像我这种常年不用微信的人,为了学微信公众号开发,还特意去使用微信。。。
按照文档说明,基本配置弄完之后,成功接入后台开发。
官方给的demo能展示给你最初的基本自动回复消息。
public function responseMsg() {//get post data, May be due to the different environments$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post dataif (!empty($postStr)){ /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, the best way is to check the validity of xml by yourself */ libxml_disable_entity_loader(true); $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 wechat world!"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo "Input something..."; } }else { echo ""; exit; } }
服务器和官方微信服务器每次通信都是通过封装好的xml文件进行交流
所以,在文档里面展示给我们的都是各种xml接口,你要做的就是在后台处理好业务逻辑
然后把参数通过xml文件传输给微信服务器,相应的你从用户那里获取的信息也都通过xml格式传递。
下面,我分享一个自己封装图灵机器人的接口
//robot.php<?phpfunction MyRobot($info) {$key = "";$apiUrl = "http://www.tuling123.com/openapi/api?key=".$key."&info=".$info;$result = file_get_contents($apiUrl);$result = json_decode($result,true);switch ($result['code']) {case '100000':return $result['text'];break;case '200000':$text = $result['text'] . ',<a href="' . $result['url'] . '">点击进入</a>';return $text;break;case '302000':$length = count($result['list']);for ($i=0; $i < $length; $i++) { $article[$i] = array('Title' => $result['list'][$i]['article'],'Description' => $result['list'][$i]['source'],'Icon' => $result['list'][$i]['icon'],'Url' => $result['list'][$i]['detailurl']);}return $article;break;case '308000':$length = count($result['list']) > 3?3:count($result['list']);for ($i=0; $i < $length; $i++) { $article[$i] = array('Name' => $result['list'][$i]['name'],'Info' => $result['list'][$i]['info'],'Icon' => $result['list'][$i]['icon'],'Url' => $result['list'][$i]['detailurl']);}return $article;break;default:return $result['text'];break;}}?>
<?php/** index.php * wechat php test *///define your tokendefine("TOKEN", "yefeng");$access_token = "";$wechatObj = new wechat();$wechatObj->responseMsg();//$wechatObj->setMenu();class wechat{ /* public function setMenu() { $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=BeIkRCHJpK8o0Af3UR1xKALpdeATwKAeo7xuS41yBWQUHpaRfrUStkaZhm7paTunXXVC62rpfNCOqJdlR3oJHRSHBHX4oejwrrjhwx_xs0AAidjYK8wtY76bB3k_xUbRYIAdAFAUEW"; $ch = curl_init($url) ; curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS,$data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); $result = curl_exec($ch) ; curl_close($ch) ; return $result; }*/ public function responseMsg() {$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];if (!empty($postStr)){ libxml_disable_entity_loader(true); $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $this->getContentFromMsgType($postObj); }else { echo "post提交为空~"; exit; } } public function getContentFromMsgType($postObj) { $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $msgType = $postObj->MsgType; $time = time(); switch ($msgType) { case 'text': $keyword = trim($postObj->Content); include('./robot.php'); $contentStr = MyRobot($keyword); if(is_array($contentStr)) { $length = count($contentStr); for ($i=0; $i < $length; $i++) { $con = $contentStr[$i]; foreach ($con as $key => $value) { if(!($value)) { } else { $con_array = $con_array.$value."\n\n"; } } } $contentStr = $con_array; } $resultStr = $this->responseText($postObj,$contentStr); echo $resultStr; break; case 'image': $imageUrl = $postObj->PicUrl; $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>"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $imageUrl); echo $resultStr; break; case 'voice': echo "voice"; break; case 'shortvideo': $resultStr = $this->responseText($postObj,"你发的是视频文件~"); echo $resultStr; break; case 'location': echo "location"; break; case 'link': echo "link"; break; case 'event': $this->getContentFromEvent($postObj); break; default: $resultStr = $this->responseText($postObj,"我是图灵机器人,不信你可以发消息给我咯~~"); echo $resultStr; break; } } public function getContentFromEvent($postObj) { $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $creatTime = $postObj->CreateTime; $event = $postObj->Event; $time = time(); switch ($event) { case 'subscribe': echo $this->responseText($postObj,"欢迎关注~~我是图灵机器人,不信你发消息给我看看咯~~"); break; case 'unsubscribe': echo $this->responseText($postObj,"亲~你要离开我了,好舍不得啊~~"); break; default: echo $this->responseText($postObj,"信不信我揍你~~"); break; } } public function responseText($postObj,$contentStr) { $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $creatTime = $postObj->CreateTime; $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>"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, "text", $contentStr); return $resultStr; } public function getImageId() { $access_token = getAccessToken(); $url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=".$access_token."&type=thumb"; $filepath = dirname(__FILE__)."/crazy.jpg"; $data = array('media' =>"@".filepath); $cur = curl_init(); curl_setopt($cur,CURLOPT_URL,$url); curl_setopt($cur,CURLOPT_RETURNTRANSFER,1); curl_setopt($cur,CURLOPT_PORT,1); curl_setopt($cur,CURLOPT_POSTFIELDS,$data); $media_res = curl_exec($cur); curl_close($cur); $thumb_res = json_decode($media_res,true); $thumb_media_id = $thumb_res['thumb_media_id']; return $thumb_media_id; } public function getAccessToken() { define("APPID","wx53736436e359345d"); define("APPSECRET","41ab99dbda8b8b4250919e9e23058ba1"); $access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".APPID."&secret=".APPSECRET; $result = file_get_contents($access_token_url); $result = json_encode($result,true); $access_token = $result['access_token']; return $access_token; }}
0 0
- 微信公众号开发系列
- 微信公众号开发系列
- 微信公众号开发系列-获取微信OpenID
- 微信公众号开发系列-获取微信OpenID
- 微信公众号开发系列-获取微信OpenID
- 微信公众号开发系列-获取微信OpenID
- 微信公众号开发系列-获取微信OpenID
- 微信公众号开发系列-启用开发模式
- 微信公众号开发系列-发送客服消息
- java微信公众号开发系列——入门
- 微信公众号开发系列一:环境准备
- 微信公众号开发系列二:公众号开发配置和工程搭建
- 微信公众号开发系列-微信企业号开发相关参数
- 【微信开发系列】1. python开发微信公众号消息回复开发者模式
- 微信硬件开发系列教程03-微信公众号开发DEMO(airkiss/airsync)
- 从零开发微信公众号系列 【一】账号准备及公众号类型简介
- 微信公众号开发
- 微信公众号开发
- 【leetcode】231. Power of Two
- AbstractQueuedSynchronizer
- 设计模式之 模板模式(做练习题实例)
- 求完数
- Android设置EditText只能输入字母和数字
- 微信公众号开发系列
- js验证真实姓名
- freeswitch接入网络摄像头
- 单点登录之apacheds之springMVC下操作使用
- HDU1282 回文数猜想 (简单模拟)
- 如何在ScrollView 中如何嵌入ListView
- 常见的全局变量定义
- HSV颜色相似度
- 用户,组管理