Skip to content

简介

本文档以【采购风险管理】需求为案例,此需求里,云ERP需要调用返利接口,返利接口以AMS形式提供。

准备工作

  • 首先需要对方提供接口,并确保对方已注册AMS接口
  • 确定调用方使用的AMS配置(accessUrl、clientId、clientSecret)

步骤1:查看对方接口信息

对方提供接口文档信息,这里主要是先要看到接口地址,例如本次需求:接口地址: POST /api/interfacingErp/query/collectionGroupNo

步骤2:确定我方AMS配置

  • 确定我方AMS配置,配置到nacos里去,如果此模块已经有此配置,则无需重新配置

    确定我方AMS配置

步骤3:找到我方AMS应用

  • 登录AMS平台,进入【应用列表】菜单
  • 根据上面看到的我方AMS配置,找到我们的应用 找到我方AMS应用

步骤4:订阅对方接口

  • 点击应用的【授权】图标,打开【API授权】弹窗
  • 查询对方接口信息(如果没查到,请先联系对方发布接口)
  • 我们勾选需要的接口,并点击【确定】,即可完成接口订阅(生产环境可能还需要审核) 订阅对方接口

步骤5:查看订阅情况

  • 点击应用的【查看】图标,打开【应用详情】 查看订阅情况1
  • 找到对应的接口,可以复制完整的调用url 查看订阅情况2

步骤6:调用AMS接口

  • AMS接口的调用方式就是基本的http请求(可以自行选择方便的技术选型),只需要在请求头里加上token信息
  • 云ERP里,有一个工具类可以获取AMS的token 【com.jzt.weberp.common.config.cache.ams.AmsUtils】
  • AmsUtils 有做缓存,但在以前的版本里,多个应用会共用同一个redisKey,可能导致token失效风险,请确认自己使用的工具版本

部分代码样例

java
    private Map<String, String> getHeader() {
        TokenInfo token = amsUtils.getToken(accessUrl, clientId, clientSecret);
        Map<String, String> header = new HashMap<>();
        header.put("Authorization", token.getTokenType() + " " + token.getAccessToken());
        return header;
    }

    private R<PurchaseRiskPolicyCollectionApiWrapper> queryByApi(PurchaseRiskPolicyCollectionApiRequest request) {
        String jsonStr = JSONUtil.toJsonStr(request);
        String body;
        try {
            log.info("返利接口调用 - 入参:{}", jsonStr);
            log.info("返利接口调用 - url:{}", getUrl());
            // 调用接口
            ApacheHttpUtil.ResponseContent resp = ApacheHttpUtil.postJson(getUrl(), getHeader(), jsonStr);
            log.info("返利接口调用 - 返回:{}", resp);
    
            if (!resp.isSuccess()) {
                return R.error("返利接口调用 - 失败:" + resp);
            }
            body = resp.getBody();
            if (StrUtil.isBlank(body)) {
                return R.error("返利接口调用 - 返回空值:" + resp);
            }
        } catch (Exception e) {
            log.error("返利接口调用 - 异常:{}", e.getMessage(), e);
            return R.error("返利接口调用 - 异常:" + e.getMessage());
        }
    
        try {
            // 解析body
            PurchaseRiskPolicyCollectionApiResponse response = JSONUtil.toBean(body, PurchaseRiskPolicyCollectionApiResponse.class);
            if (response.isSuccess()) {
                return R.ok(response.getData());
            } else {
                return R.error(response.getMsg());
            }
        } catch (Exception e) {
            log.error("返利接口调用 - 返参 body:{} 转换json异常:[{}]", body, e.getMessage(), e);
            return R.error("返利接口调用 - 返参转换json异常,body:[" + body + "]");
        }
    }

页脚:版权前显示的信息