首页 > 代码库 > 微信公众号开发入门心得(一)

微信公众号开发入门心得(一)

一、前言

     为了快速了解微信公众号开发过程,我选择了php语言来进行微信公众号开发,选择php的原因有两点,一是网上有很多用php开放微信公众号的教程,可以减少学习成本;二是php也比较容易学习,学习门槛低。

学习php开发微信公众号,开发者需要有一点php基础。对于学过其他编程语言的童鞋,了解一些基本的php语法就可以开始了。我的 PHP基础学习笔记(一)

 

二、微信公众号开发的步骤

技术分享

三、微信公众号开发步骤详解

  + 微信公众号开发入门可以参考 微信公众平台开发入门教程

     教程中用的新浪云做的服务器,注册新浪云之后可以免费使用,让你学习微信公众号开发用足够了。

     注:注册新浪云之后你的账户还需要认证,认证通过之后你才能拿创建的域名进行后面的服务器配置(认证时间1-2天)。

 

  (先按上面的教程做一遍,做一遍之后有需要再来理解后面的原理)

 + 关于第二步验证服务器地址的有效性(成功接入,成为开发者)

         1.原理:

     技术分享

       2.代码实现:

<?php//1.TOKEN用于服务器配置 验证安全性define("TOKEN", "weixin");$wechatObj = new wechatCallbackapiTest();//echostr随机数已经初始化就验证if (isset($_GET[‘echostr‘])) {    //2.验证消息来自微信服务器    $wechatObj->valid();    // $wechatObj->definedItems();}else{    $wechatObj->responseMsg();}class wechatCallbackapiTest{    public function valid()    {        $echoStr = $_GET["echostr"];         //若确认此次GET请求来自微信服务器,则原样返回echostr参数内容,接入生效,成为开发者成功,否则接入失败。        if($this->checkSignature()){            header(‘content-type:text‘);            echo $echoStr;            exit;        }    }        //检验signature    private function checkSignature()    {        $signature = $_GET["signature"];        $timestamp = $_GET["timestamp"];        $nonce = $_GET["nonce"];        $token = TOKEN;        $tmpArr = array($token, $timestamp, $nonce);        //将token、timestamp、nonce三个参数进行字典序排序        sort($tmpArr, SORT_STRING);        //将三个参数字符串拼接成一个字符串进行sha1加密        $tmpStr = implode( $tmpArr );        $tmpStr = sha1( $tmpStr );        //开发者获得加密后的字符串与signature对比,标识该请求来源于微信        if( $tmpStr == $signature ){            return true;        }else{            return false;        }    }        //3.依据接口文档实现业务逻辑    public function responseMsg()    {        //获取微信推送过来的post数据(xml数据)        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];        if (!empty($postStr)){            //simplexml_load_string() 函数把XML字符串载入对象中。            $postObj = simplexml_load_string($postStr, ‘SimpleXMLElement‘, LIBXML_NOCDATA);            $fromUsername = $postObj->FromUserName;            $toUsername = $postObj->ToUserName;            $keyword = trim($postObj->Content);            $picUrl = $postObj->PicUrl;            $msgId = $postObj->MsgId;            $mediaId = $postObj->MediaId;            $event = strtolower($postObj->MsgType);            $msgType = "text";            $msgType2 = "image";             $msgType3 = "music";            $msgType4 = "news";            $time = time();            //返回给用户文本类型数据            $textTpl = "<xml>                        <ToUserName><![CDATA[%s]]></ToUserName>                        <FromUserName><![CDATA[%s]]></FromUserName>                        <CreateTime>%s</CreateTime>                        <MsgType><![CDATA[%s]]></MsgType>                        <Content><![CDATA[%s]]></Content>                        <Event><![CDATA[subscribe]]></Event>                        <FuncFlag>0</FuncFlag>                        </xml>";            //粉丝发送的文本信息                  if($event == "text") {                              $this->responseText($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr, $keyword);                            }              }else{            echo "";            exit;        }    } //给粉丝发送文本信息    public function responseText($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr,$keyword) {                 switch($keyword) {            case ‘三围‘ :            $contentStr ="我木有三围,你有吗?";            break;                        case ‘帅哥‘ :            $contentStr ="我是萌妹子,好伐";            break;                        case ‘多高‘:            $contentStr = "比你高~";            break;                        case ‘女神‘:            $contentStr = "你也长的很好看啊~";            break;                        case ‘i love you‘:            $contentStr = "I love you too 么么~";            break;                        case ‘这是什么‘:            $contentStr = "这是我的个人公众号啊~和其他公众号类似";            break;                        case ‘?‘ :            $contentStr = ‘送你一串时间:‘.date("Y-m-d H:i:s",time());              break;                        default :            $contentStr = $keyword;            break;                    }                     $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);             echo $resultStr;               }    

 依据接口文档实现业务逻辑后面会单独总结,以上分享了入门教程,总结了接入成为开发者的原理,分享创造价值,如果你也是初学微信公众号开发,希望对你有点帮助。

    

微信公众号开发入门心得(一)