微信API入口文件api.php


     微信Api入口主要负责处理微信公众平台请求微擎系统的关键字、图片、语音等数据,入 口文件是 “api.php”。此入口只用于公众平台访问。此入口主要完成以下工作:
    1. 初始化当前公众号的数据
     2.解析公众平台推送过来的数据结构,转化为微擎消息结构
     3.根据消息结构中的关键字或是事件匹配到相应的模块
    4. 调用模块的processor类返回数据给微信公共平台

     

       /**
*  对消息进行加密,并生成签名,返回签名的函数
*/
public function encrypt() {
global $_W;
if(empty($this->account)) {
exit('Miss Account.');
}


$timestamp = TIMESTAMP; //当前时间戳


//随机数,因为要验证数据的安全性,为了防伪造,防止窃取上次请求的数据
$nonce = random(5);
$token = $_W['account']['token'];


//(timestamp+token+signkey+nonce可以防止攻击)
$signkey = array($token, TIMESTAMP, $nonce);


//sort()函数对数组进行升序排序,把每一项当字符串来处理
sort($signkey, SORT_STRING);


//implode()返回由数组元素组成的字符串
$signString = implode($signkey);


        //对返回的数组元素的字符串进行加密再和signature比较判断是否来自微信服务器请求
$signString = sha1($signString);//shal计算字符串的散列进行加密
$_GET['timestamp'] = $timestamp;
$_GET['nonce'] = $nonce;
$_GET['signature'] = $signString;


//读取的文件的内容
$postStr = file_get_contents('php://input');


//在加密模式中,增加了两个参数:encrypt_type(加密的方式) 和 msg_signature(解密,得到消息的内容)
/*
  body体中的内容:
  <xml>
                  <ToUserName><![CDATA[toUser]]></ToUserName>
                  <Encrypt><![CDATA[encryptData]]></Encrypt>
                  </xml>
                 encryptData是加密后的信息
                */
                //用EncodingAESKey, Token, 以及自动生成的AppID,通过加密算法,可以验证信息的真实性,并且将真实的信息,解析成如明文的格式的XML
               //$_W['setting']['development'] 1为开词开发模式,0为关系,开发模式时会显示系统错误信息
if(!empty($_W['account']['encodingaeskey']) && strlen($_W['account']['encodingaeskey']) == 43 && !empty($_W['account']['key']) && $_W['setting']['development']    !=1) {


//对字符串进行加密
$data = $this->account->encryptMsg($postStr);
$array = array('encrypt_type' => 'aes', 'timestamp' => $timestamp, 'nonce' => $nonce, 'signature' => $signString, 'msg_signature' => $data[0], 'msg' =>        $data[1]);
} else {
$data = array('', '');
$array = array('encrypt_type' => '', 'timestamp' => $timestamp, 'nonce' => $nonce, 'signature' => $signString, 'msg_signature' => $data[0], 'msg' => $data[1]);
}
exit(json_encode($array));
     }
     /**
* 对消息进行解密,并验证签名,返回解密后的信息的函数
*/
    //解密函数,strlen()返回字符串的长度
public function decrypt() {
global $_W;
if(empty($this->account)) {
exit('Miss Account.');
}


        //把文件读入字符串中
$postStr = file_get_contents('php://input');
if(!empty($_W['account']['encodingaeskey']) && strlen($_W['account']['encodingaeskey']) == 43 && !empty($_W['account']['key']) && $_W['setting']['development'] != 1) {


            //对字符串进行解密
$resp = $this->account->local_decryptMsg($postStr);
} else {
$resp = $postStr;
}
exit($resp);
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值