- 源码: xhadmincn/FastMovieAI (Apache 2.0) - 二开: Docker部署, Swoole改Select, route.php修复, 补update/VERSION - vendor/示例资源已gitignore
58 lines
1.9 KiB
PHP
58 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace app\expose\utils\wechat;
|
|
|
|
use app\expose\utils\wechat\modules\Event;
|
|
use app\expose\utils\wechat\modules\Reply;
|
|
use support\Log;
|
|
|
|
class OfficialAccount
|
|
{
|
|
use Reply;
|
|
use Event;
|
|
public function handle($request, $config)
|
|
{
|
|
$data = $this->getData($request, $config);
|
|
if ($data['MsgType'] === 'event') {
|
|
return $this->handleEvent($data);
|
|
} else {
|
|
return $this->replyText($data, 'hello world');
|
|
}
|
|
}
|
|
public function checkSignature($request, $config)
|
|
{
|
|
$signature = $request->get("signature");
|
|
$timestamp = $request->get("timestamp");
|
|
$nonce = $request->get("nonce");
|
|
$token = $config['token'];
|
|
$tmpArr = [$token, $timestamp, $nonce];
|
|
sort($tmpArr, SORT_STRING);
|
|
$tmpStr = implode($tmpArr);
|
|
$tmpStr = sha1($tmpStr);
|
|
if ($tmpStr == $signature) {
|
|
return true;
|
|
}
|
|
throw new \Exception('signature error');
|
|
}
|
|
private function getData($request, $config)
|
|
{
|
|
$xml = $request->rawBody();
|
|
$json = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
|
|
$data = json_decode(json_encode($json), true);
|
|
if ($request->get('encrypt_type') === 'aes') {
|
|
$Encrypt = base64_decode($data['Encrypt']);
|
|
$aes_key = $config['aes_key'];
|
|
$aes_key = base64_decode($aes_key . '=');
|
|
$iv = substr($aes_key, 0, 16);
|
|
$xml = openssl_decrypt($Encrypt, 'aes-256-cbc', $aes_key, OPENSSL_RAW_DATA, $iv);
|
|
$filterHeader = substr($xml, 20);
|
|
$xml = preg_replace('/' . $config['app_id'] . '/', '', $filterHeader);
|
|
$json = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
|
|
$data = json_decode(json_encode($json), true);
|
|
return $data;
|
|
} else {
|
|
return $data;
|
|
}
|
|
}
|
|
}
|