1.提供一个公共基类,公共方法都可以写到这里
@Service
@Slf4j
public abstract class BaseApiServiceImpl {
/**
* 获取公共参数
*
* @param appSecret app类型
* @param param param请求参数
* @return 公共参数
*/
public Map<String, String> getPublicParam(String appSecret, Map<String, String> 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<String> 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<String, String> 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<OrderListResp> getSales(Map<String, String> 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<String, String> getPublicParam(String appSecret, Map<String, String> param) {
return super.getPublicParam(appSecret, param);
}
/**
* 获取订单列表信息
*
* @param salesReq 请求参数
* @return 订单列表信息
*/
@Override
public GbApiResponse<OrderListResp> getSales(Map<String,String> salesReq) {
GbApiResponse<OrderListResp> result = new GbApiResponse<>();
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("type",BG_GOODS_SALES_GET);
//转换为map
hashMap.putAll(salesReq);
Map<String, String> 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.使用到的类和配置
<dependencies>
<!--简化对象封装的工具-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--引入hutool工具包-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.6.1</version>
</dependency>
</dependencies>
@Data
public class GbApiResponse<T> {
private Boolean success;
private Integer errorCode;
private String errorMsg;
private T result;
}
@Data
public class OrderListResp {
/**
* 总数
*/
private Integer total;
/**
* 订单信息
*/
private List<SubOrderVo> subOrderList;
}
这里只展现部分,具体类请根据接口文档说明