Http带消息头两种请求办法

        API接口最近经常碰到,协调几个乙方来回对接,把我折腾晕了,索性自己写一个小的工具,导入历史数据。

获取平台免登录token

接口说明

URL Path:gateweb/bigm-dm/openApi/ologin/openLogin

说明:第三方免登录跳转到大会员平台前,要先根据用户的手机号获取对应的大会员平台的授权Token  :第三方免登录,统一用一个固定账号(生产环境用户管理中配置,提供给第三方)。关掉大会员系统的账号单点登录,保证多点登录时不冲突。

请求头HEADER

参数名称

参数说明

参数类型

是否必须

备注

appId

接入方

String

线下给

timeStamp

调起时间

String

如2022-01-01 11:11:11

sign

签名

String

通过入参结构获取签名

请求报文

格式:JSON

参数名称

参数说明

参数类型

是否必须

长度

备注

account

平台用户账户

String

070301

 

返回报文

格式:JSON

参数名称

参数说明

参数类型

是否必须

长度

备注

token

返回登录token  

String

有效用户时返回

 返回示例:

 

 

单个会员注册接口 

接口说明

API名称:gateweb/bigm-member/openApi/memInfo/regist

接口名:单个会员注册接口

说明: 用户在第三方系统中注册后,同时调大会员接口,该接口需要配置appid等数据,进行授权(会员在大会员侧注销过账号之后,第三方接口同步注册会员数据会失败,“注册失败,会员已注销!”)

请求头HEADER

参数名称

参数说明

参数类型

是否必须

备注

appId

接入方

String

线下给

timeStamp

调起时间

String

如2022-01-01 11:11:11

sign

签名

String

通过入参结构获取签名

token

登录token  

String

平台账户获取的token

请求报文

格式:JSON

参数名称

参数说明

参数类型

是否必须

长度

备注

mobileNo

手机号码

String

thirdUserId

第三方平台用户ID

String

sex

会员性别

Integer

0-未知 1-男 2-女

province

String

city

String

area

String

address

详细住址

String

company

工作单位

String

idType

证件类型

Integer

1:身份证;

只能存这一个证件类型 

idNo

证件号码

String

birthday

生日

String

yyyy-MM-dd

realName

会员姓名

String

labelCodes

会员标签

List<String>

code编码列表

branCode

机构编码

String

不填默认请求用户机构

 

返回报文

格式:JSON

参数名称

参数说明

参数类型

是否必须

长度

备注

model

操作成功

 True 成功

 返回示例

{

    "model": true,

    "success": true,

    "emptyModel": false

}

获取token代码

@Overridepublic String getToken(){String token = "";SignDemoVo vo = new SignDemoVo();vo.setAccount( "zcl");String appKey = "37A64759A88374BF8B14F29CE279D598F0B092AC56A34DF173F4D77ACA3CB9D1";String js = JSON.toJSONString(vo);String sign = signWithSha256(js, appKey);String appId = "wxa1c28fd0e15047";System.out.println(" appId:" +appId +  " timeStamp:" + DateUtils.getTime() + " sign:"+  sign +  "   data:" + js);String apiUrl = "https://dhys.youhubei.cn/gateweb/bigm-dm/openApi/ologin/openLogin";String res = HttpUtils.sendPostWithHeard(apiUrl,appId,sign,"","account=zcl");token = JSONObject.parseObject(JSONObject.parseObject(res).getString("model")).getString("token");return token;}

调用网络请求第一个方式: 

public static String sendPostWithHeard(String url, String appId,String sign,String token,String param){PrintWriter out = null;BufferedReader in = null;StringBuilder result = new StringBuilder();try{log.info("sendPost - {}", url);URL realUrl = new URL(url);URLConnection conn = realUrl.openConnection();conn.setRequestProperty("accept", "application/json");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");conn.setRequestProperty("Accept-Charset", "utf-8");conn.setRequestProperty("contentType", "utf-8");conn.setRequestProperty("appId",appId);conn.setRequestProperty("timeStamp",DateUtils.getTime());conn.setRequestProperty("sign",sign);if (StringUtils.isNotEmpty(token)){conn.setRequestProperty("token",token);log.info("token - {}", token);}conn.setDoOutput(true);conn.setDoInput(true);out = new PrintWriter(conn.getOutputStream());out.print(param);out.flush();in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));String line;while ((line = in.readLine()) != null){result.append(line);}log.info("recv - {}", result);}catch (ConnectException e){log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);}catch (SocketTimeoutException e){log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);}catch (IOException e){log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);}catch (Exception e){log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);}finally{try{if (out != null){out.close();}if (in != null){in.close();}}catch (IOException ex){log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);}}return result.toString();}

通用函数

@Datapublic class SignDemoVo {private String account;public void setAccount(String account) {this.account =account;}}public static String signWithSha256(String paramJson, String shaKey) {String signPreStr = buildSignStr(paramJson);return signWithSha256(signPreStr, shaKey, "UTF-8");}public static String signWithSha256(String originStr, String shaKey, String charset) {String text = originStr + shaKey;return DigestUtils.sha256Hex(getContentBytes(text, charset)).toUpperCase();}public static byte[] getContentBytes(String content, String charset) {if (charset == null || "".equals(charset)) {return content.getBytes();}try {return content.getBytes(charset);} catch (UnsupportedEncodingException e) {throw new RuntimeException("MD5签名过程中出现错误,指定的编码集不对,您目前指定的编码集是:"+ charset);}}public static String buildSignStr(String paramJson) {if (StringUtils.isBlank(paramJson)) {return "";}com.alibaba.fastjson.JSONObject json = com.alibaba.fastjson.JSONObject.parseObject(paramJson, Feature.OrderedField);//Feature.OrderedField实现解析后保存不乱序Map<String, Object> params = jsonToMap(json);StringBuilder buf = new StringBuilder();Iterator<String> keys = params.keySet().iterator();while (keys.hasNext()) {String key = keys.next();Object value = params.get(key);// 判断传入kay-value中是否含有""或nullif (value != null && value.toString().length() != 0) {//当JSON字符串存在null时,不将该kay-value放入Map中,即显示的结果不包括该kay-valuebuf.append(key + "=" + value + "&");}}String sfStr = buf.toString();if (sfStr.length() > 1) {return sfStr.substring(0, sfStr.length() - 1);}return sfStr;}/*** JSON转顺序排序的Map** @return 响应的TreeMap*/public static Map<String, Object> jsonToMap(com.alibaba.fastjson.JSONObject json) {Map<String, Object> treeMap = new TreeMap();Iterator<String> keys = json.keySet().iterator();while (keys.hasNext()) {String key = keys.next();Object value = json.get(key);// value为空丢弃if (value == null || StringUtils.isBlank(value.toString())) {continue;}// 判断是否为JSONArray(json数组)if (value instanceof JSONArray) {JSONArray jsonArray = (JSONArray) value;List<Object> arrayList = new ArrayList<>();for (Object object : jsonArray) {// 判断是否为JSONObject,如果是 转化成TreeMapif (object instanceof com.alibaba.fastjson.JSONObject) {object = jsonToMap((com.alibaba.fastjson.JSONObject) object);}arrayList.add(object);}treeMap.put(key, arrayList);} else {//判断该JSON中是否嵌套JSONboolean flag = isJSONValid(value.toString());if (flag) {//若嵌套json了,通过递归再对嵌套的json(即子json)进行排序value = jsonToMap((com.alibaba.fastjson.JSONObject) value);}// 其他基础类型直接放入treeMap// JSONObject可进行再次解析转换treeMap.put(key, value);}}return treeMap;}/*** 校验是否是JSON字符串** @param json 传入数据* @return 是JSON返回true, 否则false*/public final static boolean isJSONValid(String json) {try {com.alibaba.fastjson.JSONObject jo = com.alibaba.fastjson.JSONObject.parseObject(json);if (jo != null) {return true;}} catch (JSONException ex) {return false;}return false;}

第二种调用http+heard的方式(JSON)

 public int synchronizeHistoricalData(String token,TRegistrationPersonVo sendData){int ret = 1;String appKey = "37A64759A88374BF8B14F29CE279D598F0B092AC56A34DF173F4D77ACA3CB9D1";String js = JSON.toJSONString(sendData);String sign = signWithSha256(js, appKey);String appId = "wxa1c28fd0e15047";System.out.println(" appId:" +appId +  " timeStamp:" + DateUtils.getTime() + " sign:"+  sign);System.out.println(" token:" + token);System.out.println(" data:" + js);String apiUrlregist = "https://dhys.youhubei.cn/gateweb/bigm-member/openApi/memInfo/regist";String dataRes = sendJsonRequest(apiUrlregist,appId,sign,token,js);ret = JSONObject.parseObject(dataRes).getInteger("success");return ret;}

网络请求核心函数

/*** 发送 JSON 格式的 POST 请求并获取响应数据** @param stringurl       目标 URL* @param requestParameter JSON 格式的请求参数字符串* @return 响应数据字符串*/public static String sendJsonRequest(String stringurl, String appId,String sign,String token,String requestParameter) {try {// 创建 URL 对象URL url = new URL(stringurl);// 打开 HTTP 连接HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 设置请求方法为 POSTconn.setRequestMethod("POST");// 设置请求头部为 JSON 格式conn.setRequestProperty("Content-Type", "application/json");conn.setRequestProperty("appId",appId);conn.setRequestProperty("timeStamp",DateUtils.getTime());conn.setRequestProperty("sign",sign);if (StringUtils.isNotEmpty(token)){conn.setRequestProperty("token",token);System.out.println("token - {}"+ token);}// 允许向服务器发送数据conn.setDoOutput(true);// 向服务器发送 JSON 数据OutputStream outputStream = conn.getOutputStream();outputStream.write(requestParameter.getBytes());outputStream.flush();// 获取响应结果int responseCode = conn.getResponseCode();BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;StringBuffer response = new StringBuffer();// 读取响应数据while ((line = reader.readLine()) != null) {response.append(line);}reader.close();return response.toString();} catch (Exception e) {e.printStackTrace();}return null;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/53779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java架构师实战篇Redis亿级数据统计方案

目录 1 Redis亿个keys数据统计方案2 Redis聚合统计(SUNIONSTORE)3 Redis排序统计(LRANGE)4 值状态统计(bitmap)4.1 位图简介4.2 应用场景4.3 常用的命令4 基数统计(SADD)5 总结想学习架构师构建流程请跳转:Java架构师系统架构设计 1 Redis亿个keys数据统计方案 在 Web 和移动…

.NET 一款用于解密web.config配置的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

SpringBoot2:请求处理原理分析-接口参数解析原理(argumentResolvers)

一、知识回顾 我们知道&#xff0c;接口的参数&#xff0c;一般都要配上注解来一起使用。 不同的参数注解&#xff0c;决定了传参的方式不同。 为什么会这样&#xff1f; 如果让你设计接口参数解析&#xff0c;你会怎么做&#xff1f; 首先&#xff0c;我们知道方法参数是形…

机器学习之监督学习(三)神经网络

机器学习之监督学习&#xff08;三&#xff09;神经网络基础 0. 文章传送1. 深度学习 Deep Learning深度学习的关键特点深度学习VS传统机器学习 2. 生物神经网络 Biological Neural Network3. 神经网络模型基本结构模块一&#xff1a;TensorFlow搭建神经网络 4. 反向传播梯度下…

开源的 Windows 12 网页体验版!精美的 UI 设计、丰富流畅的动画

大家周二好呀&#xff01;博主今天给小伙伴们分享一款炫酷的 Windows 12 体验版&#xff0c;网页效果拉满&#xff0c;非常值得我们去尝试&#xff01; 如果你对未来的Windows操作系统充满期待&#xff0c;那么这款开源的Windows 12 网页体验版绝对不容错过&#xff01;这不仅…

consul配置ACL安全认证

文章目录 前言一、漏洞详情二、漏洞处理1.ACL相关介绍2.开启ACL3.创建令牌4.修改acl文件5.修改单节点consul启动配置文件6.重启consul 三、漏洞处理结果验证 前言 因为现阶段属于护网期,因此公司对服务器、业务的安全都很关注,只要再次期间被漏扫出来的漏洞&#xff0c;都需要…

tomcat是不是已经被Springboot集成了?

Tomcat 确实已经被 Spring Boot 集成。Spring Boot 通过其独特的“starter”模块&#xff08;如spring-boot-starter-web&#xff09;实现了对Tomcat的自动配置。当在Spring Boot项目中引入这个starter时&#xff0c;会自动引入相关的依赖&#xff0c;包括tomcat-embed-core、t…

C语言补习课——文件篇

来源&#xff1a;黑马程序员 第157讲 C语言操作文件概述 读取文件&#xff1a;输入流 写文件&#xff1a;输出流 读写的方向判断取决与参照&#xff0c;一般我们站在程序的角度判断读写方向。 第158讲 路径 基本概念 路径就是指文件在电脑中的位置&#xff0c;eg&#xf…

阿里旗下土耳其电商Trendyol计划进军欧洲市场

阿里旗下土耳其电商Trendyol计划进军欧洲市场 近年来&#xff0c;阿里巴巴集团在全球电商领域的布局持续深化&#xff0c;其旗下土耳其电商巨头Trendyol更是凭借其出色的市场表现和强劲的增长势头&#xff0c;成为了备受瞩目的焦点。近日&#xff0c;Trendyol宣布了一项重要战…

Java初步

背景 名字 Oak&#xff08;橡树&#xff09;改到一个岛&#xff08;疑似盛产咖啡&#xff09; Java之父 詹姆斯高斯林&#xff08;James Gosling&#xff09; sun公司研发 现在属于Oracle公司 把它称为甲骨文公司 应用 企业级应用开发 重点学习JavaSE&#xff08;Standa…

线性代数 第六讲 特征值和特征向量_相似对角化_实对称矩阵_重点题型总结详细解析

文章目录 1.特征值和特征向量1.1 特征值和特征向量的定义1.2 特征值和特征向量的求法1.3 特征值特征向量的主要结论 2.相似2.1 相似的定义2.2 相似的性质2.3 相似的结论 3.相似对角化4.实对称矩阵4.1 实对称矩阵的基本性质4.2 施密特正交化 5.重难点题型总结5.1 判断矩阵能否相…

JavaScript高级——函数中的this

1、this是什么&#xff1f; ① 任何函数本质上都是通过某个对象来调用的&#xff0c;如果没有直接指定就是 window 。 ② 所有函数内部都有一个变量 this 。 ③ 它的值是调用函数的当前对象。 2、如何确定 this 的值&#xff1f; ① test&#xff08;&#xff09;&#xff…

如何进行DAP-seq的数据挖掘,筛选验证位点

从样本准备到寄送公司&#xff0c;每一天都在“祈祷”有个心仪的分析结果&#xff0c;终于在这天随着邮件提示音的响起&#xff0c;收到了分析结果...... 分析前工作 爱基在进行数据分析之前&#xff0c;会有两次质控报告反馈给老师们。第一个&#xff0c;基因组DNA的提取质控…

springBoot 集成https

springBoot 集成https 1、springBoot默认的证书格式 pring Boot 需要 .p12 或 .jks 格式的证书。如果你只有 .pem 和 .key 文件&#xff0c;可以使用 openssl 工具将它们转换成 .p12 文件 2、转换.p12 我的证书文件如下&#xff0c;需要转换 2.1 下载openssl https://slpr…

苹果手机铃声怎么设置自己的歌?3个方法自定义手机铃声

苹果手机内部的手机铃声库只有固定的几首铃声&#xff0c;且都是纯音乐&#xff0c;比较单调&#xff0c;并不是所有用户都喜欢这些铃声。那么&#xff0c;苹果手机铃声怎么设置自己的歌呢&#xff1f;小编这里有3个方法&#xff0c;可以教大家如何将手机铃声设置成自己喜欢的歌…

Java 入门指南:Java 并发编程 —— 同步工具类 Semephore(信号量)

文章目录 同步工具类Semephore核心功能限制并发访问量公平与非公平策略灵活性与适应性 常用方法使用示例 同步工具类 JUC&#xff08;Java.util.concurrent&#xff09;是 Java 提供的用于并发编程的工具类库&#xff0c;其中包含了一些通信工具类&#xff0c;用于在多个线程之…

C语言-综合案例:通讯录

传送门&#xff1a;C语言-第九章-加餐&#xff1a;文件位置指示器与二进制读写 目录 第一节&#xff1a;思路整理 第二节&#xff1a;代码编写 2-1.通讯录初始化 2-2.功能选择 2-3.增加 和 扩容 2-4.查看 2-5.查找 2-6.删除 2-7.修改 2-8.退出 第三节&#xff1a;测试 下期…

【单片机开发】单片机常用开发工具

【前言】 在嵌入式系统领域&#xff0c;单片机&#xff08;Microcontroller, MCU&#xff09;作为核心组件&#xff0c;广泛应用于智能家居、工业控制、汽车电子等众多领域。而单片机开发工具&#xff0c;则是开发者们实现创意、解决问题的重要助手。本文主要讲述目前主流的单…

港科夜闻 | 叶玉如校长出席2024科技+新质生产力高峰论坛发表专题演讲,贡献国家科技强国战略...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、叶玉如校长出席“2024科技新质生产力高峰论坛”&#xff0c;做了题为“三个创新&#xff1a;培育和发展新质生产力、贡献国家科技强国战略”的主题演讲。该论坛于9月2日在香港召开。论坛围绕夯实基础科研、推动源头创新、…

axure判断

在auxre中我们也可以实现判断的功能&#xff0c;当目标等于什么内容时则执行下方的功能。 一、判断输入框中是否有值 画布添加一个输入框、一个文本标签删除其中内容&#xff0c;添加一个按钮&#xff0c;输入框命名为【文本显示】文本标签命名为【提示】 给按钮新增一个交互…