关键字回复
首先我们要先定义一个带参数($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;
4240

被折叠的 条评论
为什么被折叠?



