php虚拟主机搭建微信公众号服务器

@版权声明:本文为博主原创文章,未经博主允许不得转载https://blog.csdn.net/qq_40758535/article/details/89606716

php虚拟主机搭建微信公众号服务器

最近在搞一个领取淘宝优惠券的公众号,使用的是php+mysql+虚拟主机;(主要是服务器续费太贵了,学生党支付不起,于是去自学了几天php)
废话不多说了,上代码:

1.与微信服务器进行对接验证(具体验证方法,请看微信开发官方文档)

//wx,php
    //验证1
    public function valid(){
        $echoStr = $_GET["echostr"];
        if($this->checkSignature()){
            echo $echoStr;
            exit;
        }
    }
        //验证2
    private function checkSignature(){
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        $token =TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );
        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }
以上代码写在wx.php文件,这是开发入口文件

接下来就是填写URL了,点击提交后微信服务器会向你所填的url,发送一个GET请求,验证通过后即可成为开发者号
在这里插入图片描述

2.编写主要业务逻辑代码
微信消息有文本,图片,语音,视频等多种消息类型,目前只写了文本消息处理,其他消息一律回复文本消息

//wx.php
    //回复用户消息
    public function responseMsg(){
        @$postStr = file_get_contents ( 'php://input', 'r' );
        if (!Empty($postStr)){
            $get_xmlElement_obj=new getXMLContents($postStr);
            $ElementsList=$get_xmlElement_obj->getElements(); //返回一个数组.类似json
            $type=$ElementsList['type'];
            //判断消息类型
            switch ($type){
                case "event": //event是微信事件,这里写的是关注事件
                    $event_obj=new eventForSubscribe($ElementsList);
                    $event_obj->getreply();
                    echo $event_obj->SendSubscribe();
                    break;
                case 'text':
                    $reply_text_obj=new replyText($ElementsList);
                    $reply_text_obj->getreply();
                    echo $reply_text_obj->SendText();//向微信服务器发送数据包
                    break;
                case 'image':
                    $reply_img_obj=new replyImage($ElementsList);
                    $reply_img_obj->getreply();
                    echo $reply_img_obj->SendImg();
                    break;
                case 'voice':
                    $reply_voice_obj=new replyVoice($ElementsList);
                    $reply_voice_obj->getreply();
                    echo $reply_voice_obj->SendVoice();
                    break;
                case 'video':
                    $reply_video_obj=new replyVideo($ElementsList);
                    $reply_video_obj->getreply();
                    echo $reply_video_obj->SendVideo();
                    break;
                case 'location':
                    $reply_location_obj=new replylocation($ElementsList);
                    $reply_location_obj->getreply();
                    echo $reply_location_obj->SendLocation();
                    break;
                case 'link':
                    $reply_link_obj=new replylink($ElementsList);
                    $reply_link_obj->getreply();
                    echo $reply_link_obj->SendLink();
                    break;
            }
        }
    }

这是文本消息处理方法

public function getreply(){
        switch ($this->text){
            case '你好':
                $this->contentStr ='你也好啊';
                //echo $this->SendText($fromUsername, $toUsername, $time, $contentStr);
                break;
            case '你是谁':
                $this->contentStr='你好,我是领券机器人,小二很高兴为您服务!!!';
                break;
            case '你叫什么名字':
                $this->contentStr='你好,我是领券机器人,小二很高兴为您服务!!!';
                break;
            case '我没钱了':
                $this->contentStr='没钱了,就要努力赚钱哦!!!';
                break;
            case '保存多久':
                $this->contentStr=HOW;
                break;
            case '会保存多久':
                $this->contentStr=HOW;
                break;
            case '要保存多久':
                $this->contentStr=HOW;
                break;
            case '可以保存多久':
                $this->contentStr=HOW;
                break;
            case '多久':
                $this->contentStr=HOW;
                break;
            case '帮助':
                $this->contentStr=HELP;
                break;
            case 'help':
                $this->contentStr=HELP;
                break;
            case '怎么玩的':
                $this->contentStr=HELP;
                break;
            case "1":
                $this->contentStr="该功能尚在开发测试中,敬请关注";
                break;
            case "2":
                $this->contentStr="该功能尚在开发测试中,敬请关注";
                break;
            case "3":
                $this->contentStr="该功能尚在开发测试中,敬请关注";
                break;
            default:
                $t=strstr($this->text,"¥");
                $h=strstr($this->text,"https://");
                if ($t||$h){  //判断收到的消息是否包含口令或者链接
                    $link_arr=$this->check();
                    if ($link_arr['tkl']!="0"){
                        $this->OnTKL($link_arr);  //通过口令查询
                    }elseif ($link_arr['url']!="0"){
                        $this->OnURL($link_arr);  //通过url获取查询
                    }
                }else{
                    $this->contentStr='"O__O" 呆滞的眼神~~~!!';
                }
        }
    }

    public function OnTKL($link_arr){
        if (Empty($this->contentStr)){
            //开始查找优惠券,判断口令格式
                $coupons=new TaoBaoCoupons();
                $tkl_contents=$coupons->decodeTKL($link_arr); //根据淘口令获取goods_id
                $this->contentStr=$coupons->getcoupons($tkl_contents);  //查询实现
            }
        }

getcoupons方法就是调用各接口的处理,又长又臭,就不献丑赘述了具体可以看官方开发文档)
拿到券后将他存到数据库中,这样就不用频繁地发起网络请求,浪费资源了.上面放了个根据淘口令获取数据方法,URL类似,就不赘述了

写完业务逻辑后,接下来是用FTP工具将代码上传到虚拟主机上,下面是我买的虚拟主机目录,需要将代码放到web目录方可访问,我们来一层层地看
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
jdbc文件夹放数据库逻辑代码,查券代码放在taobao文件夹里,admin管理员登陆网页进行数据库信息查看的网页

最后.(这里回复的消息是文本信息,并没有制作h5网页,本来是想做的)
在这里插入图片描述

蓝色字体是一个超链接,链接到外网(也是h5的a标签)

微信开发完成!!!

第一次写博客文章,写的有点简陋,还望包涵

欢迎各位大佬来吐槽
另外打个广告:下图是我开发的公众号,欢迎前来体验
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值