微信公众号开发

主要说一下公众号开发的一些注意事项;

开发的时候先要做好准备工作,
官方网站了解下

例如
官方文档;
线上调试地址;
还得有一台服务器;

1.微信开放平台

去微信开放平台注册一下,没有公众号没关系,微信提供免费为一年的测试号并且有所有的权限,
注意是测试号。

2.注册个测试号

上面那个地址里面有,点进去注册一个

在这个地方得绑定一个域名,微信会访问这个地址,你必须验证消息来自于微信;

3.创建菜单目录

申请access_token,直接在浏览器地址栏访问即可。
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=测试号AppID&secret=测试号appsecret
会返回两个值,取access_token

$token = '这是申请的access_token';

$path = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$token;
$timeout = 3 ; 
$requestString = '{
     "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"
            }]
       }]
 }';

 $con = curl_init((string)$path);
 curl_setopt($con, CURLOPT_HEADER, false);
 curl_setopt($con, CURLOPT_POSTFIELDS, $requestString);
 curl_setopt($con, CURLOPT_POST,true);
 curl_setopt($con, CURLOPT_RETURNTRANSFER,true);
 curl_setopt($con, CURLOPT_TIMEOUT,(int)$timeout);
 curl_exec($con); 

如果成功了的话,打开测试号下面会有菜单栏。
删除,修改菜单栏类似只是参数不同,详情看官方文档

4.现在我们需要和用户互动一下,首先要接受用户发给公众号的消息

收到用户消息并且给用户一个回应,让用户知道他并不孤单。
//接受用户发送的消息

//方便理解分开写的$xmlarray=json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)),true);
$xml = file_get_contents("php://input");                                      //获取post值
$objectxml = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); //将文件转换成 对象
$xmljson= json_encode($objectxml);                                              //将对象转换个JSON
$xmlarray=json_decode($xmljson,true);                                          //将json转换成数组

//获取到的信息
$from = $xmlarray['FromUserName'];
$to = $xmlarray['ToUserName'];
$CreateTime = time();
$MsgType = $xmlarray['MsgType'];
$Content =  '您发送的消息为:'.$xmlarray['Content'];


//被动回复文本消息
$returnData = "<xml> 
<ToUserName><![CDATA[%s]]></ToUserName> 
<FromUserName><![CDATA[%s]]></FromUserName> 
<CreateTime>%s</CreateTime> 
<MsgType><![CDATA[%s]]></MsgType> 
<Content><![CDATA[%s]]></Content> 
</xml>";

$returnInfo = sprintf($returnData, $from, $to, $CreateTime, $MsgType, $Content); 
echo  $returnInfo ;

在这个地方有几个点需要注意下,
一个是xml转换的时候因为有<!CDATA[]>这个地方如果不加参数的话是不会解析的。
一个是回复的时候<![CDATA[%s]]>中间不要有空格 意思和这个city ci ty差不多
这并不是个接口,可以理解为回复微信。

成功美滋滋。
其实说到这公众号的大致开发流程已经结束了,
稍微拓展下和阿里的天气接口对接下,天气接口

5.天气接口对接

这个接口是免费的,现在免费接口不多了....
感谢阿里,关于如何注册阿里账号之列的不说了,度娘一下;
现在用户发送一个地点,我们用上边讲到的获取用户信息拿到地址
如果和其他地方配合的话封装一下,我在这封装的还不够彻底,应该写个构造方法把所有地址预先定义一下的。
上代码;

    /** 查询景点天气
     * 1.是 0.否
     * param  $sopt  景点名称 必选
     * param  $need3HourForcast  是否需要当天每3/6小时一次的天气预报列表。
     * param  $needAlarm  是否需要天气预警
     * param  $needHourData  是否需要每小时数据的累积数组
     * param  $needIndex  是否需要返回指数数据,比如穿衣指数、紫外线指数等
     * param  $needMoreDay  是否需要返回7天数据中的后4天 
     */
     protected function selWeather($sopt = '泰山' , $need3HourForcast = 0,$needAlarm= 0 ,$needHourData= 0,$needIndex= 0,$needMoreDay = 0){

        $host = "https://saweather.market.alicloudapi.com";
        $path = "/spot-to-weather";
        $method = "GET";
        $appcode = "阿里的Appcode";

        $headers = array();
        array_push($headers, "Authorization:APPCODE " . $appcode);

        $querys = "area=".$spot."&need3HourForcast=".$need3HourForcast."&needAlarm=".$needAlarm."&needHourData=".$needHourData."&needIndex=".$needIndex."&needMoreDay=".$needMoreDay."";
        $bodys = "";
        $url = $host . $path . "?" . $querys;

        $curl = curl_init();
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($curl, CURLOPT_FAILONERROR, false);
        //curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        //curl_setopt($curl, CURLOPT_HEADER, true);
        if (1 == strpos("$".$host, "https://"))
        {
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        }
        $data = curl_exec($curl);
        return (json_decode($data));
     }

拿到天气信息然后根据上面的回复代码,回给用户。

江兆辉博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论