微信公众号分为三种类型:
- 订阅号;
- 服务号;
- 企业号;
想要进行微信公众号的开发,必须熟悉一门后台开发语言,如java、php、.net等都可以,接着你需要有一个自己的服务器,像阿里云,新浪云,腾讯云等官网上都能买一个服务器,选个性价比高的就ok啦。然后你要做的就是仔细研究开发者文档,这个很重要。
链接:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1472017492_58YV5
接下来介绍几个功能实现的具体步骤:
1. 验证服务器接口
验证微信服务器接口,直接输出echostr
echo $_GET['echostr'];
exit;
进入开发者文档,选择入门指南里的申请公众号
01E3EB26226D94A3E38C3168D47CA657.png
1.4开发者基本设置,设置url接口和token
A12CFDBA-7BCF-4E06-915C-0277B0D5D624.png
提交成功后生成一个二维码
6A0622DF-DB55-4598-83F0-0651B694ACE3.png
2. 错误信息调试
// 当前文件即为消息接口文件
// 错误调试信息
error_reporting(E_ALL);
ini_set("display_errors","On");
3. 解析xml结构数据
就是将xml格式的数据转化成数组形式,原理和json相似。每一行都写了注释,大家有疑问可以看注释
// 引入xml解析类,用于解析xml结构数据,将xml转变成数组操作
include "xmlparse.php";
// 接受微信服务器的原始数据
$input = file_get_contents("php://input");
$XMLParse = new XMLParse();// 创建一个xml解析器实例
// 将接受的数据记录到test.txt 用于调试:http://www.php-xp.com/student/
$fp = fopen("test.txt","w");
fwrite($fp,$input);
fclose($fp);
// $message为解析后的结果,解析后,xml转变成数组
$message = $XMLParse->getXmlData($input);
4. 根据不同消息类型做出回应
消息回复有文本回复,图片发送,语言回复等等,我们以文字回复与图片回复为例;
// MsgType是指消息类型
// text指文本消息
switch($message['MsgType']){
case "text":
echo returnTextMessage($message);
case "image":
// print_r($message);
echo returnImgMessage($message);
}
下面是文本消息回复,假设是商家做活动,用户发送"one",回复 打0.5折,用户发送"two",回复 打0.8折;用户发送别的文本内容,告诉用户 "查询不到对应的优惠"。
function returnTextMessage($message){
$time = time();
// print_r($message);
$discount = array("one"=>0.5,"two"=>0.8);
switch($message["Content"]){
case "one":
$reply = "打0.5折";
break;
case "two":
$reply = "打0.8折";
break;
default:
$reply = "查询不到对应的优惠";
}
$replyMessage = <<<EOF
<xml>
<ToUserName><![CDATA[{$message['FromUserName']}]]></ToUserName>
<FromUserName><![CDATA[{$message['ToUserName']}]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[$reply]]></Content>
</xml>
EOF;
return $replyMessage;
}
上面$replyMessage是回复的消息,是xml格式的,开发者文档里有,直接复制过来,该一下数据就可以了。
下图:
8ADEE929300AD28EDDF6A10FB4D45273.png
图片回复,语音回复等就不一一说了,写法与上面类似,主要是你想实现什么功能,写对应的逻辑代码,xml格式的那一串文档里都有,直接复制就可以了。
5. 自定义菜单
定义APPId和AppSecret,作为url参数的值,使用access_token做为信号传输。
// 定义APPId,需要在微信公众号平台申请自定义菜单后会得到
define(AppId,"wx4e5d170fcd409db6");
// 定义AppSecret
define(AppSecret,"9017f89fff1a495dcf26b633dbb9b0d1");
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".AppId."&secret=".AppSecret;
$result = file_get_contents($url);
echo $result;
$data = json_decode(file_get_contents($url),true);
if($data["access_token"]){
// access_token 是access_token存储文件名
$fp = fopen("access_token","w");
fwrite($fp,$data['access_token']);
fclose($fp);
// 输出token,测试时使用
echo file_get_contents("access_token");
}
定义数组存放菜单列表,使用type为view时,需要链接一个地址,例如点击关于我们就跳转到百度页面。
$menu_1 = array(
'name' => '关于我们',
'type' => 'view',
'url' => 'http://www.baidu.com/'
);
$menu_2 = array(
'name' => '联系我们',
'type' => 'view',
'url' => 'http://www.jianshu.com/'
);
$menu = array('button'=>array($menu_1,$menu_2));
// 将菜单数组转换成json串
$menu = json_encode($menu,JSON_UNESCAPED_UNICODE);
echo $menu;
access_token填写上面 $fp = fopen("access_token","w"); access_token的值;
body填写上面json串的值,点击检查问题,看是否能成功。
44DA607D-1311-416C-9AF3-16B031A526BA.png
最终实现的简易效果如下:
Screenshot_2017-11-27-21-00-42-085_com.tencent.mm.png
网友评论