PHP微信开发, 简单的文本自动回复

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

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

 

 

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

 

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. }  

转载于:https://my.oschina.net/u/3647687/blog/1535334

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值