| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- <?php
- // +----------------------------------------------------------------------
- // | likeshop100%开源免费商用商城系统
- // +----------------------------------------------------------------------
- // | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
- // | 开源版本可自由商用,可去除界面版权logo
- // | 商业版本务必购买商业授权,以免引起法律纠纷
- // | 禁止对系统程序代码以任何目的,任何形式的再发布
- // | gitee下载:https://gitee.com/likeshop_gitee
- // | github下载:https://github.com/likeshop-github
- // | 访问官网:https://www.likeshop.cn
- // | 访问社区:https://home.likeshop.cn
- // | 访问手册:http://doc.likeshop.cn
- // | 微信公众号:likeshop技术社区
- // | likeshop团队 版权所有 拥有最终解释权
- // +----------------------------------------------------------------------
- // | author: likeshopTeam
- // +----------------------------------------------------------------------
- namespace app\openapi\http\middleware;
- use app\common\service\JsonService;
- use app\openapi\service\OpenApiService;
- /**
- * 加密验证中间件
- * Class EncryptMiddleware
- * @package app\openapi\http\middleware
- */
- class EncryptMiddleware
- {
- /**
- * 加密验证处理
- * @param $request
- * @param \Closure $next
- * @return mixed
- */
- public function handle($request, \Closure $next)
- {
- // 获取请求头中的认证信息
- $appId = $request->header('AppId');
- $timestamp = $request->header('Timestamp');
- $nonce = $request->header('Nonce');
- $signature = $request->header('Signature');
- // 验证必要参数
- if (empty($appId) || empty($timestamp) || empty($nonce) || empty($signature)) {
- return JsonService::fail('缺少必要的认证参数', [], 401);
- }
- // // 验证时间戳(防重放攻击,5分钟内有效)
- if (abs(time() - $timestamp) > 300) {
- return JsonService::fail('请求时间戳无效', [], 401);
- }
- // 验证应用信息
- $appInfo = OpenApiService::getAppInfo($appId);
- if (empty($appInfo)) {
- return JsonService::fail('无效的应用ID', [], 401);
- }
- if ($appInfo['status'] != 1) {
- return JsonService::fail('应用已被禁用', [], 401);
- }
- // 验证签名
- $params = $request->param();
- outFileLog($params,'sign','$params');
- outFileLog($appInfo['app_secret'],'sign','app_secret');
- outFileLog($timestamp,'sign','$timestamp');
- outFileLog($nonce,'sign','$nonce');
- if (!OpenApiService::verifySignature($params, $appInfo['app_secret'], $timestamp, $nonce, $signature)) {
- return JsonService::fail('签名验证失败', [], 401);
- }
- //
- // 验证随机数(防重复攻击)
- if (!OpenApiService::verifyNonce($appId, $nonce, $timestamp)) {
- return JsonService::fail('重复的请求', [], 401);
- }
- // 将应用信息传递给控制器
- $request->appInfo = $appInfo;
- return $next($request);
- }
- }
|