当前位置: 首页 > news >正文

微信开发(一) 服务器配置

因为最近需要写一个微信的小东西去参加比赛,所以今天就开始正儿八经的写一下博文,号之前申请了,就不说申请号的一部分了。

之前使用的都是未加密的明文模式,由于比赛要求,必须使用加密模式,所以只好学学加密模式。

 

先是服务器配置,先将服务器如图配置

 

配置微信响应文件:


define("TOKEN", "hmcome"); //设置token

define("AppID", "wx4***********");//设置APPID

define("EncodingAESKey", "x2q***************************");//设置加密密钥

require_once('wxBizMsgCrypt.php');//引用消息加密解密包  注意:加密解密包里又引用了多个文件

 

当用户向公众账号发送消息时,微信公众账号将会在URL中带上signature、timestamp、nonce、encrypt_type、msg_signature等参数,如下所示

http://www.xxx.com/index.php?signature=35703636de2f9df2a77a662b68e521ce17c34db4&timestamp=1414243737&nonce=1792106704&encrypt_type=aes&msg_signature=6147984331daf7a1a9eed6e0ec3ba69055256154

加密解密原理简单,就是在微信给你响应的时候是一串密文信息,当到了开发者这里就先解密,解密进行处理了过后再用密文的方式返回给用户。

检查签名的完整代码:

public function responseMsg()
{
$timestamp = $_GET['timestamp'];
$nonce = $_GET["nonce"];
$msg_signature = $_GET['msg_signature'];
$encrypt_type = (isset($_GET['encrypt_type']) && ($_GET['encrypt_type'] == 'aes')) ? "aes" : "raw";
//检查加密否

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!empty($postStr)){
//如果是加密的文本,就将他先解密
if ($encrypt_type == 'aes'){
$pc = new WXBizMsgCrypt(TOKEN, EncodingAESKey, AppID);
$decryptMsg = ""; //解密后的明文
$errCode = $pc->DecryptMsg($msg_signature, $timestamp, $nonce, $postStr, $decryptMsg);
$postStr = $decryptMsg;
}
//解密结束
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$RX_TYPE = trim($postObj->MsgType);

//消息分离,判断是文本还是事件
switch ($RX_TYPE)
{
case "text":
$resultStr = $this->receiveText($postObj);
break;
case "event":
$resultStr = $this->receiveEvent($postObj);
break;
default:
$resultStr = "";
break;
}
//响应完了过后再把消息加密
if ($encrypt_type == 'aes'){
$encryptMsg = ''; //加密后的明文
$errCode = $pc->encryptMsg($resultStr, $timestamp, $nonce, $encryptMsg);
$postStr = $encryptMsg;
}
//加密结束
echo $resultStr;
}else {
echo "";
exit;
}
}

 

转载于:https://www.cnblogs.com/hhlh/p/4439758.html

相关文章:

  • .net通用权限框架B/S (三)--MODEL层(2)
  • 开源库
  • STM32中断优先级彻底讲解
  • 基于PCA和SVM的人脸识别
  • markdonw 一个模版
  • android超快模拟器Ggenymotion的安装和配置
  • NSUserDefaults设置bool值重启后bool只设置丢失问题
  • 01_Android应用开发环境_03_开发环境搭建及简单Android程序
  • 信息学奥赛辅导经验谈 问题教学法中的学生思维能力培养
  • HTTP 404 - 未找到文件 怎么样解决
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • JS获得当月的天数和得到当月最后一天的日期
  • void (*f(int, void (*)(int)))(int) 函数解析
  • 我爱淘冲刺阶段站立会议每天任务4
  • jetty运行maven程序(修改及时生效,不需要重启jetty程序)
  • 【React系列】如何构建React应用程序
  • AngularJS指令开发(1)——参数详解
  • create-react-app做的留言板
  • django开发-定时任务的使用
  • Fundebug计费标准解释:事件数是如何定义的?
  • Laravel Telescope:优雅的应用调试工具
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • 回顾2016
  • 类orAPI - 收藏集 - 掘金
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 用element的upload组件实现多图片上传和压缩
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • $ git push -u origin master 推送到远程库出错
  • (42)STM32——LCD显示屏实验笔记
  • (poj1.2.1)1970(筛选法模拟)
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (十六)Flask之蓝图
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • *1 计算机基础和操作系统基础及几大协议
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET Reactor简单使用教程
  • .NET 分布式技术比较
  • .NET 使用 XPath 来读写 XML 文件
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @Autowired自动装配
  • @hook扩展分析
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [20140403]查询是否产生日志
  • [20170728]oracle保留字.txt
  • [20180224]expdp query 写法问题.txt
  • [3300万人的聊天室] 作为产品的上游公司该如何?