PHP微信开发, 简单的文本自动回复
博客专区 > liunx_ 的博客 > 博客详情
PHP微信开发, 简单的文本自动回复
liunx_ 发表于1个月前
PHP微信开发, 简单的文本自动回复
  • 发表于 1个月前
  • 阅读 12
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

首先,先去微信公众平台注册一个账号(注册要填的东西挺多的),注册好之后,登录进去。

可以看到左侧的“开发者中心”,开启开发者中心前好像还要你完善一些资料,按照步骤完善即可。进入开发者中心之后,先去编辑

 

 

修改配置,修改配置的时候,注意:

 

URL是你自己的域名下的PHP脚本(往下读有该脚本的demo),该脚本用于和微信接口对接。比如http://www.example.com/weixin.php

 

Token是上述脚本里的定义的一个常量,比如你的PHP脚本里定义了:

 

 

[php] view plain copy

  1. define("TOKEN", "my_weixin");  

 

那么,在填写Token时,你就填abcdefgh

 

EncodingAESKey是消息加密用。你可以自己写一个43为的数字和字母的组合,也可以选择“随机生成”,一般选择随机生成即可

 

填好之后,保存(如果保存时,提示Token验证失败,那么请确认token一致并多点几次保存试试)。

保存好之后,点击修改配置旁的:“开启”。

 

然后,就可以编辑你的PHP脚本了。(如果你没有自己的域名,可以使用新浪云的免费的SAE,并最好完成实名认证)

 

demo的脚本如下:关注该公众平台(比如订阅号之后),功能是:输入hehe则返回hello world!!!如果输入其他字符,则返回输入heeh试试。

 

 

[php] view plain copy

  1. header('content-type:text/html;charset=utf-8');  
  2.   
  3. define("TOKEN", "my_weixin"); //define your token  
  4. $wx = new wechatCallbackapiTest();  
  5.   
  6. if($_GET['echostr']){  
  7.     $wx->valid(); //如果发来了echostr则进行验证  
  8. }else{  
  9.     $wx->responseMsg(); //如果没有echostr,则返回消息  
  10. }  
  11.   
  12.   
  13. class wechatCallbackapiTest{  
  14.   
  15.     public function valid(){ //valid signature , option  
  16.   
  17.         $echoStr = $_GET["echostr"];  
  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"]; //接收微信发来的XML数据  
  28.   
  29.         //extract post data  
  30.         if(!empty($postStr)){  
  31.                   
  32.             //解析post来的XML为一个对象$postObj  
  33.             $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);  
  34.           
  35.             $fromUsername = $postObj->FromUserName; //请求消息的用户  
  36.             $toUsername = $postObj->ToUserName; //"我"的公众号id  
  37.             $keyword = trim($postObj->Content); //消息内容  
  38.             $time = time(); //时间戳  
  39.             $msgtype = 'text'; //消息类型:文本  
  40.             $textTpl = "<xml>  
  41.                         <ToUserName><![CDATA[%s]]></ToUserName>  
  42.                         <FromUserName><![CDATA[%s]]></FromUserName>  
  43.                         <CreateTime>%s</CreateTime>  
  44.                         <MsgType><![CDATA[%s]]></MsgType>  
  45.                         <Content><![CDATA[%s]]></Content>  
  46.                         </xml>";  
  47.   
  48.             if($keyword == 'hehe'){  
  49.                 $contentStr = 'hello world!!!';  
  50.                 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);  
  51.                 echo $resultStr;  
  52.                 exit();                                                 
  53.             }else{  
  54.                 $contentStr = '输入hehe试试';  
  55.                 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);  
  56.                 echo $resultStr;  
  57.                 exit();  
  58.             }  
  59.   
  60.         }else {  
  61.             echo "";  
  62.             exit;  
  63.         }  
  64.     }  
  65.           
  66.     //验证字段  
  67.     private function checkSignature(){  
  68.   
  69.         $signature = $_GET["signature"];  
  70.         $timestamp = $_GET["timestamp"];  
  71.         $nonce = $_GET["nonce"];      
  72.                   
  73.         $token = TOKEN;  
  74.         $tmpArr = array($token, $timestamp, $nonce);  
  75.         sort($tmpArr);  
  76.         $tmpStr = implode( $tmpArr );  
  77.         $tmpStr = sha1( $tmpStr );  
  78.           
  79.         if( $tmpStr == $signature ){  
  80.             return true;  
  81.         }else{  
  82.             return false;  
  83.         }  
  84.     }  
  85. }  

 

如果发送消息,系统提示:该公众平台暂时不能提共服务,请稍后再试。那么多半是代码语法有问题,检查好语法错误再试试。

 

tip:

在新用户关注你的公众号时,自动返回信息:(把这段代码加在判断$keyword之前)。

 

[php] view plain copy

  1. if($postObj->MsgType == 'event'){ //如果XML信息里消息类型为event  
  2.     if($postObj->Event == 'subscribe'){ //如果是订阅事件  
  3.         $contentStr = "欢迎订阅misaka去年夏天!\n更多精彩内容:http://blog.csdn.net/misakaqunianxiatian";  
  4.         $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);  
  5.         echo $resultStr;  
  6.         exit();  
  7.     }  
  8. }  
标签: 自动回复
共有 人打赏支持
粉丝 0
博文 20
码字总数 29282
×
liunx_
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: