记得上下班打卡 | git大法好,push需谨慎

Commit 40a55456 authored by wangyifan's avatar wangyifan

收钱吧签名

parent 4db531cf
package com.liquidnet.service.goblin.param.shouqianba;
/**
* 收钱吧接口常量配置
*
* @author liquidnet
* @since 2026-03-16
*/
public class ShouQianBaConstants {
/**
* 收钱吧接口基础域名(TODO: 后续由配置文件统一管理)
*/
public static final String BASE_API = "https://api.shouqianba.com";
// ==================== API 路径 ====================
/**
* 创建结算明细 接口路径
*/
public static final String API_SETTLEMENT_CREATE = BASE_API + "/settlement/create";
// ==================== 通用常量 ====================
/**
* 响应成功业务码
*/
public static final String RESPONSE_SUCCESS_CODE = "200";
/**
* 响应成功标识
*/
public static final Boolean RESPONSE_SUCCESS = Boolean.TRUE;
/**
* 请求内容类型
*/
public static final String CONTENT_TYPE_JSON = "application/json;charset=UTF-8";
}
package com.liquidnet.service.goblin.service.impl; package com.liquidnet.service.goblin.service.impl;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.liquidnet.service.goblin.param.shouqianba.*; import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.service.goblin.param.shouqianba.response.data.CashierQueryData; import com.liquidnet.commons.lang.util.MD5Utils;
import com.liquidnet.service.goblin.param.shouqianba.response.data.OrderCreateData;
import com.liquidnet.service.goblin.param.shouqianba.response.data.SettlementCreateData;
import com.liquidnet.service.goblin.param.shouqianba.request.CashierQueryRequest; import com.liquidnet.service.goblin.param.shouqianba.request.CashierQueryRequest;
import com.liquidnet.service.goblin.param.shouqianba.request.OrderCreateRequest; import com.liquidnet.service.goblin.param.shouqianba.request.OrderCreateRequest;
import com.liquidnet.service.goblin.param.shouqianba.request.SettlementCreateRequest; import com.liquidnet.service.goblin.param.shouqianba.request.SettlementCreateRequest;
import com.liquidnet.service.goblin.param.shouqianba.response.SettlementCreateResponse; import com.liquidnet.service.goblin.param.shouqianba.response.SettlementCreateResponse;
import com.liquidnet.service.goblin.param.shouqianba.response.data.CashierQueryData;
import com.liquidnet.service.goblin.param.shouqianba.response.data.OrderCreateData;
import com.liquidnet.service.goblin.param.shouqianba.response.data.SettlementCreateData;
import com.liquidnet.service.goblin.service.IGoblinShouQianBaService; import com.liquidnet.service.goblin.service.IGoblinShouQianBaService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import java.io.IOException; import java.util.TreeMap;
/** /**
* 收钱吧对接实现类 * 收钱吧对接实现类
...@@ -35,6 +31,11 @@ public class GoblinShouQianBaServiceImpl implements IGoblinShouQianBaService { ...@@ -35,6 +31,11 @@ public class GoblinShouQianBaServiceImpl implements IGoblinShouQianBaService {
private static final ObjectMapper objectMapper = new ObjectMapper(); private static final ObjectMapper objectMapper = new ObjectMapper();
// TODO: 先写固定常量,后期可配置文件化
public static final String BASE_API = "https://api.shouqianba.com";
private static final String APPID = "test_appid";
private static final String APPKEY = "test_appkey";
/** /**
* 创建结算明细 * 创建结算明细
* *
...@@ -43,18 +44,40 @@ public class GoblinShouQianBaServiceImpl implements IGoblinShouQianBaService { ...@@ -43,18 +44,40 @@ public class GoblinShouQianBaServiceImpl implements IGoblinShouQianBaService {
*/ */
@Override @Override
public SettlementCreateData createSettlement(SettlementCreateRequest request) { public SettlementCreateData createSettlement(SettlementCreateRequest request) {
// String url = ShouQianBaConstants.API_SETTLEMENT_CREATE; final String url = BASE_API + "/optimus/core/mall/createPreOrder";
// log.info("[收钱吧] 创建结算明细 请求URL: {}, 请求参数: {}", url, request); log.info("[收钱吧] 创建结算明细, 请求URL: {}, 请求参数: {}", url, request);
//
// try { try {
// // body进行序列化成TreeMap以后 最后转成json(为了排序稳定)
// TreeMap<String, Object> map = objectMapper.convertValue(
// } catch (Exception e) { request,
// log.error("[收钱吧] 创建结算明细 发生异常,请求参数: {}", request, e); new TypeReference<TreeMap<String, Object>>() {
// return null; }
// } );
String requestBody = objectMapper.writeValueAsString(map);
// 构建请求头(添加签名参数)
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
headers.add("Authorization", getSign(requestBody));
String responseStr = HttpUtil.postJson(url, requestBody, headers);
log.info("[收钱吧] 创建结算明细, 响应体: {}", responseStr);
// 转换响应报文
SettlementCreateResponse response = objectMapper.readValue(responseStr, SettlementCreateResponse.class);
if (response != null && Boolean.TRUE.equals(response.getSuccess())) {
return response.getData();
} else {
log.error("[收钱吧] 创建结算明细业务失败, code: {}, msg: {}",
response != null ? response.getCode() : "null",
response != null ? response.getMsg() : "null");
return null; return null;
} }
} catch (Exception e) {
log.error("[收钱吧] 创建结算明细发生异常, 请求参数: {}", request, e);
return null;
}
}
@Override @Override
public OrderCreateData createOrder(OrderCreateRequest request) { public OrderCreateData createOrder(OrderCreateRequest request) {
...@@ -67,4 +90,18 @@ public class GoblinShouQianBaServiceImpl implements IGoblinShouQianBaService { ...@@ -67,4 +90,18 @@ public class GoblinShouQianBaServiceImpl implements IGoblinShouQianBaService {
return null; return null;
} }
private String getSign(String bodyJsonStr) {
try {
// 签名算法: sign = MD5( CONCAT( body + appkey ) )
String rawStr = bodyJsonStr + APPKEY;
String sign = MD5Utils.md5(rawStr);
// 签名首部: Authorization: appid + " " + sign
return APPID + " " + sign;
} catch (Exception e) {
log.error("[收钱吧] 生成签名发生异常", e);
return "";
}
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment