对接 Web Service第三方接口

这篇具有很好参考价值的文章主要介绍了对接 Web Service第三方接口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

这次也是头一次接触对接第三方WebService接口,这技术都很老了,使用postman测试的时候还找了半天资料🤣。

关于postman测试

一般来说第三方都会限制ip这些,需要注意的是,给到的接口地址是能用公网进行访问的哦。

1、拿到接口路径

http://111.111.11.1:111/services/infoWebService?wsdl

这个当然是不可以访问的,是假的😘。

2、浏览器键入地址

出现这样的xml就代表接口没毛病哦

对接 Web Service第三方接口

3、来到postman 还是同样的操作,将第三方接口地址设为POST请求,如果请求不到可以去掉路径上的 ?wsdl,设置请求头 Content-Type:text/xml;charset=urf-8。

对接 Web Service第三方接口

对接 Web Service第三方接口

注意选中 raw 格式选择 XML 。
标号 1 的地方就是我们的方法名称。
标号 2 的地方就是我们的 targetNamespace 里的内容。
标号 3 的地方就是我们的方法返回类型。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<ns1:applyInfo  xmlns:ns1="http://service.webservice.catalog.infotrust.com">
<ns1:in0>
<![CDATA[
{
"token":"31cf2fba490b4714aa0b601fe0e25481",
"rescode":"892d615e9cec4b0a8fff9da2099bf2e7"
}
]]>
</ns1:in0>
</ns1:applyInfo>
</soap:Body>
</soap:Envelope>

参数就需要你自己去参照第三方给到你的文档了哦。

4、返回数据

对接 Web Service第三方接口

对接 Web Service第三方接口

有没有发现什么不一样地方呢,没错返回的也是xml格式的哦。
还可以发现数据都在我们的data里面,是JSON格式。
这里需要注意的是,想要拿到JSON对象,需要对返回的数据进行截取,详情看后台。

后台调用WebService第三方接口

  1. 根据第三方提供的接口文档,创建对应的实体类,字段最好一致,或者再多写个映射可以实现本地数据库字段与第三方数据库字段不一致 ! !

  2. 想要调用接口,还需要登录拿到Token,使用Token 和资源码调用接口,人家给的文档已经明确说明了。
    对接 Web Service第三方接口在postman中:
    对接 Web Service第三方接口
    可以看到是需要(用户名+账号+时间戳)的MD5值,那还需要一个操作获取时间戳和MD5Key

   
/**
 * 获取MD5Key和时间戳
 */
@Slf4j
public class DSFToken {

    /**
     * 获取MD5Key和时间戳
     */
    public Map<String,String> getMd5KeyAndTimeStamp()throws Exception{
        Map<String,String> map = new HashMap<>();
        Long timestamp = getTimestamp();
        String md5key = getMD5s("test123tD8#mE5["+timestamp);
        map.put("timestamp",timestamp.toString());
        map.put("md5key",md5key);
        return map;
    }

    /**
     * 获取当前时间戳
     */
    public Long getTimestamp() throws Exception {
        Timestamp timestamp = new Timestamp(System.currentTimeMillis());
        Instant instant = timestamp.toInstant();
        Timestamp tsFromInstant = Timestamp.from(instant);
        return tsFromInstant.getTime();
    }

    /**
     * 获取MD5值
     * @param plainText
     * @return
     */
    public  String getMD5s(String plainText)throws Exception {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(plainText.getBytes());
            byte b[] = md.digest();

            int i;

            StringBuffer buf = new StringBuffer("");
            for (int offset = 0; offset < b.length; offset++) {
                i = b[offset];
                if (i < 0)
                    i += 256;
                if (i < 16)
                    buf.append("0");
                buf.append(Integer.toHexString(i));
            }
            //32位加密
            return buf.toString();
            // 16位的加密
            //return buf.toString().substring(8, 24);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }
}
  1. 这个时候我们可以正常获取token了
/**
     * 获取登录token
     * @return
     * @throws Exception
     */
    public String getToken() throws Exception {
        DSFToken dsf = new DSFToken();
        Map<String,String> map = dsf.getMd5KeyAndTimeStamp();
        //获取时间戳
        String timestamp = map.get("timestamp");
        //获取md5key值
        String md5key = map.get("md5key");
        //WebService外网访问ip地址
        String SERVER_IP_TEST = "http://********/services/infoWebService";
        //通过StringBuilder拼接请求
        StringBuilder paramValue = new StringBuilder();

        paramValue.append("<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n" +
                "<soap:Body>\n" +
                "<ns1:getSafeToken  xmlns:ns1=\"http://service.webservice.catalog.infotrust.com\">\n" +
                "<ns1:in0>\n" +
                "<![CDATA[\n" +
                "{\"username\":\"test123\",\"md5key\":\""+ md5key +"\",\"timestamp\":\""+timestamp+"\"}\n" +
                "]]>\n" +
                "</ns1:in0>\n" +
                "</ns1:getSafeToken>\n" +
                "</soap:Body>\n" +
                "</soap:Envelope>");
        //调用post请求方法
        String result = sendPost(SERVER_IP_TEST,paramValue.toString());
        //由于返回的是XML我们需要对返回的数据进行截取,才能获得想要的
        String str1 = result.substring(result.indexOf("t>"),result.indexOf("</n")).substring("t>".length());
        if (str1 != null) {
            //转JSONObject格式
            JSONObject jsonObject = JSON.parseObject(str1);
            if(jsonObject.get("token") != null){
//                redisDao.setStringAndTime("dsfToken",jsonObject.getString("token"),3600*24);//redis缓存一天
                return jsonObject.getString("token");
            }
        }
        throw new BaseException("联系管理员");
    }

4. 拿到Token调用接口,使用Token 和资源码 (固定的) 获取数据 并将数据存储到本地数据库

    public List<AeoInfo> updateAeoInfo() throws Exception {
        //资源码
        String rescode = "c9769a4d208d41a99c1d847b68ccf1b4";
        //获取token
        String token = getToken();
//        if(token==null){
//            redisDao.setStringAndTime("dsfToken",getToken(),3600*24);//redis缓存一天
//            token = redisDao.get("dsfToken");
//        }
        //WebService外网访问ip地址
        String SERVER_IP_TEST = "http://********/services/infoWebService";
        //通过StringBuilder拼接请求
        StringBuilder paramValue = new StringBuilder();
        paramValue.append("<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n" +
                "<soap:Body>\n" +
                "<ns1:applyInfo  xmlns:ns1=\"http://service.webservice.catalog.infotrust.com\">\n" +
                "<ns1:in0>\n" +
                "<![CDATA[\n" +
                "{\n" +
                "\"token\":\"" + token +"\",\n" +
                "\"rescode\":\"" + rescode + "\"}\n" +
                "]]>\n" +
                "</ns1:in0>\n" +
                "</ns1:applyInfo>\n" +
                "</soap:Body>\n" +
                "</soap:Envelope>");
        //调用post请求方法
        String result = sendPost(SERVER_IP_TEST,paramValue.toString());
        //截取字符串
        String str1 = result.substring(result.indexOf("t>"),result.indexOf("</n")).substring("t>".length());
        if (str1 != null) {
            //转JSONObject格式
            JSONObject jsonObject = JSON.parseObject(str1);
            if (jsonObject.get("data") != null) {
                //转对象格式
                List<AeoInfo> entisyList = JSON.parseArray(jsonObject.getString("data"),AeoInfo.class);
                if(entisyList != null && entisyList.size()>0){
                    for (AeoInfo entity : entisyList) {
                    	//通过某个字段可以实现数据库中没有就新增,有就更新的效果,JPA的写法
                    	//你们对接接口的时候,需要自己去选择以哪个字段为准哦
                        AeoInfo adminLicensing = aeoInfoRepository.findByRN(entity.getRN());
                        if(adminLicensing==null){
                        	//保存
                            aeoInfoRepository.save(entity);
                        }
                    }
                }
                return entisyList;
            }
        }
        return null;
    }

工具

用来发送Post请求的方法,用到的是restTemplate,你也可以换别的哦

@Autowired
    private RestTemplate restTemplate;

/**
     * post请求、请求参数为json
     * @return
     */
    public String sendPost(String uri, String params) {
        ResponseEntity<String> apiResponse = restTemplate.postForEntity
                (
                        uri,
                        generatePostJson(params),
                        String.class
                );
        return apiResponse.getBody();
    }

    /**
     * 生成post请求的JSON请求参数
     * @return
     */
    public HttpEntity<String> generatePostJson(String params) {

        //如果需要其它的请求头信息、都可以在这里追加
        HttpHeaders httpHeaders = new HttpHeaders();

        MediaType type = MediaType.parseMediaType("application/json;charset=UTF-8");

        httpHeaders.setContentType(type);

        HttpEntity<String> httpEntity = new HttpEntity<>(params, httpHeaders);

        return httpEntity;
    }

XML配置

        
        <!--定时任务和@Slf4j注解日志的依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.4</version>
            <scope>provided</scope>
        </dependency>

        <!--json依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.41</version>
        </dependency>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.9</version>
        </dependency>

		<!-- apache md5 -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.13</version>
        </dependency>

		<!-- RestTemplate -->
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

至此大公告成!文章来源地址https://www.toymoban.com/news/detail-410810.html

到了这里,关于对接 Web Service第三方接口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 天猫精灵家居对接第三方设备(详细版)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档· 文章目录 前言 补充准备阶段(内网映射到外网) 一、天猫精灵官网配置准备 二、天猫精灵部分实现代码 三、天猫精灵配置技能广场 四、天猫精灵语音调试测试 总结 随着物联网的发展,众多的硬件

    2024年02月06日
    浏览(43)
  • 微信第三方平台对接小程序发版

    微信第三方平台是商家把公众号或小程序代交给服务商来管理, 当商家把小程序授权给第三方平台后,同时授权小程序开发与数据分析,小程序后台就无法发版 ,必须开发人员调小程序的api才能实现发版;如不需要调第三方平台接口的方式发布,取消 小程序开发与数据分析

    2024年02月16日
    浏览(75)
  • 海康威视iSC 平台第三方对接门禁权限分享

    一、 场景描述 iSC 平台的门禁产品及功能在项目应用广泛,第三方对接门禁权限功能的需求也越来也 多,由于门禁权限下发需要涉及到往设备上下发,第三方接口调用一旦不正确,不合理的接 口调用很容易给我们平台造成额外的性能消耗,甚至导致我们平台挂掉,特此梳理

    2024年02月02日
    浏览(361)
  • 3PL第三方物流如何对接TSC EDI?

    TractorSupply(以下简称为TSC)是一家总部位于美国的零售公司,主要专注于农业、家庭和宠物用品。在美国拥有数百家门店,广泛分布在城市、城镇和农村地区,这使得他们能够满足各种地理位置和社区的需求。为了确保其供应链以及物流运营的高效性,TSC选择与3PL(第三方物

    2024年02月07日
    浏览(45)
  • 飞鱼CRM接入第三方系统 飞鱼API对接详细教程

    场景描述 在白码低代码开发平台中,是支持外部crm系统的线索通过接口流入到白码系统里面,换而言之,只要外部的系统有线索api接口,白码系统可以接收线索并在白码系统上进行后续操作。本文以飞鱼crm系统为例,讲解如何接收飞鱼crm系统传过来的线索 前期准备 准备两个

    2024年01月21日
    浏览(47)
  • 自营外卖配送平台的商家如何对接第三方美饿的订单

    自营外卖跑腿平台对接第三方美饿的好处 单说美团饿了么自身的流量优势,很多商家不能忽视,但是美团饿了么的高额配送成本与抽成,同样也不能忽视。很多商家希望选择自配送或者其他更划算的配送方式来节省成本。这时,区域性的自建外卖平台与美团、饿了么实现订单

    2024年02月13日
    浏览(40)
  • java调第三方接口

    目录 背景 Spring的RestTemplate 1.引入依赖 2.RestTemplate配置类 3.RestTemplate实现类 java调第三方接口我百度的有三种方法. 第一种:通过JDK网络类Java.net.HttpURLConnection 第二种:通过Apache common封装好的HttpClient 第三种:通过Spring的RestTemplate 这个三种方法在我的scdn收藏里有,都是可以直接用的

    2024年02月05日
    浏览(59)
  • php第三方阿里云接口

    阿里云 OpenAPI 开发者门户

    2024年02月15日
    浏览(38)
  • 【黑马头条之内容安全第三方接口】

    本笔记内容为黑马头条项目的文本-图片内容审核接口部分 目录 一、概述 二、准备工作 三、文本内容审核接口 四、图片审核接口 五、项目集成 内容安全是识别服务,支持对图片、视频、文本、语音等对象进行多样化场景检测,有效降低内容违规风险。 目前很多平台都支持

    2024年02月15日
    浏览(64)
  • OpenAI 接口API的第三方代理

    OpenAI推出了针对开发者的API接口,这是供程序代码去调用的,不是面向普通人的。我们经常看到的国内版ChatGPT,就是对API接口的界面包装再出售会员。 目前,公开对外使用的是GPT-3.5模型的API接口,GPT-4模型的接口处于测试阶段,开发者需要申请权限加入等待列表,审核通过

    2024年02月07日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包