最近几天做了一下微信开发,总结了一些经验和教训。
首先是微信token链接,最开始连接的时候总是出现token连接失败,总以为是设置的不对,结果第二天就好了。而且发现,如果上传的代码(我用的是新浪云)有错误的话,可能会连不上(不知道对不对,我只是根据连接的经历总结的)
其次呢,就说一下编程时遇到的一些困难。最开始一两天的时候,总是觉得在网站上没有办法调试,根本不知道哪里会出错。后来发现其实是可以调试的,只是没有办法像编译器一样进行断点调试。但是一些语法问题还是可以发现的。
点击画篮圈的链接,可以大致的发现一些语法问题或者一些调用函数的错误,同时一些错误它会给出错误代码。通过查询http://mp.weixin.qq.com/wiki/17/fa4e1434e57290788bde25603fa2fcbd.html可以大致知道问题的原因,当然了,因为没有断点,所以一些问题不会精确到哪一行或者那一部分,只能通过自己的经验和其他的方法去判断(我用的是注释的办法)。
下面我贴出一些代码吧
第一个:获取access_token:
$appid = "wxab732ce4074ec712";
$appsecret = "**********************";//上面两个每个微信号都不一样,这个可以在微信公众号平台上找到
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
$jsoninfo = json_decode($output, true);
$access_token = $jsoninfo["access_token"]
第二个 :创建自定义菜单:
$jsonmenu='
{
"button":
[
{
"name":"查询空车位",
"type":"click",
"key":"123"
},
{
"name":"预定",
"type":"click",
"key":"456"
},
{
"name":"停车",
"type":"click",
"url":"789"
}
]
}';
$url="https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;
$result=https_request($url,$jsonmenu);
var_dump($result);
function https_request($url,$data=null)
{
$curl=curl_init();
curl_setopt($curl,CURLOPT_URL ,$url);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,FALSE);
if(!empty($data))
{
curl_setopt($curl,CURLOPT_POST,1);
curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
}
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
$output=curl_exec($curl);
curl_close($curl);
return $output;
}
在创建自定义菜单时,因为打算一个一个的做,先给菜单命名,没有写type和key,结果爆出了40017的错误。
第三个:按钮click自动回复:
public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!empty($postStr))
{
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;//获取用户openid
$toUsername = $postObj->ToUserName;//
$keyword = trim($postObj->Content);
$key=$postObj->EventKey;//获取key的值,即上面自定义按钮中定义的值
$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>";
else if($key=="456")
{
/***********代码事件*********/
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);//回复¥contentStr
echo $resultStr;
}
}
else
{
echo "";
exit;
}
}
目前做的只有这些,以后还会继续发,希望能帮助一些才接触的人,同时也希望大牛们能给一些建议。