self::BuildAuthorization('POST', "/jeecg-boot/hospital/openapi/archive/list", $body_str) ])->post($url, $data); if ($response->successful()) { // 处理成功的响应 $res_string = json_encode($response->json(), JSON_UNESCAPED_UNICODE); dd($res_string); $str_len = mb_strlen($res_string, 'utf-8'); $str_size = $str_len / 1024; $save_res = $res_string; if ($str_size > 10) $save_res = '{"data":"Row size too large"}'; self::$request->response_data = $save_res; self::$request->save(); } else { // 处理失败的响应 self::$request->response_data = "请求失败"; self::$request->save(); } } public static function RequestLog($url, $post_data, $mark, $code = 0) { self::CheckTableName(); foreach ($post_data as $key => $post_datum) { $str_len = mb_strlen(json_encode($post_datum, JSON_UNESCAPED_UNICODE), 'utf-8'); $str_size = $str_len / 1024; if ($str_size > 10) { $post_data["$key"] = 'Row size too large'; } } $post_data = json_encode($post_data, JSON_UNESCAPED_UNICODE); self::$request->code = $code; self::$request->mark = $mark; self::$request->post_data = $post_data == '[]' ? '{}' : $post_data; self::$request->request_url = $url; self::$request->save(); } public static function CheckTableName() { $table_name = 'zz_peis_log_' . date('ym'); $table_count = DB::select('select count(1) as c from information_schema.TABLES where table_schema = ? and table_name = ?', [env('DB_DATABASE'), $table_name])[0]; if ($table_count->c === 0) { Schema::create($table_name, function (Blueprint $table) { $table->id(); $table->string('code', 50)->index(); $table->string('mark', 50)->index(); $table->text('post_data'); $table->text('response_data')->nullable(); $table->string('request_url', 300); $table->timestamps(); }); } self::$request = new \App\Models\PEISLog(); self::$request->setTable($table_name); } //构造请求报文主体 首先将请求报文的参数名按照字典序进行排序,然后用&拼接各个参数 public static function buildSortedQueryString($params) { // 1. 按照参数名排序 ksort($params); // 2. 拼接参数名和参数值 $queryString = http_build_query($params, '', '&', PHP_QUERY_RFC3986); return $queryString; } //计算签名和 Authorization public static function BuildAuthorization($method, $url, $body) { $currentTimestamp = time(); $nonce = md5(uniqid(rand(), true)); $SignStr = $method . '\n' . $url . '\n' . $currentTimestamp . '\n' . $nonce . '\n' . $body . '\n'; // 生成 SHA-256 哈希值 // $hashedData = hash('sha256', $SignStr, true); // true 表示返回二进制格式 // 使用私钥进行 RSA 签名 openssl_sign($SignStr, $signature, self::$privateKey, OPENSSL_ALGO_SHA256); // 对签名结果进行 Base64 编码 $base64Signature = base64_encode($signature); $signInfo = 'appid=' . self::$appid . ',nonce=' . $nonce . ',timestamp=' . $currentTimestamp . ',signature=' . $base64Signature; return self::$signType . ' ' . $signInfo; } }