2.这里把它粘贴出来,以注释的形式进行讲解。

3.首先我们要知道一些基础的知识:

(1)要有自己的网站——公网环境,其中一个php页面处理微信消息;

(2)微信公众平台和网站服务器之间是通过XML数据传输消息的;

(3)微信公众平台开发者模式服务器配置

以我的配置为例:URL要填写核心代码所在位置;Token自己随意命名,和核心代码保持一致。

4.微信官方代码详解

/**

* wechat php test

* update time: 20141008

*/ //腾讯自带注释,嫌碍眼可以删除

//define your token

define("TOKEN", "weixin"); //定义常量"TOKEN"为weixin,这里的weixin和上图Token值一致。

$wechatObj = new wechatCallbackapiTest(); //将wechatCallbackapiTest类实例化,对象名为wechatObj。

$wechatObj->valid(); //调用valid()方法,验证 公众平台 与 网站服务器 能否连通。

class wechatCallbackapiTest //wechatCallbackapiTest 类

{

public function valid() //验证接口——valid()方法,验证 公众平台 与 网站服务器 能否连通。

{

$echoStr = $_GET["echostr"]; //从微信服务器(你的公众号)获取一个随机字符赋予变量$echoStr,这个"echostr"是 微信端随机字符串

//valid signature , option

if($this->checkSignature()){ //调用checkSignature()方法,验证签名是否一致

echo $echoStr; //签名一致,输出$echoStr字符串,完成验证配置接口的操作。

exit;

}

}

public function responseMsg() //公有的responseMsg()方法,是回复微信的代码核心

{

//get post data, May be due to the different environments//获取微信服务器(你的公众号)发来的数据,不同的环境可能有差异。

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//将 用户发送的消息数据,先保存到$postStr变量当中。回顾第一张图片

//extract post data //解析用户数据

if (!empty($postStr)){ //如果不为空,执行以下代码

$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

/*simplexml_load_string()是PHP中一个解析XML的函数。

第一个参数$postStr表示 要解析的参数;

第二个参数'SimpleXMLElment为新对象的类,该类是解析XML数据的类;

第三个参数LIBXML_NOCDATA表示将CDATA设置为文本节点,CDATA标签中的文本XML不进行解析,如下方 [CDATA[%s]] 中 [%s] 部分

*/

$fromUsername = $postObj->FromUserName;//将传输过来的数据中FromUserName——用户的OpenID(每一个用户针对一个公众号所分配的身份标识),赋值

$toUsername = $postObj->ToUserName;//上一行表示数据从哪里来(从用户来),这一行表示到哪里去(到公众账号)——将数据中的 公众号原始ID 赋值

$keyword = trim($postObj->Content);//用户发送过来的文本信息去掉空格后赋值;trim():去空格;$postObj->Content:获取文本消息(如果有的话)

$time = time();//将系统时间赋予变量$time。

$textTpl = "//构建XML格式的文本赋予变量$textTpl,每种消息有固定格式,参考“微信公众开发者文档”。

//数据发送到哪?%s。表示需要一个string类型的参数填充到这里

//数据从哪里来?

%s//创建时间,上面的$time待会儿要赋值到这里的%s

//消息类型——文本、图片、音乐、位置、链接和图文

//消息内容

0//是否星标

"; //xml格式文本结束符号

if(!empty( $keyword ))//如果发送过来的就是文本消息

{

$msgType = "text"; //消息类型:text

$contentStr = "Welcome to wechat world!";//网站服务器反馈给用户的话:welcome to...

$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);

/*将xml格式中的数据分别赋值;

sprintf()为变参函数:第一个参数$textTpl表示对它改变参数;

第二个参数叫$fromUsername(它存的是用户的OpenID),因为数据传输方向掉头了——原来是用户给服务器发送消息,ToUserName表示服务器;现在服务器要发送数据给用户(OpenID),ToUserName表示用户;

第三个参数和第二个参数道理一样;

第四个参数$time:消息创建时间;

第五个参数:消息类型,这里表示文本;

第六个参数:消息内容:服务器向用户发送的消息

*/

echo $resultStr;//输出回复消息——发送微信

}else{

echo "Input something..."; //如果没有消息,输入内容。此消息不会发送到微信,测试时使用

}

}else {

echo ""; //微信端没有信息时,回复为空。没有意义,调试用

exit; //退出

}

}

private function checkSignature() //验证签名是否一致

{

$signature = $_GET["signature"]; //从微信服务器获取签名,赋值

$timestamp = $_GET["timestamp"]; //从微信服务器获取时间戳,赋值

$nonce = $_GET["nonce"]; //从微信服务器获取随机数,赋值

$token = TOKEN; //将上方定义的TOKEN值weixin赋值

$tmpArr = array($token, $timestamp, $nonce);//建立数组变量——Token+timestamp+nonce

sort($tmpArr, SORT_STRING); //对$tmpArr数组中的 参数 排序;SORT_STRING:把值作为字符串来处理。

$tmpStr = implode( $tmpArr ); //把数组中的 参数 组合为一个字符串

$tmpStr = sha1( $tmpStr ); //对字符串进行sha1加密,加密后的字符串=$signature

if( $tmpStr == $signature ){

return true;

}else{

return false;

} //自己的Token+微信的时间戳+微信的随机数=微信的签名,验证通过;否则,验证失败

}

}

?>代码详解就到这里,这是官方的微信公众平台PHP代码,可以直接拿来用。当然,代码只提供了文本消息的响应作为示范,更全面的代码请看下一篇:

微信公众平台万能代码详解-php语言(二)。

有疑问的伙伴可以加我qq:724122005,或直接邮箱:lifan.25@qq.com。欢迎来访!

================================================================

2015年6月19日17:07:06更新

php 微信 公众 平台,微信公众平台代码详解-php语言(一)相关推荐

  1. 微信公众平台万能代码详解-php语言(二)

    1.基础知识在上一篇地址有讲解和图片,内容大致包括微信开发者模式后台配置.微信公众开发者文档代码详解. 2.本篇将粘贴出包括所有类型在内的消息处理办法,在开发者模式下用代码完成所有编辑模式的基础内容. ...

  2. 微信小程序api,带代码详解

    微信小程序内置api 1.界面 1.wx.showToast(Object object)显示消息提示框 wx.showToast({title: '你好',icon:"none" ...

  3. 微信小程序支付 Java后端代码详解

    微信小程序发起支付 Java后台处理代码---- 直接上代码吧! 我把自己的业务逻辑代码删了,但是都有注释的 莫慌! package com.mvc.controller;import java.io ...

  4. JavaWeb项目——基于Servlet实现的在线OJ平台 (项目问答+代码详解)

    文章目录 项目演示 预先知识 请问 在处理用户同时提交代码时是 多进程处理还是 多线程处理? 你是如何创建多进程的逻辑的 如何获取到编译与运行后的结果? 编译运行模块 子进程之间如何并发? 文件读写操 ...

  5. 公交线路换乘代码PHP,微信开发之公交换乘功能代码详解

    1)API申请 2)API调用 3)[b]效果展示[/b] 4)精准查询 --------------------------------------------------------------- ...

  6. 微信小程序系列(7)如何用微信小程序写一个论坛?贴心代码详解(五)删帖页【完结篇】

    源代码已开源,如果对你有帮助可以点个星:https://github.com/linkaimin/xdzs 写论坛不难,重点是各页面之间的信息传递! 先放成品图,虽然有点单调....但是麻雀虽小五脏俱 ...

  7. 【2023年第十一届泰迪杯数据挖掘挑战赛】C题:泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题一

    相关链接 [2023年第十一届泰迪杯数据挖掘挑战赛]C题泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题一 [2023年第十一届泰迪杯数据挖掘挑战赛]C题泰迪内推平台招聘与求职 ...

  8. pos请求 微信小程序_微信小程序蓝牙连接小票打印机实例代码详解

    1.连接蓝牙 (第一次发表博客) 第一步打开蓝牙并搜索附近打印机设备// startSearch: function() { var that = this wx.openBluetoothAdapt ...

  9. 微信小程序系列(4)如何用微信小程序写一个论坛?贴心代码详解(二)评论页

    源代码已开源,如果对你有帮助可以点个星:https://github.com/linkaimin/xdzs 写论坛不难,重点是各页面之间的信息传递! 先放成品图,虽然有点单调....但是麻雀虽小五脏俱 ...

最新文章

  1. 用matlab让高低音频重叠,音频分帧,叠加后仍有不连续
  2. 外网win10 64位环境下 为内网win7 32位安装三方包的最靠谱手段:python64位、32位全安装。...
  3. Visual Studio Code 使用 ESLint 增强代码风格检查 - gyzhao - 博客园
  4. MUI框架 · 异步请求:mui.get()、mui.ajax()、mui.post() 技术罗列
  5. JNI开发笔记(六)--一种更规范的so库生成方法
  6. 解决Django文件表单验证forms.FileField(required=True),总是无法通过验证:这个字段是必填项
  7. python项目“内存泄漏”的调试过程
  8. 谈谈App的混合开发
  9. Spring Boot 2.x(十四):整合Redis,看这一篇就够了
  10. 【背包问题】基于matlab遗传算法求解多背包问题【含Matlab源码 122期】
  11. Phonegap(Cordova)3.4 + Android 环境搭建
  12. php处理数组函数大全
  13. 基于智能手机的物流管理系统
  14. nginx跨域配置步骤
  15. 系列学习 Gateway 之第 3 篇 —— 过滤器 Filter,自定义全局过滤器
  16. 如何为Safari浏览器安装Flash插件?
  17. pythonarray去除inf_Python中的inf与nan
  18. STM32F103ZG单片机解密确保成功 ST芯片解密
  19. linux安装nodejs 7,在CentOS 7上安装Node.js的4种方法
  20. PHP图片验证码无法显示的解决方案

热门文章

  1. 牛腩新闻系统--.NET使用一般处理程序生成验证码
  2. SAP中使用SE91更改消息短文本
  3. Pytorch——报错解决:RuntimeError: Output 0 of SelectBackward is a view and is being modified inplace.
  4. php tp 聚合数据接口,TP5结合聚合数据天气预报API查询天气
  5. unity获取电磁笔压感_电磁笔的分类和特性
  6. vue的网站用puppeteer做seo
  7. Java的三大特性之封装、继承、多态-----最简理解
  8. QGIS之十三矢量化电子地图并矩形化
  9. 双重差分模型能做固定效应吗_双重差分法的平行趋势假定
  10. 据说这是国外最火的55套PS实用教程!