• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

对接顺店通接口 (丰桥旗下平台)

武飞扬头像
gonnabehappy
帮助1

顺店通平台介绍

顺店通平台 是我对接丰桥那边的接口之后 我们项目准备上线的时候 那边区域经理给到我们的一个平台

因为业务问题 所以又重新对接了一下顺店通平台的接口

顺店通那边没有提供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
系列文章
更多 icon
同类精品
更多 icon
继续加载