怎样实现关键字回复,获取access_token和自定义菜单

 

关键字回复

     首先我们要先定义一个带参数($k)的方法(例如关键字为放假和天气)当$k为天气的时候,自动回复‘天气很好’;$k为天气的时候,自动回复‘放假很好’;输入其他的都自动回复Input something...

然后返回$contentStr

 public function hufu($k){
    	if($k =='天气'){
    	$contentStr = "天气很好!";
    		return $contentStr;
    	}else if($k =='放假'){
    		$contentStr = "放假很好!";
    		return $contentStr;
    	}else{
    		$contentStr = "Input something...";
    		return $contentStr;
    	}
    }

 

然后在responseMsg方法中调用上边的方法

 

$keyword是第三方输入的内容(例如‘天气’);相当于$k

调用hufu方法($contentStr = $this->hufu($keyword);)

   public function responseMsg()
    {
		//get post data, May be due to the different environments
		$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
		file_put_contents('demo.txt',$postStr,FILE_APPEND);

      	//extract post data
		if (!empty($postStr)){
                
              	$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 = $this->hufu($keyword);
                	// $contentStr = "欢迎来到php!";
                	$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                	echo $resultStr;
                }else{
                	echo "Input something...";
                }

        }else {
        	echo "";
        	exit;
        }
    }

获取access_token

什莫是access_token?

access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

怎样获取access_token?

公众号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在“微信公众平台-开发-基本配置”页中获得(需要已经成为开发者,且帐号没有异常状态)。

 

https请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
获取成功返回:{"access_token":"ACCESS_TOKEN","expires_in":7200}

示例代码:(我们把获取的access_token存到一个记事本里,使用的时候在拿出来)。

定义常量APPID,APPSECRET,(自己获得的APPID,APPSECRET)TOKEN_FILE

这里我们用到一个新的函数,cURL(专门读取url)

define('APPID', '##############');
define('APPSECRET', '#################');
define('TOKEN_FILE', 'access_token.txt');

$access_token = access_token();
echo $access_token;
function access_token(){
	//判断是否存在该文件,如果存在,就读取并取出(时间)若没有,则调用getNewAccess_token函数
	if(is_file(TOKEN_FILE)){
		$str = file_get_contents(TOKEN_FILE);
		$arr = json_decode($str,true);
		//判断是否过期
		if(time()-$arr['create_time'] > $arr['expires_in']-200){
			return getNewAccess_token();
		}else{
			return $arr['access_token'];
		}
	}else{
		return getNewAccess_token();
	}
}

function getNewAccess_token(){
	$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . APPID . "&secret=" . APPSECRET ."";
	// echo($url);

	//接入api
	//file_get_contents();读取文件 

	//设置一个新的curl资源
	$ch = curl_init();

	//设置url和相应的选项
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_HEADER, false);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
	curl_setopt($ch, CURLOPT_SSLVERSION, 1);

	//抓取url并把它传递给浏览器
	$str = curl_exec($ch);

	//关闭curl,释放系统资源
	curl_close($ch);

	//将其转化成数组
	$arr = json_decode($str,true);

	//将时间写入数组
	$arr['create_time'] = time();

	$str = json_encode($arr);

	//写入文件
	file_put_contents(TOKEN_FILE, $str);

	return $arr['access_token'];
}

 

自定义菜单

自定义菜单中重要的一项是要获取access_token,我们在上边已经获取到了

创建接口的链接:https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN;

创建的菜单使用json的格式,(是用post提交的)

示例代码:

//获取access_token
include 'access_token.php';
$access_token = access_token();

//创建接口 api
$url =  "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=$access_token";
//创建菜单
$menu = <<<MENU
{
     "button":[
     {    
          "type":"click",
          "name":"今日歌曲",
          "key":"V1001_TODAY_MUSIC"
      },
      {
           "name":"菜单",
           "sub_button":[
           {    
               "type":"view",
               "name":"搜索",
               "url":"http://www.soso.com/"
            },
            {
               "type":"click",
               "name":"赞一下我们",
               "key":"V1001_GOOD"
            }]
       }]
 }
MENU;

//设置一个新的curl资源
	$ch = curl_init();

	//设置url和相应的选项
	curl_setopt($ch, CURLOPT_URL, trim($url));
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_HEADER, false);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
	curl_setopt($ch, CURLOPT_SSLVERSION, 1);
	curl_setopt($ch, CURLOPT_POST, true );
        curl_setopt($ch, CURLOPT_POSTFIELDS, $menu);

	//抓取url并把它传递给浏览器
	$str = curl_exec($ch);

	//关闭curl,释放系统资源
	curl_close($ch);

	echo $str;

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值