版权声明:转载请注明出处 https://blog.csdn.net/k183000860/article/details/52174848
花了两天时间看了微信公众号开发,大致了解了下。
网上关于开发公众号的资料挺多的,官网的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 data
if (!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
<?php
function 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 token
define("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;
}
}