package com.xiaopeng.trafficControl.utils; import cn.hutool.core.io.FileUtil; import cn.hutool.crypto.digest.MD5; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; /** * 交通部接口对接 */ @Slf4j @Component public class MinistryOfTransport { /** * 公司名称:广州易点智慧出行科技有限公司 * * 平台简称:“有鹏出行” * 标识:XPQCB67N * key:gEhROt7lg4DEBanR * * 对接ip:127.0.0.1,125.71.236.64,47.98.173.145,116.62.136.48,39.108.249.22,47.105.208.135,47.112.126.81,114.55.179.11,39.170.77.50,120.26.242.215 * * 接口地址:https://wycapi.jtj.gz.gov.cn/api/app/common/binapi */ private final String companyId = "4401XPQCB67N";//公司标识 private final String platform = "XPQC"; private final String key = "gEhROt7lg4DEBanR"; private final String url = "https://wycapi.jtj.gz.gov.cn/api/app/common/binapi"; @Value("${xp.file.path}") private String filePath; /** * 获取token * @return */ public String getToken(){ //通过上传文件的方式获取token String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); String fileName = platform + "_TOKEN_ACCESS_REQ_" + format + ".json"; File file = FileUtil.file(filePath + fileName); if(!file.exists()){ file.getParentFile().mkdirs(); try { file.createNewFile(); } catch (IOException e) { throw new RuntimeException(e); } file.setReadable(true, false);//设置读取权限 file.setWritable(true, false);//设置写入权限 } JSONObject body = new JSONObject(); JSONArray items = new JSONArray(); JSONObject jsonObject = new JSONObject(); jsonObject.put("platform", platform); jsonObject.put("key", key); items.add(jsonObject); body.put("items", items); log.info("获取token请求参数 {}", body.toJSONString()); file = FileUtil.writeUtf8String(body.toJSONString(), file); String md5 = MD5.create().digestHex(file); HttpRequest post = HttpUtil.createPost(url); post.contentType("multipart/form-data;boundary=inputstream"); post.header("binfile-md5", md5); post.header("binfile-gzip", "false"); post.header("binfile-auth", "5cd4be8cf03842a6b4c3246011e3482e"); post.form("binFile", file); post.form("filename", fileName); HttpResponse execute = post.execute(); if(!execute.isOk()){ log.info("获取token失败:{}", execute.body()); return execute.body(); } InputStream inputStream = execute.bodyStream(); //读取inputStream流转成file文件 File resultFile = FileUtil.file(filePath + "token_response_" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")) + ".json"); resultFile.getParentFile().mkdirs(); FileUtil.writeFromStream(inputStream, resultFile); String responseContent = FileUtil.readUtf8String(resultFile); log.info("获取token成功 {}", responseContent); return responseContent; } }