php微信公众号开发,入门篇(实现了关注公众号发送欢迎信息,发关键词自回复)

大致效果如下图所示!

一、入门经历

首先我看的慕课网的视频,理论的东西还不错,可是跟着把代码敲一遍的时候就没懵逼了,除了验证服务器通过之外,

关注公众号根本不会自动回复,着急呀,再找其他的,敲完代码,再测试依然不行,折磨人呀!于是我重新来排查一遍,

说下都排查了哪些些:

第一:用的订阅号没问题(有在关注时回复信息的功能)

第二:开发用的服务器的公网开发地址(要直接指向自己的程序)要配置好

第三:服务器上的文件目录要和第二部的网址对应起来,检测也没问题

 

然后我就各种检查代码,结果一次次失败,关注公众号就是不会回复欢迎信息,我没放弃,不断尝试,换了其他方式,比如下载别人的

源代码,结果也是徒劳,搞得我都认为不是代码出错了,而是其他环节出错了,而事实证明只要你能成功验证服务器,那么就可以进行开发

出错的话,就是程序的问题,果不其然,我又尝试了一份源码,结果可以用,好开心呀,下面把源码粘上,谢谢大家耐心看我吐槽!

二、入门经历

下面为index.php只有这一个页面就实现了回复欢迎信息及发送关键词回复信息的功能

复制代码
  1 <?php
  2 /**
  3  * wechat php test
  4  */
  5  
  6 //define your token
  7 define("TOKEN", "weixin");
  8 $wechatObj = new wechatCallbackapiTest();
  9 //$wechatObj->valid();//接口验证
 10 $wechatObj->responseMsg();//调用回复消息方法
 11 class wechatCallbackapiTest
 12 {
 13  public function valid()
 14  {
 15  $echoStr = $_GET["echostr"];
 16  
 17  //valid signature , option
 18  if($this->checkSignature()){
 19  echo $echoStr;
 20  exit;
 21  }
 22  }
 23  
 24  public function responseMsg()
 25  {
 26  //get post data, May be due to the different environments
 27  $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
 28  
 29  //extract post data
 30  if (!empty($postStr)){
 31  /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
 32   the best way is to check the validity of xml by yourself */
 33  libxml_disable_entity_loader(true);
 34   $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
 35  $fromUsername = $postObj->FromUserName;
 36  $toUsername = $postObj->ToUserName;
 37  $keyword = trim($postObj->Content);
 38  $time = time();
 39  $msgType = $postObj->MsgType;//消息类型
 40  $event = $postObj->Event;//时间类型,subscribe(订阅)、unsubscribe(取消订阅)
 41  $textTpl = "<xml>
 42   <ToUserName><![CDATA[%s]]></ToUserName>
 43   <FromUserName><![CDATA[%s]]></FromUserName>
 44   <CreateTime>%s</CreateTime>
 45   <MsgType><![CDATA[%s]]></MsgType>
 46   <Content><![CDATA[%s]]></Content>
 47   <FuncFlag>0</FuncFlag>
 48   </xml>"; 
 49    
 50  switch($msgType){
 51   case "event":
 52   if($event=="subscribe"){
 53   $contentStr = "Hi,欢迎关注海仙日用百货!"."\n"."回复数字'1',了解店铺地址."."\n"."回复数字'2',了解商品种类.";
 54   } 
 55   break;
 56   case "text":
 57   switch($keyword){
 58   case "1":
 59   $contentStr = "店铺地址:"."\n"."杭州市江干艮山西路233号新东升市场地下室第一排."; 
 60   break;
 61   case "2":
 62   $contentStr = "商品种类:"."\n"."杯子、碗、棉签、水桶、垃圾桶、洗碗巾(刷)、拖把、扫把、"
 63    ."衣架、粘钩、牙签、垃圾袋、保鲜袋(膜)、剪刀、水果刀、饭盒等.";
 64   break;
 65   default:
 66   $contentStr = "对不起,你的内容我会稍后回复";
 67   }
 68   break;
 69  }
 70  $msgType = "text";
 71  $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
 72  echo $resultStr;
 73  }else {
 74  echo "";
 75  exit;
 76  }
 77  }
 78   
 79  private function checkSignature()
 80  {
 81  // you must define TOKEN by yourself
 82  if (!defined("TOKEN")) {
 83  throw new Exception('TOKEN is not defined!');
 84  }
 85   
 86  $signature = $_GET["signature"];
 87  $timestamp = $_GET["timestamp"];
 88  $nonce = $_GET["nonce"];
 89   
 90  $token = TOKEN;
 91  $tmpArr = array($token, $timestamp, $nonce);
 92  // use SORT_STRING rule
 93  sort($tmpArr, SORT_STRING);
 94  $tmpStr = implode( $tmpArr );
 95  $tmpStr = sha1( $tmpStr );
 96   
 97  if( $tmpStr == $signature ){
 98  return true;
 99  }else{
100  return false;
101  }
102  }
103 }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值