精华内容
下载资源
问答
  • java对接第三方接口

    千次阅读 2019-11-19 10:02:58
    1.准备与第三方接口对接的账号 配置到了Apollo上面 @Value("${taofake.appId}") private String appId; @Value("${taofake.url}") private String url; @Value("${taofake.appSecret}") private String app...

    1.准备与第三方接口对接的账号

    配置到了Apollo上面

    在这里插入图片描述

        @Value("${taofake.appId}")
    	private String appId;
    	@Value("${taofake.url}")
    	private String url;
    	@Value("${taofake.appSecret}")
    	private String appSecret;
    

    2.准备用于接受接口返回结果的实体类在这里插入图片描述

    3.准备发HTTP请求的工具类

    在这里插入图片描述
    在这里插入图片描述

    http工具类

    package cn.zhaocha.common.utils;
    
    import java.io.IOException;
    import java.util.Map;
    
    import cn.zhaocha.vo.BaseResponseVo;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.util.StringUtils;
    import lombok.extern.slf4j.Slf4j;
    import okhttp3.*;
    
    @Slf4j
    public class OKHttpUtil {
    
    	private static final Logger logger = LoggerFactory.getLogger(OKHttpUtil.class);
    
    	private static OkHttpClient client = getClient();
    
    	public static OkHttpClient getClient() {
    		if (client == null) {
    			client = genericClient();// 创建OkHttpClient对象
    		}
    		return client;
    	}
    
    	public static OkHttpClient genericClient() {
    		OkHttpClient httpClient = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
    			@Override
    			public Response intercept(Chain chain) throws IOException {
    				Request request = chain.request().newBuilder()
    						// .addHeader("Content-Type", "text/html; charset=gb2312")
    						// .addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
    						// .addHeader("Accept-Encoding", "gzip, deflate")
    						// .addHeader("Connection", "keep-alive")
    						// .addHeader("Accept", "*/*")
    						// .addHeader("User-Agent", "Mozilla/5.0 (Linux; Android 9.0.0; MI 6 Build/OPR1.170623.032; wv) AppleWebKit/537.36 (KHTML, like Gecko)
    						// Version/4.0 Chrome/62.0.3202.84 Mobile Safari/537.36/Android/globalscanner/4.00")
    						// .addHeader("Accept-Language", "zh-CN,en-US;q=0.9")
    						.addHeader("ApiVersion", "1.0")
    						// .addHeader("X-Requested-With", "com.globalscanner")
    						.build();
    				return chain.proceed(request);
    			}
    		}).build();
    
    		return httpClient;
    	}
    
    	public static String postAsync(String urlStr, Map<String, String> paramMap, Callback callback) {
    		return postAsync(urlStr, paramMap, callback, null);
    	}
    
    	public static String postAsync(String urlStr, Map<String, String> paramMap, Callback callback, Map<String, String> header) {
    		Request.Builder oneBuilder = getOneBuilder(urlStr, paramMap, header);
    		Request request = oneBuilder.build();
    		getClient().newCall(request).enqueue(callback);
    		return null;
    	}
    
    	private static Request.Builder getOneBuilder(String urlStr, Map<String, String> paramMap, Map<String, String> header) {
    		// 创建表单请求体
    		FormBody.Builder formBody = new FormBody.Builder();
    		for (String key : paramMap.keySet()) {
    			formBody.add(key, paramMap.get(key));
    		}
    		// 创建Request 对象。//传递请求体
    		Request.Builder postBuild = new Request.Builder().url(urlStr).post(formBody.build());
    		if (header != null && header.size() > 0) {
    			for (String key : header.keySet()) {
    				postBuild.addHeader(key, header.get(key));
    			}
    		}
    		return postBuild;
    	}
    
    	private static Request.Builder getGetBuilder(String urlStr, Map<String, String> paramMap, Map<String, String> header) {
    		HttpUrl.Builder urlBuilder = HttpUrl.parse(urlStr).newBuilder();
    		if (paramMap != null) {
    			for (String key : paramMap.keySet()) {
    				urlBuilder.setQueryParameter(key, paramMap.get(key));
    			}
    		}
    		Request.Builder requestBuilder = new Request.Builder().url(urlBuilder.build())
    				.headers(header == null ? new Headers.Builder().build() : Headers.of(header)).get();
    		return requestBuilder;
    	}
    
    	/**
    	 * 同步请求
    	 */
    	public static <T> BaseResponseVo<T> post(String urlStr, Map<String, String> paramMap, Class clazz) {
    		return post(urlStr, paramMap, null, clazz);
    	}
    
    	public static <T> BaseResponseVo<T> post(String urlStr, Map<String, String> paramMap, Map<String, String> header, Class clazz) {
    		Request.Builder oneBuilder = getOneBuilder(urlStr, paramMap, header);
    		Request request = oneBuilder.build();
    		try {
    			log.info("请求:OKHttpUtil-post-日志信息请求参数:" + urlStr + " " + paramMap.toString());
    			Response response = client.newCall(request).execute();
    			if (response != null && response.isSuccessful()) {
    				if (response.body() == null) {
    					log.info("响应:OKHttpUtil-post-日志信息响应结果未空:");
    					return BaseResponseVo.err("1", "response.body内容为空", null);
    				}
    				String content = response.body().string();
    				log.info("响应:OKHttpUtil-post-日志信息响应结果:" + content);
    				// String content ="{error_msg: \"成功\",error_code: 0}";
    				// String content = "{error_msg: \"失败\",error_code: 1}";
    
    				if (!StringUtils.isEmpty(content)) {
    					T obj = (T) FastJsonUtil.jsonToBean(content, clazz);
    					return BaseResponseVo.succ("0", "获取成功", obj);
    				}
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    			return BaseResponseVo.err(e.toString());
    		}
    		return BaseResponseVo.err("1", "获取失败", null);
    	}
    
    	public static <T> BaseResponseVo<T> get(String urlStr, Map<String, String> paramMap, Map<String, String> header, Class clazz) {
    		Request.Builder oneBuilder = getGetBuilder(urlStr, paramMap, header);
    		Request request = oneBuilder.build();
    		try {
    			log.info("请求:OKHttpUtil-post-日志信息请求参数:" + urlStr + " " + paramMap.toString());
    			Response response = client.newCall(request).execute();
    			if (response != null && response.isSuccessful()) {
    				if (response.body() == null) {
    					log.info("响应:OKHttpUtil-get-日志信息响应结果未空:");
    					return BaseResponseVo.err("1", "response.body内容为空", null);
    				}
    				String content = response.body().string();
    				log.info("响应:OKHttpUtil-get-日志信息响应结果:" + content);
    				if (!StringUtils.isEmpty(content)) {
    					T obj = (T) FastJsonUtil.jsonToBean(content, clazz);
    					return BaseResponseVo.succ("0", "获取成功", obj);
    				}
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    			return BaseResponseVo.err(e.toString());
    		}
    		return BaseResponseVo.err("1", "获取失败", null);
    	}
    }
    
    

    4.调用第三方接口

    黄色线表示访问第三方接口

    在这里插入图片描述

    现在我们可以来测试一下了

    在这里插入图片描述

    与第三方接口对接就完成了
    展开全文
  • 主要介绍了Java调用第三方接口示范的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 对接第三方接口–使用post请求发送json数据实习4个多月,终于转正!终于可以安心好好上班,好好学习!第一篇播客记录下工作中的中的小知识点。本文记录的内容如下:1.使用HttpClient相关类,包括PostMethod,Request...

    对接第三方接口–使用post请求发送json数据

    实习4个多月,终于转正!终于可以安心好好上班,好好学习!第一篇播客记录下工作中的中的小知识点。

    本文记录的内容如下:

    1.使用HttpClient相关类,包括PostMethod,RequestEntity,StringRequestEntity等

    2.实现用post请求方式发送json数据

    第三方接口字段构建成model

    将第三方提供的接口文档字段构建成model。

    public class A{

    private String sn;

    private String host;

    private String port;

    ......

    public String getHost() {return host;}

    public void setHost(String host) {this.host = host;}

    ......

    }

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    Java对象

    public class B{

    private String id;

    private String ip;

    private String port;

    ......

    ......

    }

    1

    2

    3

    4

    5

    6

    7

    发送请求

    public class APITest {

    //这里是日志

    private static ....

    /**

    * api_url 请求路径 ,换成自己的路径

    */

    private String apiUrl = MapCache.getConfigVal("api_url");

    /**

    * http客户端

    */

    private HttpClient client = new HttpClient();

    /**

    * 将告警信息发送到百信API

    *

    * @param notice

    */

    public void sendNotice(B b) {

    //java对象封装成第三方类

    if (b != null) {

    A a = new A();

    a.setHost(b.getIp);

    ...

    send(a);

    }

    }

    /**

    * post请求发送json格式的数据至API

    *

    * @param A

    */

    public void send(A a) {

    if (this.apiUrl == null) {

    this.apiUrl = "http://xxx...";

    }

    if (this.apiUrl != null) {

    PostMethod postMethod = new PostMethod(this.apiUrl);

    Gson gson = new Gson();

    String data = gson.toJson(a);

    try {

    RequestEntity requestEntity = new StringRequestEntity(data.toString(), "application/json", "utf-8");

    postMethod.setRequestEntity(requestEntity);

    } catch (UnsupportedEncodingException e) {

    log.error("Java Object To JSON Error: ", e);

    }

    try {

    int httpCode = client.executeMethod(postMethod);

    if (httpCode == 200) {

    sendInfoLog.info("发送到api成功:" + data.toString());

    } else {

    sendInfoLog.info("发送到api失败:" + data.toString());

    }

    } catch (IOException e) {

    this.log.error("发送api post请求失败:", e);

    } finally {

    postMethod.releaseConnection();

    }

    }

    }

    }

    展开全文
  • 分页取第三方接口判断最后一页技巧 1、当前取到的条数是否少于每页条数。 2、如果有总条数,判断pageNo*pageSize是否大于总条数,如果是则为最后一页。 同步第三方接口数据注意 1、注意接口访问次数限制,必要时...

    一个List对象列表根据Date逆序排序

    直接采用sort方法,传的comparable对象用lambda表达式代替

    list.sort(((o1, o2) -> {
    			Date date1 = (Date) o1.get("createTime");
    			Date date2 = (Date) o2.get("createTime");
    			return date1.compareTo(date2) > -1 ? -1 : 1;
    		}));
    

    compareTo方法意思是,左边比右边小返回-1,相等返回0,更大返回1。
    date1比date2小(距离当前时间远)返回-1,现在用三目运算反过来返回出去。

    分页取第三方接口判断最后一页技巧

    1、当前取到的条数是否少于每页条数。
    2、如果有总条数,判断pageNo*pageSize是否大于总条数,如果是则为最后一页。

    同步第三方接口数据注意

    1、注意接口访问次数限制,必要时线程取一次休眠一段时间。
    2、如果明确返回接口访问次数超限,则采取相应措施再次调用,比如按要求休眠1分钟等。不要因为超限而终止程序。

    取到数据之后需要注意

    1、务必仔细对response数据判空,必要时按错误码分别判空,谨防NPE异常。
    2、由于大多数接口都有accessToken的失效限制,所以,务必在每次接口返回后单独对token失效的错误码做判断,然后再调用一次刷新token的接口。注意取到最新accessToken之后,先保存数据库,再访问一次业务接口!

    存储到数据库之前

    1、必须验证合法性!
    2、必须考虑历史原因,新数据是否会对已有生产环境运行造成影响。

    展开全文
  • Java后台对接第三方接口发送数据GET\POST\PUT工具类使用案例 工具类 //////////////////////////////GET//////////////////////////// /** * get请求 * * @param url 目标地址 * @param param 参数 * @return ...

    Java后台对接第三方接口发送数据GET\POST\PUT\SOCKET

    工具类

    //GET//
    /**
         * get请求
         *
         * @param url   目标地址
         * @param param 参数
         * @return String 响应信息
         */
        public static String sendGet(String url, String param) {
            String result = "";
            BufferedReader in = null;
            try {
                String urlNameString = url + "?" + param;
                URL realUrl = new URL(urlNameString);
                // 打开和URL之间的连接
                URLConnection connection = realUrl.openConnection();
                // 设置通用的请求属性
                connection.setRequestProperty("accept", "*/*");
                connection.setRequestProperty("connection", "Keep-Alive");
                connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                // 建立连接
                connection.connect();
                // 定义 BufferedReader读取URL的响应
                in = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
            } catch (Exception e) {
                log.error("GET请求异常{}" , e.getMessage());
            } finally {
                try {
                    if (in != null) {
                        in.close();
                    }
                } catch (Exception e2) {
                    e2.getMessage();
                }
            }
            return result;
        }
    ////////////////////////////////POST///////////////////////////
        /**
         * 向指定 URL 发送POST方法的请求
         *
         * @param url   发送请求的 URL
         * @param param 请求参数,json
         * @return 响应结果
         */
        public static String sendPost(String url, String param) {
            OutputStreamWriter out = null;
            BufferedReader in = null;
            String result = "";
    
            //创建连接
            try {
                URL httpUrl = null; //HTTP URL类 用这个类来创建连接
                //创建URL
                httpUrl = new URL(url);
                //建立连接
                HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Content-Type", "application/json");
                conn.setRequestProperty("connection", "keep-alive");
                conn.setUseCaches(false);//缓存关闭
                conn.setInstanceFollowRedirects(true);
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.connect();
                //POST请求
                out = new OutputStreamWriter(conn.getOutputStream());
                out.write(param);
                out.flush();
                //读取响应
                in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
                in.close();
                // 断开连接
                conn.disconnect();
            } catch (Exception e) {
                log.error("发送 POST 请求出现异常!{}" , e.getMessage());
            }
            //使用finally块来关闭输出流、输入流
            finally {
                try {
                    if (out != null) {
                        out.close();
                    }
                    if (in != null) {
                        in.close();
                    }
                } catch (IOException ex) {
                    ex.getMessage();
                }
            }
    
            return result;
        }
    ///PUT/
        /**
         * put请求
         *
         * @param url 目标地址
         * @param map 参数
         * @return String响应结果
         */
        public static String sendPut(String url, Map map) {
            String encode = "utf-8";
            CloseableHttpClient closeableHttpClient = HttpClients.createDefault();
            HttpPut httpput = new HttpPut(url);
            httpput.setHeader("Accept", "*/*");
            httpput.setHeader("Accept-Encoding", "gzip, deflate");
            httpput.setHeader("Cache-Control", "no-cache");
            httpput.setHeader("Connection", "keep-alive");
            httpput.setHeader("Content-Type", "application/json;charset=UTF-8");
            //请求参数处理
            StringEntity stringEntity = new StringEntity(JSON.toJSONString(map), encode);
            httpput.setEntity(stringEntity);
            String content = null;
            CloseableHttpResponse httpResponse = null;
            try {
                //响应信息
                httpResponse = closeableHttpClient.execute(httpput);
                HttpEntity entity = httpResponse.getEntity();
                content = EntityUtils.toString(entity, encode);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    httpResponse.close();
                } catch (IOException e) {
                    e.getMessage();
                }
            }
            try {
                closeableHttpClient.close();  //关闭连接、释放资源
            } catch (IOException e) {
                e.getMessage();
            }
            return content;
        }
    /////////////////////////////socket////////////////////////
    	/**
         * socket发送数据
         *
         * @param text 数据
         * @param host 地址
         * @param port 端口
         */
        public static void forwardSocket(String text, String host, Integer port) {
            Socket socket = null;
            OutputStream outputStream = null;
            DataOutputStream dataOutputStream = null;
            try {
                socket = new Socket(host, port);
                outputStream = socket.getOutputStream();
                //把输出流封装在DataOutputStream中
                dataOutputStream = new DataOutputStream(outputStream);
                //使用writeUTF发送字符串
                dataOutputStream.writeUTF(text);
                dataOutputStream.close();
                socket.close();
            } catch (IOException e) {
                log.error("socket发送数据-失败{}", e.getMessage());
            } finally {
                try {
                    if (dataOutputStream != null) {
                        dataOutputStream.close();
                    }
                    if (socket != null) {
                        socket.close();
                    }
                } catch (Exception ex) {
                    log.error("error to socket close :{}", ex.getMessage());
                }
            }
        }    
    

    使用案例

    get就不多说了
    post请求

    	/**
         * 上传信息
         */
        @RequestMapping(value = "/uploadEmp", method = RequestMethod.POST)
        @ResponseBody
        public JsonData uploadData(Demo emp) {
            int code = 1;
            String message = "";
            try {
                String result = GetPostPutUtil.sendPost("http://xxx:1012/api/demo", JSON.toJSONString(emp));//实体类对象json化,alibaba.fastjson
                //获取响应状态
                boolean contains1 = result.contains("\"code\":");
                if (contains1) {
                    code = Integer.parseInt(result.split("\"code\":")[1].split(",", 0)[0]);
                }
                //获取响应信息
                boolean contains2 = result.contains("\"message\":\"");
                if (contains2) {
                    message = result.split("\"message\":\"")[1].split("\"}", 0)[0];
                }
       ///省略//
       }
       
       响应结果:{"code":0,"message":"上传成功"}
    

    PUT请求

    /**
         * 删除
         *
         * @return String
         */
        @RequestMapping(value = "/deleteDemo")
        @ResponseBody
        public String deleteDemo() {
            List<String> id = new ArrayList();
            id.add("000012");
            HashMap<String,Object> map = new HashMap<String,Object>();
            map.put("demoName", "张三");
            map.put("id", id);
            return GetPostPutUtil.sendPut("http://xxxx:1012/api/delete", map);
        }
        响应结果:{"code":0,"message":"删除成功"}
    
    展开全文
  • 首先:现在大部分接口都是走的是http协议加json格式进行传输调用,我们拿到第三方接口先不要急着去对接,一定要慢慢的看清楚,先细品一下,慢慢的细品,这样做的好处,就是在对接接口的时候少走弯路,下面我们就要讲...
  • 今天对了一下阿里云视频点播插件,用到了几个公共的方法函数,希望可以给同学们共同学习分享一下,对接其他的接口也可以用的到。 1、object转换array /** *object转换array *@param $array [object对象] * @...
  • 接口数据 处理 主要看sign签名的规则 $params = $this->getRequest()->getPost(); //客户号码 //客户电话 $from_number = $params['tel'] = '13888888888'; //中继号码 $to_number = '021123...
  • 快速对接第三方接口--短信接口

    千次阅读 2020-07-02 15:59:31
    一章 短信发送接口 1.1 请求地址 请求地址是客户接口程序调用时请求的url地址,采用的是https post 接口,地址是 http://sh2.ipyy.com/sms.aspx 对应UTF-8 http://sh2.ipyy.com/smsGBK.aspx 对应GB2312 ...
  • 实现对接第三方接口,可以使用HttpClient(年岁较久),也可以使用SpringBoot RestTemplate(新生代)。可根据个人喜好选择适当的方式进行对接,个人推荐使用SpringBoot RestTemplate。 具体使用如下: 自定义配置类: ...
  • 第三方接口对接总结

    万次阅读 多人点赞 2018-09-30 16:46:46
    接口对接分为两种形式: 我A公司提供接口给B公司,B公司进行一些操作时调用我们的接口进行实现。 例:A开发会员等级同步接口,供B同步会员等级到B系统。B会员等级的变动需要调用A接口主动推送给A(即更新会员卡...
  • 第三方接口对接规范

    千次阅读 2020-11-13 17:21:19
    如果项目是属于那种集成项目,那么对接各种第三方...自身调用异常:本身在调用第三方接口时出现超时等异常,可以归于第三方内部异常 登录异常:其实可以归于内部异常,但为了保活方便,建议单独定义异常 2 常用请求
  • 封装第三方接口、二次开发的记录 前面一段时间,连续分到三个封装http请求做二次开发的任务,记录一下,后续更新其中坑的内容。 partOne 注意事项 对接文档 对接文档中的请求参数和返回示例一定要清楚,接口的权鉴...
  • 第三方Api接口对接需要注意的点

    千次阅读 2020-09-25 10:29:25
    第三方Api接口对接需要注意的点 目录一、非技术对接二、技术对接三、必要措施四、常见错误解决 一、非技术对接 【重要】画出流程时序图 查看对方文档,积极沟通 本公司接口文档和图发对方确认,一定要对方明确...
  • 目的用户在下单的时候,会调用我们的后台服务器,我们的后台服务器又会根据不同渠道调用第三方下单接口,完成整个下单流程,但是第三方下单接口可能突然出问题或者不支持,所以目前我们每一种渠道都配置了好几种备用...
  • php 对接第三方api接口 笔记

    千次阅读 2018-05-31 14:16:02
    随笔记: 1.先上git上看看有没有sdk。 2.guzzlehttp, 获取数据的话 返回的response 需要 getBody(),然后再json_decode(),才能获取到真正返回的data数据。 3.注意第三方是否有sdk或者沙盒。...
  • 对接第三方平台JAVA接口问题推送和解决
  • 使用C#对接第三方接口
  • Java调用第三方接口示范

    万次阅读 多人点赞 2018-10-08 15:03:53
    在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口。 使用流程 【1】准备工作:在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的restTemplate来调用,上面...
  • 一,选择适合自己支付方式 不同场景选择不同的支付方式... 知道自己的系统和第三方系统是如何交互的,这个很关键也容易被忽略,因为这个不清楚,后面就是老大难,基本上第三方支付平台均提供支付交互图,支付平台大...
  • Content-Type为application/json调用流程:第三方通过事先调用登陆接口,获取访问的accessToken值。后续调用服务时,将该值设置在http header:X-Access-Token上。用于平台鉴权。accessToken默认有效期为一个月,过期...
  • 最近在一个项目中,需要与农行对接B2C的充值接口,碰到了一些问题,现记录一下。 在拿到农行的接口demo后,按照他们的demo开发完。在本地测试ok,但却没有回传的Url。就是一般网上购物后,会有个类似”返回商城”...
  • http post请求第三方接口,返回图片的信息是经过Base64加密的,如下: <details> <summary>点击时的区域标题:点击查看详细内容</summary> <p> - 测试 测试测试</p> <pre>&...
  • 最近很火的易支付第三方接口源码,亲测没有问题,程序已开发好QQ钱包,微信,支付宝等第三方接口,配置参数即可使用。
  • 第三方接口对接之鉴权

    千次阅读 2019-04-24 15:06:47
    第三方接口对接 鉴权 记录一次和第三方接口对接的过程。 对接要求 对方的接口做了加密验证,需要将参数进行加密生成一个Signature签名。然后对方也会根据参数做一样的步骤来比对签名是否相等来判断参数是否被篡改...
  • java调用第三方接口示例

    千次阅读 2020-05-20 17:48:30
    引言:在我们开发的过程中,常常会听到或者接触到第三方接口,那么这个第三方接口到底是什么呢? 简单来说就是一个远程接口,不是在你本机上的,你需要通过远程url去访问调用该接口。许多项目中有明确的要求需要调用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,445
精华内容 12,178
关键字:

对接第三方接口