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

一、前言

     为了快速了解微信公众号开发过程,我选择了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;
           
    }
    

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

    

转载于:https://www.cnblogs.com/yy95/p/5889711.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值