对接顺店通接口 (丰桥旗下平台)
顺店通平台介绍
顺店通平台 是我对接丰桥那边的接口之后 我们项目准备上线的时候 那边区域经理给到我们的一个平台
因为业务问题 所以又重新对接了一下顺店通平台的接口
顺店通那边没有提供SDK 只能用这种原始的请求方式来实现
当时拿到接口文档的时候 还是挺令人头大的
没想到只用了三天、四就搞好了
可以说非常简单了
下面分享给大家
控制层
package com.plz.kd.controller;
import com.alibaba.fastjson.JSONObject;
import com.plz.kd.Sdt.CreateOrder.CreateOrderRequest;
import com.plz.kd.Sdt.CreateOrder.OrderRequest;
import com.plz.kd.Sdt.CreateOrder.OrderResponse;
import com.plz.kd.Sdt.CreateOrder.OtherResponse;
import com.plz.kd.service.SdtService;
import com.plz.kd.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author HappyLiu
* @Description
* @Date 11:01 2022/6/10
**/
@RequestMapping("/sdt")
@RestController
public class SdtController {
@Autowired
private SdtService sdtService;
// 下单
@RequestMapping("/createOrder")
public OrderResponse createOrder(@RequestBody String json) {
CreateOrderRequest createOrderRequest = JSONObject.parseObject(json, CreateOrderRequest.class);
OrderResponse response = sdtService.createOrder(createOrderRequest);
return response;
}
// 路由查询
@RequestMapping("/routeQuery")
public OtherResponse routeQuery(@RequestBody String json) {
OrderRequest request = JSONObject.parseObject(json, OrderRequest.class);
OtherResponse response = sdtService.routeQuery(request);
return response;
}
// 取消订单
@RequestMapping("/cancelOrder")
public OrderResponse cancelOrder(@RequestBody String json ) {
OrderRequest request = JSONObject.parseObject(json, OrderRequest.class);
OrderResponse response = sdtService.cancelOrder(request);
return response;
}
// 清单运费查询接口
@RequestMapping("/orderFreight")
public OtherResponse orderFreight(@RequestBody String json) {
OrderRequest request = JSONObject.parseObject(json, OrderRequest.class);
OtherResponse response = sdtService.orderFreight(request);
return response;
}
}
@Service
package com.plz.kd.service;
import com.plz.kd.Sdt.entity.CreateOrder.CreateOrderRequest;
import com.plz.kd.Sdt.entity.CreateOrder.OrderRequest;
import com.plz.kd.Sdt.entity.CreateOrder.OrderResponse;
import com.plz.kd.Sdt.entity.CreateOrder.OtherResponse;
import com.plz.kd.utils.R;
/**
* @Author HappyLiu
* @Description
* @Date 11:01 2022/6/10
**/
public interface SdtService {
//创建订单接口(下单)
OrderResponse createOrder(CreateOrderRequest request);
//查询路由接口
R routeQuery(OrderRequest request);
//取消订单接口
OrderResponse cancelOrder(OrderRequest request);
//清单运费查询
OtherResponse orderFreight(OrderRequest request);
}
实现类Impl
package com.plz.kd.service.impl;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson.JSONObject;
import com.plz.kd.Sdt.CreateOrder.*;
import com.plz.kd.service.SdtService;
import com.plz.kd.utils.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.util.*;
/**
* @Author HappyLiu
* @Description
* @Date 11:01 2022/6/10
**/
@Service
@Component
public class SdtServiceImpl implements SdtService {
//是否上线
@Value("${sdt.pro}")
private Boolean pro;
@Value("${sdt.appId}")
private String appId;
// private static String appId = "你的appId";
@Value("${sdt.appSecret}")
private String appSecret;
// private static String appSecret = "你的appSecret";
/**
* 月结卡号 优先使用自传月结卡号;不传则根据appId(客户根组织)在顺店通后置的月结账号规则获取
* 是否必填:否
*/
@Value("${sdt.customNumber}")
private String customNumber;
/*
* 发件组织编码
* 是否必填:是
* */
@Value("${sdt.senderOrgCode}")
private String senderOrgCode;
public String getUrl() {
// 生产环境 路径
String PRO_URL = "https://united-store-ms.sf-express.com/zt/hd-united-store-openserver";
// 测试环境 路径
String UAT_URL = "https://united-store-uat-ms.sf-express.com/zt/hd-united-store-openserver";
if (this.pro) {
return PRO_URL;
}
return UAT_URL;
}
// 下单
private static String createOrder = "/api/universal/createOrder";
// 取消下单
private static String cancelOrder = "/api/cancel/order";
// 清单运费查询接口
private static String orderFreight = "/api/order/freight";
// 路由查询接口
private static String routeQuery = "/api/order/routeQuery";
// 每次请求id:UUID.randomUUID().toString()
private static String requestId = UUID.randomUUID().toString();
//创建订单接口(下单)
@Override
public OrderResponse createOrder(CreateOrderRequest request) {
SignAndTimestamp signAndTimestamp = getSignAndTimestamp();
String sign = signAndTimestamp.getSign();
String timestamp = signAndTimestamp.getTimestamp();
request.setAppId(appId);
request.setRequestId(requestId);
request.setTimestamp(timestamp);
request.setCustomNumber(customNumber);
request.setSenderOrgCode(senderOrgCode);
request.setSign(sign);
request.setNeedReturnTrackingNumber("3");
request.setExpressType("1");
request.setCostType(2);
request.setReturnTrackingValue(1);
String json = JSONObject.toJSONString(request);
//获取请求路径
String url = getUrl() createOrder;
String result = Request(url, json);
OrderResponse response = JSONObject.parseObject(result, OrderResponse.class);
return response;
}
//路由查询
@Override
public OtherResponse routeQuery(OrderRequest request) {
SignAndTimestamp signAndTimestamp = getSignAndTimestamp();
String sign = signAndTimestamp.getSign();
String timestamp = signAndTimestamp.getTimestamp();
request.setAppId(appId);
request.setRequestId(requestId);
request.setTimestamp(timestamp);
request.setSign(sign);
String url = getUrl() routeQuery;
String json = JSONObject.toJSONString(request);
String result = Request(url, json);
OtherResponse response = JSONObject.parseObject(result, OtherResponse.class);
return response;
}
//取消订单接口
@Override
public OrderResponse cancelOrder(OrderRequest request) {
SignAndTimestamp signAndTimestamp = getSignAndTimestamp();
String sign = signAndTimestamp.getSign();
String timestamp = signAndTimestamp.getTimestamp();
request.setAppId(appId);
request.setRequestId(requestId);
request.setTimestamp(timestamp);
request.setSign(sign);
String url = getUrl() cancelOrder;
String json = JSONObject.toJSONString(request);
String result = Request(url, json);
OrderResponse response = JSONObject.parseObject(result, OrderResponse.class);
return response;
}
//查询运费接口
@Override
public OtherResponse orderFreight(OrderRequest request) {
SignAndTimestamp signAndTimestamp = getSignAndTimestamp();
String sign = signAndTimestamp.getSign();
String timestamp = signAndTimestamp.getTimestamp();
request.setAppId(appId);
request.setRequestId(requestId);
request.setTimestamp(timestamp);
request.setSign(sign);
String url = getUrl() orderFreight;
String json = JSONObject.toJSONString(request);
String result = Request(url, json);
OtherResponse response = JSONObject.parseObject(result, OtherResponse.class);
return response;
}
//加密报文
public SignAndTimestamp getSignAndTimestamp() {
SignAndTimestamp signAndTimestamp = new SignAndTimestamp();
Long l = System.currentTimeMillis();
String timestamp = l "";
String sign = null;
try {
sign = CommonUtils.generateSign(appId, requestId, timestamp, appSecret);
} catch (Exception e) {
throw new RuntimeException(e);
}
signAndTimestamp.setSign(sign);
signAndTimestamp.setTimestamp(timestamp);
return signAndTimestamp;
}
//封装http请求
public static String Request(String url, String json) {
Map<String, String> headers = new HashMap<>(3);
headers.put("Content-type", "application/json;charset=utf-8");
String result = HttpRequest
.post(url)
.body(json)
.addHeaders(headers).execute().body();
return result;
}
}
R ( 这个工具类主要是 用来接收返回数据的 )
package com.plz.kd.utils;
import org.apache.http.HttpStatus;
import java.util.HashMap;
import java.util.Map;
/**
* 返回数据
*
*/
public class R extends HashMap<String, Object> {
private static final long serialVersionUID = 1L;
public R() {
put("code", 0);
put("msg", "success");
}
public static R error() {
return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");
}
public static R error(String msg) {
return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
}
public static R error(int code, String msg) {
R r = new R();
r.put("code", code);
r.put("msg", msg);
return r;
}
public static R ok(String msg) {
R r = new R();
r.put("msg", msg);
return r;
}
public static R ok(Map<String, Object> map) {
R r = new R();
r.putAll(map);
return r;
}
public static R ok() {
return new R();
}
public R put(String key, Object value) {
super.put(key, value);
return this;
}
}
我把我封装好的 请求参数实体类 以及 返回参数实体类 打包给大家
包括下单接口文档
实体类以及接口文档
提取码:8809
因为我觉得我写的还不够好 也希望大家能多提点宝贵的意见
欢迎PR~
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgbicfi
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01