文档章节

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

liunx_
 liunx_
发布于 2017/09/11 17:49
字数 786
阅读 41
收藏 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. }  

© 著作权归作者所有

共有 人打赏支持
liunx_
粉丝 0
博文 20
码字总数 29282
作品 0
成都
程序员
私信 提问
微信公众号开发之连简单的自动回复都不能实现

各位网友: 我们公司安排我们做微信公众号接口开发,就是由编辑模式进入开发模式,接入自己的服务器。所以我就去图书馆借了本书《微信公众平台搭建、开发与实践指南》照着搭建环境和敲代码,...

在我的歌声里
2017/02/04
581
2
微信公众平台开发入门教程

关键字:微信公众平台开发 作者:方倍工作室 在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序、MySQL数据库、计算机网络通讯、及HTTP/XML/CSS/JS等基础。 我们将使用微信公众账...

方倍工作室
2013/06/24
0
0
运维APP番外篇

API是个好东西,特别是restful API是个好东西,我不是开发也就不展开讲了,我喜欢新的东西,也喜欢捯饬新的东西,最好是别人没写过的,如果都写了也就没啥意思了~~~ 好吧,进入正题。我想达到...

youerning
2016/03/12
0
0
微信开发:消息管理

一,接收微信消息 上一篇博文是介绍如何进行服务器端配置,配置的相当于为微信的消息接口,微信向服务器端推送消息或者推送用户发送的消息就会推送到该配置的URL中,配置好了过后,我们就需要...

xiaofli007
2016/09/29
194
0
PHP 开发社区微信服务号实战图解

本博文就月初刚上线的微信服务号,图文进行总结分享给大家。 去年年底,我所在的团队讨论要开发微信号,话题由此拉开: 原来有一个3年前注册的微信号,但是后台操作无法从“订阅号”变更为“...

葡萄城控件技术团队
2015/04/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据反欺诈技术架构

一年多以前,有朋友让我聊一下你们的大数据反欺诈架构是怎么实现的,以及我们途中踩了哪些坑,怎么做到从30min延迟优化到1s内完成实时反欺诈。当时呢第一是觉得不合适,第二也是觉得场景比较...

微笑向暖wx
7分钟前
0
0
flink-系统内部消息传递的exactly once语义

At Most once,At Least once和Exactly once 在分布式系统中,组成系统的各个计算机是独立的。这些计算机有可能fail。 一个sender发送一条message到receiver。根据receiver出现fail时sender如...

xtof
15分钟前
0
0
iOS程序执行顺序和UIViewController 的生命周期(整理)

说明:此文是自己的总结笔记,主要参考: iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 UIView的生命周期 言叶之庭.jpeg 一. iOS程序的启动执行顺序 程序启动顺序图 iO...

壹峰
16分钟前
0
0
配置网络、远程登录、Linux秘钥认证

配置网络 一台服务器安装完系统之后不管是为了方便管理还是业务需要,我们都要给它配置ip地址。让机器能够联网。在现实的生产环境的当中,往往我们给服务器配置的ip都是提前规划好的,但是在...

李超小牛子
20分钟前
0
0
dotConnect for Oracle入门指南(五):检索和修改数据

【下载dotConnect for Oracle最新版本】 dotConnect for Oracle(原名OraDirect.NET)建立在ADO.NET技术上,为基于Oracle数据库的应用程序提供完整的解决方案。它为设计应用程序结构带来了新的...

电池盒
20分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部