php 微信 公众 平台,微信公众平台代码详解-php语言(一)
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语言(一)相关推荐
- 微信公众平台万能代码详解-php语言(二)
1.基础知识在上一篇地址有讲解和图片,内容大致包括微信开发者模式后台配置.微信公众开发者文档代码详解. 2.本篇将粘贴出包括所有类型在内的消息处理办法,在开发者模式下用代码完成所有编辑模式的基础内容. ...
- 微信小程序api,带代码详解
微信小程序内置api 1.界面 1.wx.showToast(Object object)显示消息提示框 wx.showToast({title: '你好',icon:"none" ...
- 微信小程序支付 Java后端代码详解
微信小程序发起支付 Java后台处理代码---- 直接上代码吧! 我把自己的业务逻辑代码删了,但是都有注释的 莫慌! package com.mvc.controller;import java.io ...
- JavaWeb项目——基于Servlet实现的在线OJ平台 (项目问答+代码详解)
文章目录 项目演示 预先知识 请问 在处理用户同时提交代码时是 多进程处理还是 多线程处理? 你是如何创建多进程的逻辑的 如何获取到编译与运行后的结果? 编译运行模块 子进程之间如何并发? 文件读写操 ...
- 公交线路换乘代码PHP,微信开发之公交换乘功能代码详解
1)API申请 2)API调用 3)[b]效果展示[/b] 4)精准查询 --------------------------------------------------------------- ...
- 微信小程序系列(7)如何用微信小程序写一个论坛?贴心代码详解(五)删帖页【完结篇】
源代码已开源,如果对你有帮助可以点个星:https://github.com/linkaimin/xdzs 写论坛不难,重点是各页面之间的信息传递! 先放成品图,虽然有点单调....但是麻雀虽小五脏俱 ...
- 【2023年第十一届泰迪杯数据挖掘挑战赛】C题:泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题一
相关链接 [2023年第十一届泰迪杯数据挖掘挑战赛]C题泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题一 [2023年第十一届泰迪杯数据挖掘挑战赛]C题泰迪内推平台招聘与求职 ...
- pos请求 微信小程序_微信小程序蓝牙连接小票打印机实例代码详解
1.连接蓝牙 (第一次发表博客) 第一步打开蓝牙并搜索附近打印机设备// startSearch: function() { var that = this wx.openBluetoothAdapt ...
- 微信小程序系列(4)如何用微信小程序写一个论坛?贴心代码详解(二)评论页
源代码已开源,如果对你有帮助可以点个星:https://github.com/linkaimin/xdzs 写论坛不难,重点是各页面之间的信息传递! 先放成品图,虽然有点单调....但是麻雀虽小五脏俱 ...
最新文章
- 用matlab让高低音频重叠,音频分帧,叠加后仍有不连续
- 外网win10 64位环境下 为内网win7 32位安装三方包的最靠谱手段:python64位、32位全安装。...
- Visual Studio Code 使用 ESLint 增强代码风格检查 - gyzhao - 博客园
- MUI框架 · 异步请求:mui.get()、mui.ajax()、mui.post() 技术罗列
- JNI开发笔记(六)--一种更规范的so库生成方法
- 解决Django文件表单验证forms.FileField(required=True),总是无法通过验证:这个字段是必填项
- python项目“内存泄漏”的调试过程
- 谈谈App的混合开发
- Spring Boot 2.x(十四):整合Redis,看这一篇就够了
- 【背包问题】基于matlab遗传算法求解多背包问题【含Matlab源码 122期】
- Phonegap(Cordova)3.4 + Android 环境搭建
- php处理数组函数大全
- 基于智能手机的物流管理系统
- nginx跨域配置步骤
- 系列学习 Gateway 之第 3 篇 —— 过滤器 Filter,自定义全局过滤器
- 如何为Safari浏览器安装Flash插件?
- pythonarray去除inf_Python中的inf与nan
- STM32F103ZG单片机解密确保成功 ST芯片解密
- linux安装nodejs 7,在CentOS 7上安装Node.js的4种方法
- PHP图片验证码无法显示的解决方案
热门文章
- 牛腩新闻系统--.NET使用一般处理程序生成验证码
- SAP中使用SE91更改消息短文本
- Pytorch——报错解决:RuntimeError: Output 0 of SelectBackward is a view and is being modified inplace.
- php tp 聚合数据接口,TP5结合聚合数据天气预报API查询天气
- unity获取电磁笔压感_电磁笔的分类和特性
- vue的网站用puppeteer做seo
- Java的三大特性之封装、继承、多态-----最简理解
- QGIS之十三矢量化电子地图并矩形化
- 双重差分模型能做固定效应吗_双重差分法的平行趋势假定
- 据说这是国外最火的55套PS实用教程!