最近几天做了一下微信开发,总结了一些经验和教训。
首先是微信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; } }
目前做的只有这些,以后还会继续发,希望能帮助一些才接触的人,同时也希望大牛们能给一些建议。