对接temu平台api的一个简单示例

1.提供一个公共基类,公共方法都可以写到这里

@Service
@Slf4j
public abstract class BaseApiServiceImpl {

    /**
     * 获取公共参数
     *
     * @param appSecret app类型
     * @param param     param请求参数
     * @return 公共参数
     */
    public Map getPublicParam(String appSecret, Map param) {
        param.put("app_key", AppConfig.APP_KEY);
        param.put("access_token",param.get("accessToken"));
        param.put("data_type","JSON");
        param.put("timestamp",String.valueOf(System.currentTimeMillis()));
        //请求参数排序处理
        if (ObjectUtil.isNotEmpty(param)){
            List list = param.keySet().stream().sorted(Comparator.comparing(String::valueOf)).collect(Collectors.toList());
            StringBuilder builder = new StringBuilder(appSecret);
            for (String key : list) {
                builder.append(key).append(param.get(key));
            }
            builder.append(appSecret);

            MD5 md5 = MD5.create();
            String sign = md5.digestHex(builder.toString()).toUpperCase();
            //设置签名
            param.put("sign",sign);
        }
        return param;
    }

    /**
     * 请求接口
     * @param url               请求路径
     * @param param             公共参数
     * @return                  响应结果
     */
    public static GbApiResponse getResponse(String url, Map param){
        log.info("========>>>>>>> 请求url:{},参数:{}<<<<<<=======", url,JSONUtil.toJsonStr(param));
        String post = HttpUtil.post(url, JSONUtil.toJsonStr(param));
        log.info("==========>>>>>>>接口返回:{}<<<<<<=======", JSONUtil.toJsonStr(post));
        if (ObjectUtil.isNotEmpty(post)){
            GbApiResponse gbApiResponse = JSONUtil.toBean(post, GbApiResponse.class);
            if (gbApiResponse.getSuccess()){
                return gbApiResponse;
            }
            throw new RuntimeException("请求接口出错,响应结果:" + post);
        }
        throw new RuntimeException("请求接口出错,响应结果为空");
    }
}

2.提供一个接口,供外部调用

public interface SaleApi {
    /**
     * 获取订单列表信息
     * @param getSalesReq   请求参数
     * @return              订单列表信息
     */
    GbApiResponse getSales(Map getSalesReq);

    String test(String s);
}

3.实现上述接口,具体的业务逻辑

@Service
@Slf4j
public class SaleApiServiceImpl extends BaseApiServiceImpl implements SaleApi {
    private static final String BG_GOODS_SALES_GET = "bg.goods.sales.get";
    /**
     * 获取公共参数
     *
     * @param appSecret app类型
     * @param param     param请求参数
     * @return 公共参数
     */
    @Override
    public Map getPublicParam(String appSecret, Map param) {
        return super.getPublicParam(appSecret, param);
    }

    /**
     * 获取订单列表信息
     *
     * @param salesReq  请求参数
     * @return          订单列表信息
     */
    @Override
    public GbApiResponse getSales(Map salesReq) {
        GbApiResponse result = new GbApiResponse<>();
        HashMap hashMap = new HashMap<>();
        hashMap.put("type",BG_GOODS_SALES_GET);
        //转换为map
        hashMap.putAll(salesReq);
        Map publicParam = getPublicParam(AppConfig.APP_SECRET,hashMap);
        GbApiResponse response = getResponse(AppConfig.PATH, publicParam);
        OrderListResp orderListResp = JSONUtil.toBean(response.getResult().toString(), OrderListResp.class);
        result.setResult(orderListResp);
        result.setSuccess(response.getSuccess());
        return result;
    }

    @Override
    public String test(String s) {
        return s;
    }
}

4.使用到的类和配置


        
        
            org.projectlombok
            lombok
        

        
        
            cn.hutool
            hutool-all
            4.6.1
        
    
@Data
public class GbApiResponse {
    private Boolean success;
    private Integer errorCode;
    private String errorMsg;
    private T result;
}

@Data
public class OrderListResp {
    /**
     * 总数
     */
    private Integer total;
    /**
     * 订单信息
     */
    private List subOrderList;
}

这里只展现部分,具体类请根据接口文档说明

你可能感兴趣的:(java,json,servlet)