PHP实现微信公众账号开发

1、首先需要一个可以外网访问的接口url。

  我这里是申请的新浪免费云服务器,http://xxxxx.applinzi.com/wx.php,具体自己可以去新浪云中心申请地址为:http://www.sinacloud.com

2、去微信公众账号申请个人的公众账号,地址为:https://mp.weixin.qq.com,然后进入到左侧菜单开发里面选择基本配置。

3、点击修改配置,填写必要的信息,认证如下图:

需要在wx.php里面写入认证代码,具体代码下文会提供。

4、等待认证成功后,启用配置

附详细代码:

  1 <?php
  2 header(‘Content-type:text/html;charset=utf-8‘);
  3 define("TOKEN", "这里是你在微信那里的token");
  4 $wechatObj = new wechatCallbackapiTest();
  5 $wechatObj->valid();
  6
  7 class wechatCallbackapiTest {
  8     public function valid()
  9     {
 10                //这里是认证过程       $echoStr = $_GET["echostr"];
 11         if($this->checkSignature() && $echoStr) {
 12             echo $echoStr;
 13             exit;
 14         } else {
 15             $this->responseMsg();//当认证成功后执行下面的代码
 16         }
 17     }
 18
 19     private function responseMsg() {
 20
 21         $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
 22         if (!empty($postStr)) {
 23                 libxml_disable_entity_loader(true);
 24                 $textTpl = "<xml>
 25                             <ToUserName><![CDATA[%s]]></ToUserName>
 26                             <FromUserName><![CDATA[%s]]></FromUserName>
 27                             <CreateTime>%s</CreateTime>
 28                             <MsgType><![CDATA[%s]]></MsgType>
 29                             <Content><![CDATA[%s]]></Content>
 30                             <FuncFlag>0</FuncFlag>
 31                             </xml>";
 32                 $postObj = simplexml_load_string($postStr, ‘SimpleXMLElement‘, LIBXML_NOCDATA);
 33                 //第一次关注的时候
 34                 if (strtolower($postObj->MsgType) == ‘event‘) {
 35                     if (strtolower($postObj->Event) == ‘subscribe‘) {
 36                         $toUsername = $postObj->ToUserName;
 37                         $fromUsername = $postObj->FromUserName;
 38                         $time = time();
 39                         $msgType = "text";
 40                         $contentStr = "<<Welcome attention to life is elsewhere!>>";
 41                         $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
 42                         echo $resultStr;
 43                     }
 44                 //关键字文本回复
 45                 } else if ( strtolower($postObj->MsgType) == ‘text‘ ) {
 46                     if ( $postObj->Content == ‘imooc‘ ) {
 47                         $toUsername = $postObj->ToUserName;
 48                         $fromUsername = $postObj->FromUserName;
 49                         $time = time();
 50                         $msgType = "text";
 51                         $contentStr = "imooc is very good";
 52                         $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
 53                         echo $resultStr;
 54                         exit;
 55                     } else if ( $postObj->Content == ‘美丽说‘ ) {
 56                         $array = array(
 57                             array(
 58                               ‘title‘ => ‘meilishuo‘,
 59                               ‘description‘=> ‘meilishuo is very good‘,
 60                               ‘picurl‘ => ‘http://d05.res.meilishuo.net/img/_o/67/24/65bc4ebfe22d0c2eca1702c9736c_117_43.ch.png‘,
 61                               ‘url‘ => ‘http://www.meilishuo.com‘
 62                             )
 63                         );
 64                         $imageTpl = "<xml>
 65                                     <ToUserName><![CDATA[%s]]></ToUserName>
 66                                     <FromUserName><![CDATA[%s]]></FromUserName>
 67                                     <CreateTime>%s</CreateTime>
 68                                     <MsgType><![CDATA[%s]]></MsgType>
 69                                     <ArticleCount>".count($array)."</ArticleCount>
 70                                     <Articles>";
 71                         foreach ($array as $key => $value) {
 72                             $imageTpl .=
 73                                     "<item>
 74                                     <Title><![CDATA[".$value[‘title‘]."]]></Title>
 75                                     <Description><![CDATA[".$value[‘description‘]."]]></Description>
 76                                     <PicUrl><![CDATA[".$value[‘picurl‘]."]]></PicUrl>
 77                                     <Url><![CDATA[".$value[‘url‘]."]]></Url>
 78                                     </item>";
 79                         }
 80                         $imageTpl .= "</Articles></xml>";
 81                         $toUsername = $postObj->ToUserName;
 82                         $fromUsername = $postObj->FromUserName;
 83                         $time = time();
 84                         $msgType = "news";
 85                         $resultStr = sprintf($imageTpl, $fromUsername, $toUsername, $time, $msgType);
 86                         echo $resultStr;
 87                         exit;
 88                     }
 89         }
 90
 91         } else {
 92             echo "";
 93             exit;
 94         }
 95
 96     }
 97
 98     private function checkSignature() {
 99         if (!defined("TOKEN")) {
100             throw new Exception(‘TOKEN is not defined!‘);
101         }
102
103         $signature = $_GET["signature"];
104         $timestamp = $_GET["timestamp"];
105         $nonce = $_GET["nonce"];
106         $token = TOKEN;
107         $tmpArr = array($token, $timestamp, $nonce);
108         sort($tmpArr, SORT_STRING);
109         $tmpStr = implode( $tmpArr );
110         $tmpStr = sha1( $tmpStr );
111         return ($tmpStr == $signature) ? true : false;
112    }
113 }
时间: 2024-07-29 23:10:30

PHP实现微信公众账号开发的相关文章

微信公众账号开发教程

微信公众账号开发教程 一.第1篇-引言 本文转载来自柳峰老师的博客,在这里非常感谢柳峰老师的分享和贡献! 内容方面,大概会涉及到: 1)前沿知识:微信公众帐号的分类.两种模式各自的特点和区别.开发模式的配置使用等: 2)API中各类消息的使用(我已经对api进行封装并打成了jar包,到时候会考虑分享出来): 3)微信公众帐号开发中的小技巧(如换行.通过代码发送表情.屏幕飘雪花.表情的接收识别.在Android和iOS上表现不一致等等): 4)与业务系统对接的方法(链接.短信等,除了技术讲解还会做

捷微jeewx , 免费开源微信公众账号开发平台

敏捷微信开发平台,简称"捷微", 捷微jeewx是一款免费开源的微信公众账号管理系统. 官方QQ群:  287090836 官网:    http://www.jeewx.com 平台介绍: 一.简介 jeewx是一个开源,高效,简洁的微信开发平台,采用JAVA语言基于jeecg这个企业级快速开发框架实现的. jeewx的目的是最大化的简化微信开发的流程,使用开发者能把最好的精力放到微信具体业务开发,并能以最快的时间完成.把一些常规而频繁的工作交由jeewx来处理即可,平台兼备的代码生

微信公众账号开发教程(三) 实例入门:机器人

一.功能介绍 通过微信公众平台实现在线客服机器人功能.主要的功能包括:简单对话.查询天气等服务. 这里只是提供比较简单的功能,重在通过此实例来说明公众平台的具体研发过程.只是一个简单DEMO,如果需要的话可以在此基础上进行扩展. 当然后续我们还会推出比较复杂的应用实例. 二.具体实现 1.提供访问接口 这里不再赘述,参照上一章,微信公众账号开发教程(二) 基础框架搭建http://www.cnblogs.com/yank/p/3392394.html 2.签名认证和分发请求 这里不再赘述,参照上

微信公众账号开发教程(四)自定义菜单

转自http://www.cnblogs.com/yank/p/3418194.html 一.概述: 如果只有输入框,可能太简单,感觉像命令行.自定义菜单,给我们提供了很大的灵活性,更符合用户的操作习惯.在一个小小的微信对话页面,可以实现更多的功能.菜单直观明了,不仅能提供事件响应,还支持URL跳转,如果需要的功能比较复杂,我们大可以使用URL跳转,跳转至我们的网页即可. 注意:自定义菜单,只有服务号才有此功能 如何注册,见第一章:微信公众账号开发教程(一) 基本原理及微信公众账号注册 效果如下

微信公众账号开发教程(二) 基础框架搭建

首先我们设计了模块层次图,当然图中只是给出一种实现方式,不局限于此.具体见下图. 主要功能介绍如下: 1)请求接口层.处理HTTP请求,及响应 2)分发层.由接口层传入请求,然后具体分析请求类型,分发至不同的处理器 3)业务逻辑层.这里是我们的具体业务逻辑了,根据请求,实现具体的业务逻辑. 4)数据层.我们在实现某个应用时可能需要访问数据,可以是数据库或者是文件.如果是简单应用,可能没有这一层. 其实,具体的应用可以在这个结构上去扩展,可以扩展消息对象层.业务对象层.数据访问层.功能管理层等.这

微信公众账号开发接口实现 - java servlet

原文:微信公众账号开发接口实现 - java servlet 源代码下载地址:http://www.zuidaima.com/share/1550463697898496.htm 微信公众平台开发接口验证token.收取.回复消息实现 其实只需要两个类:DeiponseMessage.java.Wechat.java 项目截图 缺少的jar包下载列表: http://mirrors.ibiblio.org/pub/mirrors/maven2/commons-beanutils/commons-

微信公众账号开发入门

此文记录了微信公众号开发的整个流程,想要调用微信 JS API 并非直接引入一个 jweixin-1.0.0.js 到页面里那么简单.需要获取 access_token, jsapi_ticken 和签名 sign等.其中的任何一个步骤错误都会调用不到其 API.这些参数一般是后台生成,可以用阿里云或新浪云提供的服务. 一.注册篇 注册一个公众账号是必须的,5 个步骤(以个人订阅号为例) 填写基本信息 邮箱激活 选择账号类型 信息登记 查看公众号信息 1. 访问 https://mp.weixi

微信公众账号开发教程(一) 基本原理及微信公众账号注册

基本原理 在开始做之前,大家可能对这个很感兴趣,但是又比较茫然.是不是很复杂?很难学啊? 其实恰恰相反,很简单.为了打消大家的顾虑,先简单介绍了微信公众平台的基本原理. 微信服务器就相当于一个转发服务器,终端(手机.Pad等)发起请求至微信服务器,微信服务器,然后将请求转发给自定义服务(这就里就是我们的具体实现). 服务处理完毕,然后挥发给微信服务器,微信服务器再将具体响应回复到终端. 通信协议为:HTTP 数据格式为:XML 具体的流程如下图所示: 其实,我们需要做的事情,就是对HTTP请求,

Jfinal微信公众账号开发笔记

weixinMsgController.java        用来处理微信端发送过来的消息(包含文本,图片,地理位置等)    weixinApiController.java        用来处理用户端/后台发过来的请求,            查询公众账号菜单            查询某个人的消息            查询关注列表