猜想:

懵逼

实践:

微信公众号开发的手册中甚至给出了只需要修改几个参数就能使用的范例.企业微信开发中在一个很不显眼的地方放了一个sample.

https://work.weixin.qq.com/api/doc#10128

看似很好理解(并不,背后封装了不算简单的加密方法)

获取参数->解密->输出解密后的参数

然而却因为一个函数引用传参知识点的缺失而困扰了许久

public function VerifyURL($sMsgSignature, $sTimeStamp, $sNonce, $sEchoStr, &$sReplyEchoStr)

我苦苦寻找着这第五个参数到底是什么.基础啊..

自己试着去引用传递了一下,手册中是通过方法改变外部变量的值,我这里在外部输出内部的值,发现都是可以实现的..

    public function test(&$a)
{
$a=10;
return 'test';
} public function test1(){
$this->test($a);
echo $a;// 10
}

那么VerifyURL这样写也不奇怪了

public function VerifyURL($sMsgSignature, $sTimeStamp, $sNonce, $sEchoStr, &$sReplyEchoStr)
{
if (strlen($this->m_sEncodingAesKey) != 43) {
return ErrorCode::$IllegalAesKey;
} $pc = new Prpcrypt($this->m_sEncodingAesKey);
//verify msg_signature
$sha1 = new SHA1;
$array = $sha1->getSHA1($this->m_sToken, $sTimeStamp, $sNonce, $sEchoStr);
$ret = $array[0]; if ($ret != 0) {
return $ret;
} $signature = $array[1];
if ($signature != $sMsgSignature) {
return ErrorCode::$ValidateSignatureError;
} $result = $pc->decrypt($sEchoStr, $this->m_sCorpid);
if ($result[0] != 0) {
return $result[0];
}
$sReplyEchoStr = $result[1]; return ErrorCode::$OK;
}

相当于在函数内部声明了一个外部可以访问的变量

最后献上完整的代码,其实就是根据sample文件改了那么一丢丢的内容,关键在于理解..网上发布的各种版本的开启回调模式的文件思路都一个意思..关键在于理解..

 <?php

 include_once "WXBizMsgCrypt.php";

 $qy= new Qy_wechat();
$qy->test1();
$qy->valid(); class Qy_wechat{
private $token;
private $encodingAesKey;
private $corpId; function __construct()
{
$this->token='heTIurA65In';
$this->encodingAesKey='k8UmbddUc83SC3sGEyafepiycJNBj6Iw0JGXmkp1weh';
$this->corpId='WW4e37698eeb6f73c5';
} public function valid(){
$sVerifyMsgSig =$_GET["msg_signature"];
$sVerifyTimeStamp =$_GET["timestamp"];
$sVerifyNonce = $_GET["nonce"];
$sVerifyEchoStr = $_GET["echostr"];// 需要返回的明文 $wxcpt = new WXBizMsgCrypt($this->token, $this->encodingAesKey, $this->corpId); $errCode = $wxcpt -> VerifyURL($sVerifyMsgSig, $sVerifyTimeStamp, $sVerifyNonce, $sVerifyEchoStr, $sEchoStr);
if ($errCode == 0) {
//
// 验证URL成功,将sEchoStr返回
echo $sEchoStr;
} else {
print("ERR: " . $errCode . "\n\n");
} }
}

猜想:

那么,开启了回调模式,之后我应该做什么呢?

如何用php开启企业微信开发的回调模式的更多相关文章

  1. Java企业微信开发_03_通讯录同步

    一.本节要点 1.获取通讯录密钥 获取方式: 登录企业微信—>管理工具—>通讯录同步助手—>开启“API接口同步”  ; 开启后,即可看到通讯录密钥,也可设置通讯录API的权限:读取 ...

  2. Java企业微信开发_02_通讯录同步

    一.本节要点 1.获取通讯录密钥 获取方式: 登录企业微信—>管理工具—>通讯录同步助手—>开启“API接口同步”  ; 开启后,即可看到通讯录密钥,也可设置通讯录API的权限:读取 ...

  3. Java企业微信开发_01_接收消息服务器配置

    一.准备阶段 需要准备事项: 1.一个能在公网上访问的项目: 见:Java微信公众平台开发_01_本地服务器映射外网 2.一个企业微信账号: 去注册:(https://work.weixin.qq.c ...

  4. Java企业微信开发_07_素材管理之上传本地临时素材文件

    一.本节要点 1.临时素材有效期 media_id是可复用的,同一个media_id可用于消息的多次发送(3天内有效) 2.上传文件时的http请求里都有啥 具体原理可参看: 为什么上传文件的表单需要 ...

  5. Java企业微信开发_05_消息推送之发送消息(主动)

    一.本节要点 1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接 ...

  6. Java企业微信开发_09_身份验证之移动端网页授权(有完整项目源码)

    注: 源码已上传github: https://github.com/shirayner/WeiXin_QiYe_Demo 一.本节要点 1.1 授权回调域(可信域名) 在开始使用网页授权之前,需要先 ...

  7. Java企业微信开发_06_素材管理之上传本地临时素材文件至微信服务器

    一.本节要点 1.临时素材有效期 media_id是可复用的,同一个media_id可用于消息的多次发送(3天内有效) 2.上传文件时的http请求里都有啥 具体原理可参看: 为什么上传文件的表单需要 ...

  8. Java企业微信开发_05_消息推送之被动回复消息

    一.本节要点 1.消息的加解密 微信加解密包 下载地址:http://qydev.weixin.qq.com/java.zip      ,此包中封装好了AES加解密方法,直接调用方法即可. 其中,解 ...

  9. Java企业微信开发_04_消息推送之发送消息(主动)

    源码请见: Java企业微信开发_00_源码及资源汇总贴 一.本节要点 1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息 ...

随机推荐

  1. 更新部分字段 NHibernate

    更新部分字段 NHibernate 概述: 在有些情况下,我只想更新记录中的一个字段的值.比如:浏览完这条记录后,我把其中的是否浏览置为1. Nhibernate中提供了Native SQL,其中有一 ...

  2. logstash+elasticsearch+kibana快速搭建日志平台

    使用logstash+elasticsearch+kibana快速搭建日志平台   日志的分析和监控在系统开发中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有: 根据关键字查询日 ...

  3. CSDN CODE平台,中国版Github简要使用说明

    CSDN CODE平台,中国版Github简要使用说明!(多图慎入)   楼主说 以前一直看到别人在用github发布自己的代码,各种牛逼,各种羡慕嫉妒恨.最后终于受不了了,也去注册了一个,注册到没什 ...

  4. IE6的那些css常见bug(汇总)

    IE6的那些css常见bug(汇总) 我的微博终于在前几天建立了 虽说很早之前就知道博客园这个地方 但怕自己不能坚持去写一些东西一直没有建.这几天 我做了这个决定 把我的博客建起来 每周发一些看到的, ...

  5. SQL Server中的高可用性1

    SQL Server中的高可用性(1)----高可用性概览   自从SQL Server 2005以来,微软已经提供了多种高可用性技术来减少宕机时间和增加对业务数据的保护,而随着SQL Server ...

  6. VC中如何设置菜单项的触发状态?

    MFC中初始菜单栏如下: 当工程未新建,或者未打开时,后面的观测菜单设置为灰色,不可触发. 当新建工程或者打开工程后,菜单变回可触发状况. 观测菜单如下:   下面以轴力观测菜单为例 轴力初始测量菜单 ...

  7. uploadify的使用

    uploadify的使用 课程设计需要实现上传文件模块,本来ASP.NET是有内置的控件,但是ASP.NET MVC没有,所以就有两种方法:自定义和采用第三方插件.由于时间的关系,故采用第三方插件:u ...

  8. Qt中的串口编程之三

    QtSerialPort 今天我们来介绍一下QtSerialPort模块的源代码,学习一下该可移植的串口编程库是怎么实现的. 首先,我们下载好了源代码之后,使用QtCreator打开整个工程,可以看到 ...

  9. openlayers 加载瓦片详解 一

    在这先说点题外话,本人在研究webgl 三维球过程中惊人发现,openlayers 的开发人员也在研究webgl并经证实他们也正在研发基于 webgl的三维gis开源平台,这可能是首个开源的三维平台, ...

  10. 开源 免费 java CMS - FreeCMS1.4-功能说明-站点管理

    下载地址:http://code.google.com/p/freecms/ 站点管理 FreeCMS支持网站群模式,并支持无限树级管理. 1.  添加一级站点 从左侧管理菜单点击站点管理进入. 提示 ...