企业号微信消息响应

<?php
include_once "./demo/WXBizMsgCrypt.php";
// 假设企业号在公众平台上设置的参数如下
$encodingAesKey = "tRx1Mg798ImKu3N3YerBjKB5pJwNem1mfwv9BEDT4lz";
$token = "9gjZHnJ";
$corpId = "wx83f0d0a2b0d3d571";
url_valid($token,$encodingAesKey,$corpId);
decrypt_msg($token,$encodingAesKey,$corpId,$Content);

//公众号服务器数据url验证
function url_valid($token,$encodingAesKey,$corpId)
{
    $sVerifyMsgSig = $_GET[‘msg_signature‘];
    $sVerifyTimeStamp = $_GET[‘timestamp‘];
    $sVerifyNonce = $_GET[‘nonce‘];
    $sVerifyEchoStr = $_GET[‘echostr‘];
    $wxcpt = new WXBizMsgCrypt($token, $encodingAesKey, $corpId);
    if($sVerifyEchoStr)
    {
        $sEchoStr = "";
        $errCode = $wxcpt->VerifyURL($sVerifyMsgSig, $sVerifyTimeStamp, $sVerifyNonce, $sVerifyEchoStr, $sEchoStr);
        if($errCode == 0)
        {
            logger("R \r\n".$sEchoStr);//写入日志文件
            print($sEchoStr);
        } else
        {
            print($errCode . "\n\n");
        }
    }
}

//xml解密
function decrypt_msg($token,$encodingAesKey,$corpId)
{
    $sReqMsgSig = $_GET[‘msg_signature‘];
    $sReqTimeStamp = $_GET[‘timestamp‘];
    $sReqNonce = $_GET[‘nonce‘];
    $sReqData = $GLOBALS[‘HTTP_RAW_POST_DATA‘];

    $sMsg = "";  // 解析之后的明文
    //判断收到信息为真
    if($sReqData)
    {
        $wxcpt = new WXBizMsgCrypt($token, $encodingAesKey, $corpId);
        $errCode = $wxcpt->DecryptMsg($sReqMsgSig, $sReqTimeStamp, $sReqNonce, $sReqData, $sMsg); //xml解密
        if($errCode == 0)
        {
            $xml = new DOMDocument();
            $xml->loadXML($sMsg);
            $Content = $xml->getElementsByTagName(‘Content‘)->item(0)->nodeValue;//得到消息内容
            $MsyType = $xml->getElementsByTagName(‘MsgType‘)->item(0)->nodeValue;//得到消息类型
            $FromUserName = $xml->getElementsByTagName(‘FromUserName‘)->item(0)->nodeValue; //发送用户的id
            $MsgType = $xml->getElementsByTagName(‘MsgType‘)->item(0)->nodeValue; //消息类型
            $CreateTime = $xml->getElementsByTagName(‘CreateTime‘)->item(0)->nodeValue;
            $MsgId = $xml->getElementsByTagName(‘MsgId‘)->item(0)->nodeValue;
            $AgentID = $xml->getElementsByTagName(‘AgentID‘)->item(0)->nodeValue;
            logger("R \r\n".$sMsg);//写入日志文件
            encrypt_msg($sReqNonce,$token,$encodingAesKey,$corpId,$Content);

        }else
        {
            print("ERR: " . $errCode . "\n\n");
        }
    }

}

//重新加密xml数据
function encrypt_msg($sReqNonce,$token,$encodingAesKey,$corpId,$Content)
{
    $sRespData ="<xml><ToUserName><![CDATA[".$FromUserName."]]></ToUserName>
                <FromUserName><![CDATA[wx83f0d0a2b0d3d571]]></FromUserName>
                <CreateTime>1348831860</CreateTime><MsgType>
                <![CDATA[text]]></MsgType>
                <Content><![CDATA[".$Content."]]></Content>
                <MsgId>1234567890123456</MsgId>
                <AgentID>128</AgentID>
            </xml>";
    $sEncryptMsg = ""; //xml格式的密文
    $sReqTimeStamp=time();
    $wxcpt = new WXBizMsgCrypt($token, $encodingAesKey, $corpId);
    $errCode = $wxcpt->EncryptMsg($sRespData, $sReqTimeStamp, $sReqNonce, $sEncryptMsg);
    if($errCode == 0)
    {

        print($sEncryptMsg);
        logger("R \r\n".$sEncryptMsg);//写入日志文件
    }else
    {
        print($errCode . "\n\n");
    }

}

//写日志

function logger($log_content)
{
    $max_size = 1000000;
    $log_filename = "log.xml";
    if( file_exists($log_filename) && (abs(filesize($log_filename))>$max_size) )
    {
        unlink($log_filename);
    }
    file_put_contents($log_filename, date(‘Y-m-d H:i:s‘)." ".$log_content."\r\n", FILE_APPEND);

}

?>
时间: 2024-07-30 07:20:40

企业号微信消息响应的相关文章

[转载]微信企业号不同消息类型发送

我们知道,企业号主要是面向企业需求而生的,因此内部消息的交流显得非常重要,而且发送.回复消息数量应该很可观,对于大企业尤其如此,因此可以结合企业号实现内部消息的交流.企业号具有关注安全.消息无限制等特点,很适合企业内部的环境.本文主要介绍如何利用企业号实现文本.图片.文件.语音.视频.图文消息等消息的发送操作. 1.企业号特点 对于企业号,有以下一些特点: 1)关注更安全 –只有企业通讯录的成员才能关注企业号,分级管理员.保密消息等各种特性确保企业内部信息的安全. 企业可以设置自行验证关注者身份

微信企业号开发:消息类型与差别

微信企业号的消息.分成两种,调用微信接口发送的消息在接口文档中叫做发送消息,这样的消息是json格式的.在微信server给我们配置的URL post数据时发送的消息叫做接收消息和事件,须要加密解密,不须要调用微信接口,这样的消息的格式是XML格式的. 两种消息的差别和联系: 发送消息是json格式的,不须要加密解密.须要调用微信的接口,须要AccessToken,这样的消息适用于公众号主动推送下发消息. 接收消息和事件的格式是XML格式的,须要加密,不须要调用微信接口,不须要AccessTok

C#开发微信门户及应用(19)-微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)

我们知道,企业号主要是面向企业需求而生的,因此内部消息的交流显得非常重要,而且发送.回复消息数量应该很可观,对于大企业尤其如此,因此可以结合企业号实现内部消息的交流.企业号具有关注安全.消息无限制等特点,很适合企业内部的环境.本文主要介绍如何利用企业号实现文本.图片.文件.语音.视频.图文消息等消息的发送操作. 1.企业号特点 对于企业号,有以下一些特点: 1)关注更安全 –只有企业通讯录的成员才能关注企业号,分级管理员.保密消息等各种特性确保企业内部信息的安全. 企业可以设置自行验证关注者身份

C#开发微信门户及应用(21)-微信企业号的消息和事件的接收处理及解密

原文:C#开发微信门户及应用(21)-微信企业号的消息和事件的接收处理及解密 在上篇随笔<C#开发微信门户及应用(19)-微信企业号的消息发送(文本.图片.文件.语音.视频.图文消息等)>介绍了有关企业号的消息发送,官方特别声明消息是不用加密发送的.但是在回调的服务器上,也就是我们网站的服务器上,微信传过来的消息是加密的,需要我们调用类库对消息和事件进行解密操作,由于官方的例子不全,因此摸索了不少时间,最终顺利解密收到的各种消息和事件.本文主要介绍 微信企业号的消息和事件的接收处理及解密操作.

C#开发微信门户及应用(2)--微信消息的处理和应答

原文:C#开发微信门户及应用(2)--微信消息的处理和应答 微信应用如火如荼,很多公司都希望搭上信息快车,这个是一个商机,也是一个技术的方向,因此,有空研究下.学习下微信的相关开发,也就成为计划的安排事情之一了.本系列文章希望从一个循序渐进的角度上,全面介绍微信的相关开发过程和相关经验总结,希望给大家了解一下相关的开发历程.本篇随笔主要基于上一篇<C#开发微信门户及应用(1)--开始使用微信接口>的基础上进行深入的介绍,介绍微信消息的处理和应答的过程. 1.微信的消息应答交互 我们知道,微信的

一个还算简单的微信消息SDK(基于.Net Standard 2.0)

虽然微信公众号出现了好久,不过在SDK这件事情上感觉并没有多少人把它当成一个有技术含量的事情来做,很多SDK做的事情就是一个代码的堆叠,当然也可能写的好的并没有开源出来.所以在某个翻遍Github而无所获的下午我写了一个基础的基于事件的微信消息类,今年初我把它放到了github和开源中国上并逐步完善,这篇文章就是简单介绍OSS开源系列下的微信消息模块SDK的使用方式,主要围绕以下几个方面分解: 一. 全局介绍 二. 配置管理 三. 框架使用 1. 框架组成元素 2. 框架支持的模式 四. 生命周

微信消息的处理和应答

1.微信消息应答流程微信服务器是客户手机和开发服务器信息流通的桥梁.消息流程图如下: 2.微信服务器向开发服务器请求消息1)文本消息处理2)事件消息处理3)开发者认证处理 微信消息处理入口操作,代码示例如下: public void ProcessRequest(HttpContext context) { //WHC.Framework.Commons.LogTextHelper.Info("测试记录"); string postString = string.Empty; if (

玩玩微信公众号Java版之二:接收、处理及返回微信消息

前面已经配置了微信服务器,那么先开始最简单的接收微信消息吧~ 可以用我们的微信号来直接进行测试,下面先看测试效果图: 这是最基本的文本消息的接收.处理及返回,来看看是怎么实现的吧! 首先可以参考微信消息相关的接口文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453 具体实现如下: 第一步,接收微信发送的文本消息入口: 1 /** 2 * 处理微信服务器发来的消息 3 */ 4 public void doPost

微信消息体签名及加解密功能详细解析以及.net实现

原文:微信消息体签名及加解密功能详细解析以及.net实现 前言 微信消息体签名及加密功能已上线,明文传输确实存在安全风险,鉴于微信的用户范围使用之广泛,必定会成为众矢之的.所以大家还是尽快接入安全模式为好.仔细阅读官方接入指南,发现这次安全升级只是涉及到用户在微信对话窗口中与公众好消息交互,所以此次升级还是比较简单的.下面为大家一一道来. 一.功能解析 微信消息体签名及加密功能已上线,出于安全考虑,强烈建议您尽快接入消息加密功能,消除安全风险.详见公告.公众平台接口调试工具已经全面支持消息体加密