Xe Currency Data 实时货币汇率接口调用工具 API教程

接到任务需要跟换公司现有实时汇率接口的API,但是Xe Currency的官方文档很潦草,找了很多网站都没找到具体的教程,今天特意写一下这个教程,小白快点感谢我吧~~~

Xe Currency Data简介:

Xe Currency Data 是由 Xe 开发的一组 API,旨在提供实时和历史的货币汇率数据。这些 API 可以让开发人员轻松地集成汇率数据到他们的应用程序中,帮助用户在进行跨国交易、旅行或投资时了解实时的汇率情况。

Xe Currency Data API 提供了多种功能,包括:

  1. 实时汇率数据:可以查询各种货币对之间的实时汇率。

  2. 历史汇率数据:可以获取过去某个时间点的汇率数据,帮助用户分析汇率走势。

  3. 汇率转换:可以将一个货币转换为另一个货币,根据实时汇率计算转换后的金额。

  4. 货币列表:可以获取支持的货币列表,帮助用户了解可用的货币代码和名称

官方文档:Xe Currency Data
可以直接注册获取7天试用期。

注册/获取密钥:

获取到密钥后呢可以去到API文档测试运行是否成功,这里第一个坑来了。

这里点击执行会弹出一个登录框,提示需要输入账号和密码,但是实际需要输入的是API的密钥ID和密钥key。(ps:就很坑!!!)
好了,这里已经避坑一个,确认后正常就会在下面显示返回的JSON数据,表示APIKey没问题。

代码部分:

    /**
     * XE汇率api接口密钥
     */
     public static String apiKey = "e0ojrn7dgcg8kqbtiq6ko78r0j";
     public static String apiId = "alan913884135";
     public static String exchangeRateUrlV3 ="https://xecdapi.xe.com/v1/convert_from.json?from=FROM&to=TO";   




 /**
     * 调用汇率接口
     * @param from 源货币
     * @param to  目标货币
     * @return
     * @throws Exception
     */
    public static Double currencyChangeV2(String from, String to) throws Exception {
        if (from.equals(to)){
            return 1D;
        }
        // 替换url中的from和to,并且发送请求
        String url = exchangeRateUrlV3.replace("FROM", from).replace("TO", to);
        JSONObject jsonObject = httpGetRequestV3(url);

        Double exchangeRate = 0D;
        if (null != jsonObject) {
            System.out.println("调用汇率转换接口:" + jsonObject);
            //
            if (jsonObject.get("code")!=null) {
                throw new BizException(BizCodeEnum.ILLEGAL_REQUEST, "调用汇率转换接口失败!!!原因:" + jsonObject.getString("message"));
            } else {
                // 返回值 jsonObject = {"terms":"http://www.xe.com/legal/dfs.php","privacy":"http://www.xe.com/privacy.php","from":"USD","amount":1,"timestamp":"2024-03-20T00:00:00Z","to":[{"mid":7.1990197127,"quotecurrency":"CNY"}]}
                // 这里只获取了mid的值(汇率)
                exchangeRate = (jsonObject.getJSONArray("to").getJSONObject(0).getDouble("mid"));
            }
        }
        return exchangeRate;
    }

    /**
     * Xe Currency Data API  汇率转换接口
     * 发送请求,插入请求头
     * @param requestUrl
     * @return
     * @throws Exception
     */
    public static JSONObject httpGetRequestV3(String requestUrl) throws Exception {
        CloseableHttpClient httpClient = HttpClients.custom().build();

        // 拼接好的apiId和apiKey 转换成Base64编码 设置到 Authorization 请求头中
        String auth = apiId + ":" + apiKey;
        byte[] encodedAuth = Base64.getEncoder().encode(auth.getBytes());
        String authHeaderValue = "Basic " + new String(encodedAuth);

        HttpGet httpGet = new HttpGet(requestUrl);
        httpGet.setHeader("Authorization", authHeaderValue);
        CloseableHttpResponse response = httpClient.execute(httpGet);
        return JSON.parseObject(EntityUtils.toString(response.getEntity()), JSONObject.class);
    }

最后说一下做这个小功能遇到的坑,其实如果官方文档详细一点点的话是完全可以避免的。

Xe API文档内的调用接口全部都是只给了一个接口,并没有明确表示需要用什么方式去将ID和key插入进去,于是我尝试了使用路径变量和JSON变量都不行。
 

最后我是通过监测测试调用的链接,对比里面传输的参数才知道,原来是要将
apiId和apiKey拼接好然后转换成Base64编码 设置到 Authorization 请求头中才可以正常调用!!!!
这里我直接反编译解码了Authorization才恍然大悟~~~~

这里真的只是在API文档加一句话的事情,但是就是没有~~~~~

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值