微信接口(一)创建菜单&自动回复

刚划拉完微信。做一个笔记这里的数据是写死的,还有一份是通过查询数据库进行自动回复,自定义菜单设置的。不过因为使用到数据库,最好在网站后台吧微信平台开发集成进去。所以代码较多就先不放了。有问题的地方请留言,我也学习一下。

<?php
/*
* @author;dou
*/
//token值(令牌),与公众平台设置一致
define("TOKEN", "dou");
$wechatObj = new wechatCallbackapiTest();
if (!isset($_GET[‘echostr‘])) {
$wechatObj->responseMsg();
}else{
$wechatObj->valid();
}
class wechatCallbackapiTest
{
//验证签名
public function valid()
{
$echoStr = $_GET["echostr"];
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
if($tmpStr == $signature){
echo $echoStr;
exit;
}
}

//响应消息
public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!empty($postStr)){
//$access_token = $this->get_access_token();//获取access_token
//$this->logger("getmenu \r\n".$this->getmenu($access_token));
$this->createmenu($access_token);//创建菜单
//获得菜单
//$this->logger("getmenu \r\n".$this->getmenu($access_token));
$postObj = simplexml_load_string($postStr, ‘SimpleXMLElement‘, LIBXML_NOCDATA);
$RX_TYPE = trim($postObj->MsgType);
if (($postObj->MsgType == "event") && ($postObj->Event == "subscribe" || $postObj->Event == "unsubscribe")){
//过滤关注和取消关注事件
}else{
}

//消息类型分离
switch ($RX_TYPE)
{
case "event":
$result = $this->receiveEvent($postObj);
break;
case "text":
$result = $this->receiveText($postObj);
break;
default:
$result = "unknown msg type: ".$RX_TYPE;
break;
}
echo $result;
}else {
echo "";
exit;
}
}

//接收事件消息
private function receiveEvent($object)
{
$content = "";
switch ($object->Event)
{
case "subscribe":
$content = "测试内容:欢迎关注";
break;
case "unsubscribe":
$content = "取消关注";
break;
default:
$content = "no message!!!";
break;
}

if(is_array($content)){
if (isset($content[0][‘PicUrl‘])){
$result = $this->transmitNews($object, $content);
}
}else{
$result = $this->transmitText($object, $content);
}
return $result;
}

//接收文本消息
private function receiveText($object)
{
$keyword = trim($object->Content);
if (strstr($keyword, "1")||strstr($keyword, "2")||strstr($keyword, "3")||strstr($keyword, "4")||strstr($keyword, "5")||strstr($keyword, "6")){
$content = "测试内容:[文字信息]自动回复";
}
else if (strstr($keyword, "11") || strstr($keyword, "22") ){
$content = array();
$content[] = array("Title"=>"[图文消息]标题", "Description"=>"详情信息", "PicUrl"=>"demo.jpg", "Url" =>"http://mp.weixin.qq.com/s");
}else{
$content="";
$content = date("Y-m-d H:i:s",time())."\nOpenID:".$object->FromUserName."\ndou";
}
if(is_array($content)){
if (isset($content[0])){
$result = $this->transmitNews($object, $content);
}
}else{
$result = $this->transmitText($object, $content);
}
return $result;
}

//回复文本消息
private function transmitText($object, $content)
{
if (!isset($content) || empty($content)){
return "";
}
$xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), $content);

return $result;
}

//回复图文消息
private function transmitNews($object, $newsArray)
{
if(!is_array($newsArray)){
return "";
}
$itemTpl = " <item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
";
$item_str = "";
foreach ($newsArray as $item){
$item_str .= sprintf($itemTpl, $item[‘Title‘], $item[‘Description‘], $item[‘PicUrl‘], $item[‘Url‘]);
}
$xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>%s</ArticleCount>
<Articles>
$item_str </Articles>
</xml>";

$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray));
return $result;
}

/////////////////

private function get_access_token()
{
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=*&secret=*";
$data = json_decode(file_get_contents($url),true);
if($data[‘access_token‘]){
return $data[‘access_token‘];
}else{
return "获取access_token错误";
}
}

//自定义菜单
public function createmenu($access_token)
{
$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;
$arr = array(
‘button‘ =>array(
array(
‘name‘=>urlencode("菜单1"),
‘sub_button‘=>array(
array(
‘name‘=>urlencode("子菜单1"),
‘type‘=>‘view‘,
‘url‘=>‘http://www.baidu.com‘
),
)),
)
);

$jsondata = urldecode(json_encode($arr));

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$jsondata);
curl_exec($ch);
curl_close($ch);
}

private function getmenu($access_token)
{
$url = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=".$access_token;
$data = file_get_contents($url);
return $data;
}

}
?>

<--------个人原创|转载注明逗子|新手适用|大手勿喷|--------->

时间: 2024-10-27 07:51:49

微信接口(一)创建菜单&自动回复的相关文章

微信公众号创建菜单

本方法目前用于测试号使用,需要提前知道Access_token与编辑好json字符串 /** * 传入目录格式的json字符串跟安全密令,返回一个微信确认答复 * @param params 编辑好的json的微信菜单字符串 * @param accessToken 通过工具类返回的安全密令 */ public static void createMenu(String params,String accessToken) { StringBuffer bufferRes = new Strin

微信公众平台新增获取自动回复和自定义菜单配置接口

微信公众平台自动回复功能可以为运营者减少了重复回复消息的次数,但如果自动回复的数量多的话管理就比较麻烦:自定义菜单相当于你这个公众号的导航,但有些公众号会限制不能添加外部链接.现在好了,公众平台开发者接口更新,新增获取自动回复和自定义菜单配置接口,对所有公众号开放. 新增的接口具体是: 1. 获取自动回复规则接口 该接口可以获取公众号设置的自动回复规则,包括关注后自动回复.消息自动回复和关键词自动回复. 开发者可以通过该接口,获取公众号当前使用的自动回复规则,包括关注后自动回复.消息自动回复(6

微信公众平台自定义菜单及高级接口PHP SDK

本文介绍介绍微信公众平台自定义菜单及高级接口的PHP SDK及使用方法. 作者 方倍工作室 修正记录: 2014.05.03 v1.0 方倍工作室 http://www.cnblogs.com/txw1958/ SDK 源码: 1 /* 2 方倍工作室 http://www.cnblogs.com/txw1958/ 3 CopyRight 2014 www.doucube.com All Rights Reserved 4 */ 5 6 class class_weixin_adv 7 { 8

[c#]asp.net开发微信公众平台(8)微信9大高级接口,自定义菜单

前7篇把最基础的消息接收和回复全做完了,  也把高级接口的入口和分拆处理写好了空方法,  此篇接着介绍微信的9大高级接口, 并着重讲解其中的自定义菜单. 微信9大接口为: 1.语音识别接口 2.客服接口 3.OAuth2.0 网页授权接口 4.生成带参数的二维码接口 5.获取用户地理位置接口 6.获取用户基本信息接口 7.获取关注者列表接口 8.用户分组接口 9.上传下载多媒体文件接口 具体介绍: 1. 语音识别 功能描述:通过语音识别接口,用户发送的语音,将同时给出语音识别出的文本内容. 实用

微信公众号自定义菜单创建

微信公众号自定义菜单的创建步骤 1.找到AppId和AppSecret.自定义菜单申请成功后,在"高级功能"-"开发模式"-"接口配置信息"的最后两项就是: 2.根据AppId和AppSecret,以https get方式获取访问特殊接口所必须的凭证access_token: 3.根据access_token,将json格式的菜单数据通过https post方式提交. 接口调用请求说明 http请求方式:POST(请使用https协议) http

微信公众平台开发者模式自动回复功能与自定义菜单

微信开发者模式自动回复功能 1.提取POST来的数据中的信息 2.判断微信客户端发来的信息内容(以文本信息为例) 3.根据信息内容进行处理 4.把处理结果以XML的形式返回给微信服务器 5.微信服务器反馈内容给微信客户端 1.获取用户发来的文本信息的内容 private void ExtractPostData() /*** 提取POST来的数据中的信息 ***/ { Stream s = HttpContext.Current.Request.InputStream; //读取post来的数据

微信公众平台开发(三)——二维码、创建菜单

一.二维码 目前有2种类型的二维码:点击查看在线文档 1.临时二维码,是有过期时间的,最长可以设置为在二维码生成后的7天(即604800秒)后过期,但能够生成较多数量.临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景2.永久二维码,是无过期时间的,但数量较少(目前为最多10万个).永久二维码主要用于适用于帐号绑定.用户来源统计等场景.永久二维码时最大值为100000(目前参数只支持1--100000). 下面的代码是获取永久二维码的事例: /** * 获取永久二维码需要的ticket

Force.com微信开发系列(四)申请Access Token及自定义菜单之创建菜单

在微信接口开发中,许多服务的使用都离不开Access Token,Access Token相当于打开这些服务的钥匙,正常情况下会在7200秒内失效,重复获取将导致上次获取的Token失效,本文将首先介绍如何获取Access Token,再介绍如何通过Access Token来在微信内添加自定义菜单(注意,开发者需要申请测试账号来测试自定义菜单,如何申请请参照前文). 申请Access Token 获取Access Token接口的网址如下: https://api.weixin.qq.com/c

手把手教会你微信公众平台自定义菜单开发——创建菜单

一如既往的,关于微信公众平台的开发,不算出自大牛的代码,但是简单易懂适合刚入门的朋友. 首先先介绍一下逻辑,因为发现很多朋友都不能看懂微信官方的文档,当然啦,这跟你是否认真看有关的,认真看总能看懂的,废话不说了.此时,我当你已经有一个已经申请到自定义菜单开发权限的微信服务号.首先,你要在后台开发模式下面找到你的AppId 还有 AppSecret并且记下来,然后通过这两个官方发放给你的ID去获取一个ACCESS_TOKEN[官方解释是:第三方访问api资源的票据],稍后会通过这个ACCESS_T