文档章节

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

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

© 著作权归作者所有

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

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

在我的歌声里 ⋅ 2017/02/04 ⋅ 2

微信公众平台开发入门教程

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

方倍工作室 ⋅ 2013/06/24 ⋅ 0

运维APP番外篇

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

youerning ⋅ 2016/03/12 ⋅ 0

Yii 的微信模块--Yii-wechat

Yii-wechat 是基于 Yii2 实现的微信模块, 集成微信模拟器、多公众号管理、扩展开发接口,只需关注功能,微信开发的强劲引擎. 注意 如果是全新使用和,你可以使用 Yii2-app-wechat 微信应用模板(...

红薯 ⋅ 2015/06/02 ⋅ 1

PHP 开发社区微信服务号实战图解

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

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

微信开发:消息管理

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

xiaofli007 ⋅ 2016/09/29 ⋅ 0

CodeIgniter 微信开发类库--CI_WeChat-PHP-SDK

项目演示主页:http://www.openant.com CIWeChat-PHP-SDK,CodeIgniter微信开发类库,修改自https://github.com/zoujingli/wechat-php-sdk SDK 封装对接及功能 接入验证 (初级权限) 自动回...

xCalder ⋅ 2016/10/17 ⋅ 1

wemall 7.0 开源系统更新,支持小程序开发

wemall7.0 开源系统,基于thinkphp5开发,支持composer,优化核心,减少依赖,基于全新的架构思想和命名空间。支持小程序和公众号开发。 1.【更新】优化系统安装 2.【更新】更新上传过滤 3....

einsqing ⋅ 2017/06/12 ⋅ 1

胖纸夏天/wx-connect

wx-connect 基于及实现的微信公众平台接口开发框架,可用于快速构建微信公众平台接口应用。 var wxConnect = require('wx-connect');var app = wxConnect({appToken: ''}) app.text(functio...

胖纸夏天 ⋅ 2015/01/16 ⋅ 0

微信公众号开发遇到奇怪的问题

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

在我的歌声里 ⋅ 2017/02/04 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud相关项目

Spring Cloud Config 配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。 Spring Cloud Bus 事件、消息总线,用于在集群(例如,配...

明理萝 ⋅ 27分钟前 ⋅ 1

更新队友POM文件后报错

打开报错的地方的pom及其引用方法所在文件的pom,观察其版本号是否一致,不一致进行更改

森火 ⋅ 32分钟前 ⋅ 0

IDEA使用sonarLint

一、IDEA如何安装SonarLint插件 1.打开 Idea 2.点击【File】 3.点击【Settings】 4.点击【Plugins】 5.在搜索栏中输入“sonarlint”关键字 6.点击【Install】进行安装 7.重启Idea 二、IDEA如...

开源中国成都区源花 ⋅ 37分钟前 ⋅ 0

Succinct Data Structure

作者:唐刘 最近看了一篇论文 SuRF: Practical Range Query Filtering with Fast Succinct Tries,里面提到使用一种新的数据结构 Succinct Range Filter(SuRF) 替换掉了 RocksDB 默认的 Bloo...

TiDB ⋅ 38分钟前 ⋅ 0

Java进阶之内存模型介绍

Java进阶之内存模型介绍 前言 不管在什么编程语言里面,读取和写入都是我们程序最普遍的操作,在单线程的程序里面我们可能不关注线程的读写问题,但是一旦到多线程的环境下,读和写就会变得非...

九劫散仙 ⋅ 39分钟前 ⋅ 0

在windows上搭建一个ftp服务器

一、关于ftp FTP 是File Transfer Protocol的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序。基于不同的操作系统有不同的FTP应用程序...

zctzl ⋅ 44分钟前 ⋅ 0

JDK8 排序

import java.util.Collections;import java.util.List;import java.util.ArrayList;import java.util.Comparator; public class JavaTest { public static void main(String......

Jeam_ ⋅ 53分钟前 ⋅ 0

api管理平台汇总

swagger crapApi RAP xxl-api apidoc

facula ⋅ 54分钟前 ⋅ 0

Java 11 快要来了,编译 & 运行一个命令搞定!

Java 11 马上要来了,原定于 9 月发布,还有不到 3 个月了,敬请期待更多新功能被加入到 11 当中,本文本讲的是 JEP 330 这个新特性。 化繁为简,一个命令编译运行源代码 看下面的代码。 //...

Java技术栈 ⋅ 56分钟前 ⋅ 0

谷歌运营了一年多的无人出租车,得出了四条宝贵的经验

简评:并不是谷歌运营,不过国内对 Waymo 不敏感,就标题党了一下请多谅解。另外网友对于无人出租车是认可的,但是觉得如果价格没有优势,还是回去乘坐人类驾驶的汽车,毕竟这是人家的经济来...

极光推送 ⋅ 57分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部