php 开启微信公众号开发者模式
php 开启微信公众号开发者模式
<pre>
<?php
/**
* wechat php test
*/
header('Content-type:text');
//define your token
//定义TOKEN密钥
define("TOKEN", "weixin");
//实例化微信对象
$wechatObj = new wechatCallbackapiTest();
//验证成功后注释掉valid方法
$wechatObj->valid();
//开启自动回复功能
$wechatObj->responseMsg();
//定义类文件
class wechatCallbackapiTest
{
//实现valid验证方法:实现对接微信公众平台
public function valid()
{
//通过GET请求接收随机字符串
$echoStr = $_GET["echostr"];
//调用checkSignature方法进行用户(开发者)数字签名验证
//valid signature , option
if($this->checkSignature()){
//如果成功,则返回接收到的随机字符串
echo $echoStr;
//并退出
exit;
}
}
public function responseMsg()
{
//get post data, May be due to the different environments
//接收用户端(客户)发送过来的XML数据
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
//extract post data
//判断XML数据是否为空
if (!empty($postStr)){
/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
the best way is to check the validity of xml by yourself */
libxml_disable_entity_loader(true);
//通过simplexml进行xml解析 PHP中有两大类可以完成对XML的解析,1.PHP的Dom模型2.通过simplexml模型
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
//手机端
$fromUsername = $postObj->FromUserName;
//微信公众平台
$toUsername = $postObj->ToUserName;
//接收用户发送的关键词
$keyword = trim($postObj->Content);
//时间戳
$time = time();
//文本发送模板
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>";
//判断用户发送关键词是否为空
if(!empty( $keyword ))
{
//回复类型,如果为"text",代表文本类型
$msgType = "text";
//回复内容
$contentStr = "Welcome to wechat world!";
//格式化字符串(对xml进行格式化操作,把里面相关的变量格式化成字符串)
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
//把XML数据返回给手机端
echo $resultStr;
}
//如果用户发送的关键词为空,则返回下列字符串
else{
echo "Input something...";
}
}else {
echo "";
exit;
}
}
//定义checkSignature方法
private function checkSignature()
{
// you must define TOKEN by yourself
//判断TOKEN密钥是否定义
if (!defined("TOKEN")) {
//如果没有定义则抛出异常,返回'TOKEN is not defined!'字符串
throw new Exception('TOKEN is not defined!');
}
//接收微信加密签名
$signature = $_GET["signature"];
//接收时间戳信息
$timestamp = $_GET["timestamp"];
//接收随机数
$nonce = $_GET["nonce"];
//把TOKEN常量赋值给$token变量
$token = TOKEN;
//把相关参数组装为数组(密钥文件、时间戳、随机数)
$tmpArr = array($token, $timestamp, $nonce);
// use SORT_STRING rule
//通过字典法进行排序
sort($tmpArr, SORT_STRING);
//把排序后的数组转化为字符串
$tmpStr = implode( $tmpArr );
//通过哈希算法对字符串进行加密操作
$tmpStr = sha1( $tmpStr );
//与加密签名进行对比
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}
?>
</pre>
1 TOKEN要跟微信公众号后台的TOKEN对应就行
2 $wechatObj->valid(); 微信公众号后台验证完就可以注释掉
php 开启微信公众号开发者模式的更多相关文章
- tp6微信公众号开发者模式token认证
微信公众号开发完整教程(一) PHP7.0版本,TP5.0框架 技术标签: 微信公众号开发 因为工作的需要,这一两年对微信公众号和小程序,项目制作的比较多.所以我才打算写一篇全面的 ...
- tp6微信公众号开发者模式自定义菜单
1,参考上篇博客,获取access_token https://www.cnblogs.com/xiaoyantongxue/p/15803334.html 2:控制器写以下代码 /* * 获取普通a ...
- tp6微信公众号开发者模式基础消息
官方文档 https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messages ...
- tp6微信公众号开发者模式获取access_token
1:config 文件下新建一个文件wechat.php,将个人id和秘钥写入配置文件 网址: https://developers.weixin.qq.com/doc/offiaccount/Bas ...
- 微信公众号开发者模式自定义菜单 node
纯属分享 var config = require('./admin/wx/config/config'); var API = require('wechat-api'); var api = ne ...
- java开发微信公众号----开发者基本配置的
首先附上微信公众平台开发技术文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1472017492_58YV5 本文主要描 ...
- MVC下c#对接微信公众平台开发者模式
在ashx文件中进行HttpContext的处理: using System; using System.Collections.Generic; using System.Linq; using S ...
- C#微信公众平台开发者模式开启代码
using System;using System.IO;using System.Text;using System.Web.Security; namespace HPZJ.Web.sys.exc ...
- 【转】C#微信公众平台开发者模式开启代码
using System; using System.IO; using System.Text; using System.Web.Security; namespace HPZJ.Web.sys. ...
随机推荐
- 6个Linux运维典型问题,看大牛的分析解决思路
问题1:文件系统破坏导致系统无法启动 Checking root filesystem /dev/sda6 contains a file system with errors, check forc ...
- 渗透测试-基于白名单执行payload--zipfldr.dll
0x01 zipfldr.dll简介: zipfldr.dll自Windows xp开始自带的zip文件压缩/解压工具组件. 说明:zipfldr.dll所在路径已被系统添加PATH环境变量中,因此, ...
- [UWP]使用CompositionLinearGradientBrush实现渐变画笔并制作动画
1. 什么是 CompositionBrush CompositionBrush(合成画笔)是操作可视化层时用于绘制 SpriteVisual 区域的画笔. 使UWP 应用时可以选择使用 XAML 画 ...
- Chrome 浏览器垃圾回收机制与内存泄漏分析
Chorme 浏览器中的垃圾回收和内存泄漏 垃圾回收 通常情况下,垃圾数据回收分为手动回收和自动回收两种策略. 手动回收策略,何时分配内存.何时销毁内存都是由代码控制的. 自动回收策略,产生的垃圾数据 ...
- Cassandra官方介绍及安装
Cassandra官方介绍及安装 这个数据库有很高的伸缩性和可用性,你完全不需要向性能妥协.在硬件或者云设施上做修改 官网:Cassandra官网 一.简介 cassandra这个数据库有很高的伸缩性 ...
- 玩转OneNET物联网平台之简介
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- Vue系列---源码构建过程(四)
在了解源码如何构建之前,我们有必要了解下 项目中一个简单的目录结构如下: |---- vue | |---- dist # 打包后的存放文件目录 | |---- scripts # 存放构建相关的代码 ...
- 百万年薪python之路 -- 软件的开发规范
一. 软件的开发规范 什么是开发规范?为什么要有开发规范呢? 你现在包括之前写的一些程序,所谓的'项目',都是在一个py文件下完成的,代码量撑死也就几百行,你认为没问题,挺好.但是真正的后端开发的项目 ...
- ajax跨域简单请求与复杂请求
开发网站时经常会用到跨域资源共享(简称cors,后面使用简称)来解决跨域问题,但是在使用cors的时候,http请求会被划分为两类,简单请求和复杂请求,而这两种请求的区别主要在于是否会触发cors预检 ...
- TwoHandleSlider/RangeSlider
项目需求:双滑块slider,可以实现选择一个范围 (一)添加两个slider,并把背景以及fill设置为透明,并去除RaycastTarget (二)在背景下添加个一个image,背景图为滑块划过后 ...