首页 > 其他分享 >对于第三方接口调用的模板

对于第三方接口调用的模板

时间:2023-12-29 18:13:26浏览次数:26  
标签:bodyjson 调用 String 接口 httppost put new 第三方 模板

1.需要一个基础的Controller,用于读取配置文件里面的信息,比如第三方地址等,还有生成一个HttpPost,用于调用

public class BaseController {
  /*
   *  appId(对应第三方系统的appId)
   */
 @Value(otherSystem.appId)
 protected string appId;

  /*
   *  signId(对应第三方系统的signId
   */
@Value(otherSystem.signId)
 protected string signId

  /*
   *  url(对应第三方系统的url)
   */
@Value(otherSystem.url)
 protected string url;

protected  HttpPost setHeader(String url,String body,String bizMethod) throws MalformedURLException{
   //请求路径
   HttpPost   httpPost  = new HttpPost(url);
   //报文头
   httppost.addHeader("Content-Type", "application/json;charset=utf-8");
   httppost.addHeader("bizMethod", bizMethod);
   //需签名加密
   httppost.addHeader("appId", appId) ;
   //加密
   httppost.addHeader("signIdn, signId);
   httppost.addBeader("signMethod","sm3");
   //签名方式
   String reqTs = new SimpleDateFormat ("yyyyMddHHmmssSSS") .format(new Date ());
   httppost.addeadex("reqIs",regIs);
   //请求方发送报文的时间,unix 时间戳 
   //加密
   String logId = "m3pop" + new SimpleDateFormat ("yyMMddHHmmss5SS").format (new Date());
   httppost.addHeadex("requestId", logId);
   //请求唯一标识加
   Stxing origsign = "bizMethod=" + bizMethod + "&" + "appId=" + appld + "&" + "reqTs=" + reqTs + "&" + "requestId" + logId + "&"
   //sha256计算摘要并转换为16进制
   String sign = getSM3Stx(origSign);
   httppost.addHeadex("sign", sign);
   return  httppost;
}

protected static String getSM3Str(String str) {
      if (StringUtils.isBlank(str)){
          return null;   
         }
     String encdestr = "";
    try{
       bytel] bytes = str.getBytes("UTF-8");
       encdeStx = Hex.encodeHexString(SM3Util,sm3 (bytes));
     }catch(UnsupportedEncodingException ex){
      ex.printstackTrace();
     }
     return  encdestr ;
}

2.在配置文件里面添加第三方系统的相关配置

#第三方平台
otherSystem:
  appId: xxx
  signId: xxx
  url: xxx

需要注意的是,这些信息不能写死,等写成配置,还有一点就是需要打通你的服务器和第三方之间的网络

3.有了生成HttpPost的基础类之后,我们可以写一个业务类去继承它,在里面去封装一些需要调用接口用到的信息

@Api("第三方平台品牌业务”)
@Slf4j
@RestController
@RequestMapping("/corporater")
public class BrandManageController extends BaseController {
     
/*
 * 品牌列表查询
 */
@ApiOperation(value ="品牌列表查询)
@PostMapping("/brandlist")
public DataResponse<BrandInfoVo> queryBrandList(@RequestBody BrandListParam param) {
DataResponse<BrandInfoVo> dataResponse=new DataResponse<>();
String resultData = null;
BrandInfovo brandInfoVo=new BrandInfovo();
try (CloseableHttpClient httpclient = HttpClients.createDefault()){
   //封装请求信息
   JSONObject bodyjson = new JSONObject(); 
   bodyjson .put (uversion""1.0.0");
   bodyjson .put ("pageNum",param .getPageNum());
   bodyjson.put ("brandId", param.getBrandId());
   bodyjson.put("brandlias", param.getBrandAlias());
   bodyison.put("srcBrandId", param.getSrcBrandId());
   bodyjson.put("bussCatId",param,getBussCat2Id());
   bodyjson.put("bussCatIdGroup", param,getBussCatiId()):
   bodyison .put ("brandNm", param,getBrandNm());
   bodyjson,put("procSt","8");
   String body = bodyjson.tostring();
   
   HttpPost httppost = 
   setHeader(ssourl+"/corporate/brandlist",body,"corporate.brandlist");
   httppost.setEntity(new StringEntity(body,"UTF-8"));
   log.info("第三方品牌列表查询请求报文:{}",body):
   CloseableHttpResponse response = httpclient.execute (httppost);
   resultData = EntityUtils.toString(response.getEntity());
   log.info("第三方品牌列表查询返回数据:()",resultData);
   brandInfoVo = JSON.parseObject (resultData,BrandInfoVo.class);
   }catch(Exception e){
    log.error(e.getMessage(), e);
    log.error("品牌列表查询:(),e.getMessage());
    return new DataResponse<>(ExceptionDefinition.FuseError, brandInfoVo);
    }
    return new DataResponse<>(ExceptionDefinition.OK,brandInfoVo);
}

注意:要在调用接口前后加上日志,以便后续出问题好排查

标签:bodyjson,调用,String,接口,httppost,put,new,第三方,模板
From: https://www.cnblogs.com/ForeverLoveByMe/p/17935464.html

相关文章

  • 导入模板制作 esaypoi 多sheet页导出
    应用场景平日项目里,常常会遇到关于导入导出的功能,同时导入功能一般要制作一个Excel模板,用来提供给用户进行导入。模板里有些字段是只能填入字典值,所以要提供一个字典值的展示来规范用户的填入的信息。本篇内容就是制作一个多sheet页的Excel导入模板(一个用来给导入,一个用来规范填入......
  • 使用Jenkins和单个模板部署多个Kubernetes组件
    前言在持续集成和部署中,我们通常需要部署多个实例或组件到Kubernetes集群中。通过Jenkins的管道脚本,我们可以自动化这个过程。在本文中,我将演示如何使用JenkinsPipeline及单个YAML模板文件(.tpl)来部署多个类似的Kubernetes组件,而不需要为每个组件提供单独的模板文件。问题背景参......
  • 21 读写I2C接口EEPROM实验
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!1概述前面的课程中,我们学习了I2C总线协议,以及介绍了米联客I2CMaster控制器的实现原理、内部状态机、I2C时......
  • 22 读写I2C接口的RTC时钟芯片
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!1概述    本节课继续利用I2C总线控制器实现对RTC时钟芯片,DS1337的读写访问,进一步验证我们设计的i2c控制......
  • freemarker 引擎模板保留两位小数,去尾法不进行四舍五入的方法
    ${4511.25?string("#.#")} 这个表达式的结果为4511.2;并不是传统的四舍五入规则;正确的应该是下面这个表达式:${4511.25?string("#.#;;roundingMode=halfUp")}这个表达式的结果为4511.3。而${4511.35?string("#.#")}  这个表达式的结果是4511.4FreeMarker默认的规则是5可能......
  • flask 数据库初体验 只接受post方法 不接受直接访问 在 Flask 的应用上下文 app_conte
    fromflaskimportFlask,render_template,requestfromflask_sqlalchemyimportSQLAlchemyapp=Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///my_database.db'db=SQLAlchemy(app)classUser(db.Model):id=db......
  • 函数式接口@FunctionInterface
    有以下特点:1.该注解只能标记在“有且仅有一个抽象方法”的接口上。2.JDK8接口中的静态方法和默认方法,都不算事抽象方法。3.接口默认继承java.lang.Object,所以如果接口显示声明覆盖了Object中方法,那么也不算抽象方法。4.该注解不是必须的,如果一个接口符合“函数式接口”定义,那么加不......
  • 常用代码模板自用
    导入库(用于深度学习)importosimporttimefromdatetimeimporttimedeltaimportjsonimportyamlfromtqdmimporttqdmimportnumpyasnpimporttorchimporttorch.nnasnnimporttorch.nn.functionalasFfromtorch.utils.dataimportDataLoader 绘图(用于......
  • Taurus .Net Core 微服务开源框架:Admin 插件【4-8】 - 配置管理-Mvc【Plugin-Limit 接
    前言:继上篇:Taurus.NetCore微服务开源框架:Admin插件【4-7】-配置管理-Mvc【Plugin-Metric接口调用次数统计】本篇继续介绍下一个内容:1、系统配置节点:Mvc- Plugin-Limit接口访问限制、IP限制、Ack限制:配置界面如下:限制目前提供以下三个类别的限制:1、Rate访......
  • 18 SPI接口ADC采集驱动设计
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!1概述一些低速高精度的ADC/DAC都具有SPI接口,SPI的速率最高可以到几百M,另外由于接口少硬件设计简单,通信时序......