@版权声明:本文为博主原创文章,未经博主允许不得转载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标签)
微信开发完成!!!
第一次写博客文章,写的有点简陋,还望包涵
欢迎各位大佬来吐槽
另外打个广告:下图是我开发的公众号,欢迎前来体验