一、获得顺丰电子面单SDK

https://qiao.sf-express.com/index.html 丰桥系统中,文档中心->SDK使用说明->运单自助打印SDK

顺丰电子面单SDK-1.0.3

支持的开发环境: Java sdk 支持1.8及以上

二、启动SDK本地服务:

1.windows环境:

①将csim_waybill_print_service_V1.0.3.jar和RUN-SF-PRINTER.bat置于同一目录下,双击RUN-SF-PRINTER.bat文件即可开启本地运单打印服务。(这种情况也有可能开启不成功,建议使用下面命令的方式)

②java -jar path [port]

例:(不填写端口,则默认为4040)

2.linux环境:

①linux下安装jdk1.8,执行命令:yum -y install java

②创建文件夹sf-service将csim_waybill_print_service_V1.0.3.jar放在文件夹中

③执行命令:chmod 777 csim_waybill_print_service_V1.0.3.jar 进行授权

④linux下进入sf-service文件,执行命令:nohup java -jar csim_waybill_print_service_V1.0.3.jar &

(注:nohup <程序名> &:命令在Unix/Linux中,普通进程用“&”符号放到后台运行,则控制台logout后,进程仍然继续运行,起到守护进程的作用,使用nohup命令后,原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用)。

3.验证服务器运行情况:

浏览器:http://localhost:4040/servertest.html(4040为启动端口),显示“OK!”则表示启动成功

4.Linux系统下需安装黑体字体!!!

①查看安装了哪些中文字体,命令:fc-list :lang=zh(如果命令不存在,则yum安装fontconfig,命令:yum -y install fontconfig

cd /usr/share/fonts(没有目录则创建,命令:mkdir /usr/share/fonts

③将顺丰sdk里带的黑体字体放到该文件夹下

④chmod 755 *.ttf(linux命令chmod 755的含义)

⑤建立字体缓存

mkfontscal (如果命令不存在,则yum安装mkfontscale,命令:yum install mkfontscale

mkfontdir   (如果命令不存在,则yum安装mkfontscale,命令:yum install mkfontdir

 fc-cache -fv

⑥让字体生效

source /etc/profile 

fc-match  (查看设置是否生效)

三、项目中引用顺丰jar包

方法一:将sf-csim-printer-api-1.0.3.jar包放在项目lib目录下,并add as library(使用maven的不建议这样做)

方法二:将sf-csim-printer-api-1.0.3.jar包放到maven私服上,并在项目中引用依赖

<dependency><groupId>sf-csim</groupId><artifactId>printer-api</artifactId><version>1.0.3</version>
</dependency>

四、调用demo

1.使用210面单,使用SDK中生成图片url和调用打印机url

/*** 调用打印机 弹出窗口 可选择份数 适用于单张打印【三联单】*/
private static String printUrl = "http://localhost:4040/sf/waybill/print?type=V3.0_poster_100mm210mm&output=print";
/*** 直接输出图片的BASE64编码字符串 可以使用html标签直接转换成图片【三联单】*/
private static String imageUrl = "http://localhost:4040/sf/waybill/print?type=V3.0_poster_100mm210mm&output=image";

2.打印电子面单方法

(注:打印url方法无需接返回的byte[],自动会调起打印机)

@Override
public byte[] sfPrintWaybill(Map<String, Object> params, Integer printType) throws Exception {logger.info("进入顺丰打印快递面单接口:params={},printType={}", JSONObject.toJSONString(params),printType);//1.根据业务需求确定请求地址String reqURL = "";if (printType == 1){reqURL = imageUrl;} else if (printType == 2){reqURL = printUrl;}//2.电子面单顶部是否需要logo  true:需要logo  false:不需要logoboolean topLogo = false;if(reqURL.contains("V2.0")&&topLogo){reqURL=reqURL.replace("V2.0", "V2.1");}if(reqURL.contains("V3.0")&&topLogo){reqURL=reqURL.replace("V3.0", "V3.1");}//3.构建WaybillDtoListList<WaybillDto> waybillDtoList = bulidWaybillDto(params);HttpURLConnection httpConn = buildHttpConn(reqURL);ObjectMapper objectMapper = new ObjectMapper();StringWriter stringWriter = new StringWriter();objectMapper.writeValue(stringWriter,waybillDtoList);httpConn.getOutputStream().write(stringWriter.toString().getBytes());httpConn.getOutputStream().flush();httpConn.getOutputStream().close();InputStream in = httpConn.getInputStream();BufferedReader in2=new BufferedReader(new InputStreamReader(in));String y="";String strImg="";while((y=in2.readLine())!=null){strImg=y.substring(y.indexOf("[")+1,y.length()-"]".length()-1);if(strImg.startsWith("\"")){strImg=strImg.substring(1,strImg.length());}if(strImg.endsWith("\"")){strImg=strImg.substring(0,strImg.length()-1);}}//将换行全部替换成空strImg=strImg.replace("\\n", "");byte[] bytes = (new Base64()).decode(strImg);return bytes;
}

3.构建WaybillDtoList

private List<WaybillDto> bulidWaybillDto(Map<String, Object> params) throws Exception{List<WaybillDto> waybillDtoList = new ArrayList<>();WaybillDto dto = new WaybillDto();//对应clientCodedto.setAppId(clientCode);//对应checkWorddto.setAppKey(checkword);//快递单号String mailNo = (String) params.get("mailNo");dto.setMailNo(mailNo);//收件人信息String receiverProvince = (String) params.get("receiverProvince");String receiverCity = (String) params.get("receiverCity");String receiverCounty = (String) params.get("receiverCounty");String receiverAddress = (String) params.get("receiverAddress");String receiverMobile = (String) params.get("receiverMobile");String receiverName = (String) params.get("receiverName");dto.setConsignerProvince(receiverProvince);dto.setConsignerCity(receiverCity);dto.setConsignerCounty(receiverCounty);dto.setConsignerAddress(receiverAddress); //详细地址建议最多38个字,字段过长可能影响打印效果dto.setConsignerCompany(d_company);dto.setConsignerMobile(receiverMobile);dto.setConsignerName(receiverName);//寄件人信息dto.setDeliverProvince(j_province);dto.setDeliverCity(j_city);dto.setDeliverCounty(j_county);dto.setDeliverCompany(j_company);dto.setDeliverAddress(j_address);//详细地址建议最多38个字,字段过长可能影响打印效果dto.setDeliverName(j_contact);dto.setDeliverMobile(j_tel);//原寄地代码(下订单接口顺丰会返回,需要保存)String originCode = (String) params.get("originCode");dto.setZipCode(originCode);//目的地代码(下订单接口顺丰会返回,需要保存)String destCode = (String) params.get("destCode");dto.setDestCode(destCode);//快递类型//1 :标准快递   2.顺丰特惠   3: 电商特惠   5:顺丰次晨  6:顺丰即日  7.电商速配   15:生鲜速配dto.setExpressType(1);//陆运E标示//业务类型为“电商特惠、顺丰特惠、电商专配、陆运件”则必须打印E标识,用以提示中转场分拣为陆运dto.setElectric("E");// 1-寄付 2-到付 3-第三方支付dto.setPayMethod(1);//加密项//加密寄件人及收件人名称dto.setEncryptCustName(true);//加密寄件人及收件人联系手机dto.setEncryptMobile(true);//物品信息String orderNo = (String) params.get("orderNo");List<CargoInfoDto> cargoInfoList = new ArrayList<>();List<OrderDetailOutputDto> orderDetailList = (List<OrderDetailOutputDto>) params.get("orderDetailList");for (OrderDetailOutputDto orderDetail : orderDetailList){CargoInfoDto cargo = new CargoInfoDto();cargo.setCargo(orderDetail.getCommodityName());cargo.setCargoCount(orderDetail.getNum());cargo.setCargoUnit("双");cargo.setSku(orderDetail.getSkuNo());cargo.setRemark(orderNo);cargoInfoList.add(cargo);}dto.setCargoInfoDtoList(cargoInfoList);waybillDtoList.add(dto);logger.info("生成电子运单请求参数: "+ MyJsonUtil.object2json(dto));return waybillDtoList;

4.构建Http连接

private HttpURLConnection buildHttpConn(String reqURL) throws Exception{/**注意 需要使用对应业务场景的url  **/URL myURL = new URL(reqURL);HttpURLConnection httpConn = (HttpURLConnection) myURL.openConnection();httpConn.setDoOutput(true);httpConn.setDoInput(true);httpConn.setUseCaches(false);httpConn.setRequestMethod("POST");httpConn.setRequestProperty("Content-Type", "application/json;charset=utf-8");httpConn.setConnectTimeout(10000);httpConn.setReadTimeout(2 * 5000);return httpConn;
}

五、controller层调用及前端

//预览打印快递单
byte[] imageByte = orderBackgroundApi.printWaybill(order,orderDeatilList,orderAddressList.get(0),orderConsignList.get(0),printType);return JSONObject.toJSONString(imageByte);

controller层调用api,并返回byte数组给前端,前端页面中使用<img>标签,并使用src="https://img-blog.csdnimg.cn/2022010708272582793.png"方式来展示二进制图片(需要对二进制数组进行base64编码,顺丰接口返回给我们的已经是经过base64编码的字符串)

function printWaybill(orderId,orderNo) {layer.load(2);$.ajax({url:"/order/printWaybill.sc",type:"post",data:{orderId:orderId,orderNo:orderNo,printType:1},dataType:"json",success:function (data) {layer.closeAll();layer.open({type:1,title: '预览',closeBtn:1,area:['850px','600px'],content:'<img src="https://img-blog.csdnimg.cn/2022010708272582793.png'+data+'" style="width:850px;"/>',btn: ['打印'],yes:function (index, layero) {$.ajax({url: "/order/printWaybill.sc",type: "post",data: {orderId: orderId, orderNo: orderNo, printType:2},dataType: "json",success:function (data) {mmGrid.load();}});}});}})
}

【第三方API】顺丰电子面单SDK调用总结-java相关推荐

  1. 第三方API接口对接-电子合同的实现逻辑

    电子合同签约实现逻辑: 随着电子合同法的推行,电子合同的法律认可和电子化使得合同签署得到很大的效率提升.很适合企业行政的对外签署相关业务合同和内部签署员工合同等多种契约场景. 比如集团内部员工劳动关系 ...

  2. 物流快递电子面单Api接口怎么申请对接(顺丰、快递鸟、菜鸟、拼多多)

    关于电子面单: 电子面单是一种通过热敏纸打印输出纸质物流面单的物流服务.通过热感应显示文字,打印速度比传统针式打印速度提升4~6倍.电子面单以接口形式嵌入到自己的系统.网站上,可以在自己的平台操作打印 ...

  3. java对接第三方快递---顺丰SDK

    文章目录 开发之前 接入SDK 2.1.工具类 2.2.测试中 2.3 .JavaBean 背景介绍:APP内商城,需要对接第三方快递,公司本身和顺丰有月结账户合作,故选用顺丰. 开发之前 开始要到丰 ...

  4. 【第三方API】顺丰API调用总结-java

    一.获取顾客编码及校验码 https://qiao.sf-express.com/index.html 丰桥系统中申请api接口,获得url(调用地址).clientCode(顾客编码).checkw ...

  5. 电子面单api接口_JAVA调用示例

    电子面单是一种通过热敏纸打印输出纸质×××的物流服务.通过热感应显示文字,打印速度比传统针式打印速度提升4~6倍.电子面单以接口形式嵌入到自己的系统.网站上,可以在自己的平台操作打印电子面单. 目前电 ...

  6. 常用电子面单接口API demo下载(菜鸟快递鸟)

    手写快递单太麻烦了,公司的订单又多,每次都写不过来,还容易出错,直接电子化在打印快递单就快了,不过现在有些人不懂怎么批量对接多个快递的电子面单,这里就给大家讲解讲解,希望对大家有用. 一.电子面单接口 ...

  7. 圆通开放平台电子面单下单接口,适用于第三方系统对接

    圆通开放平台电子面单下单接口 语言JAVA 作者:不停留的风 1.查询需要下单的圆通订单数据 2.把需要进行电子面单下单的数据转成XML格式 3.传输数据 4.获取服务端的反馈信息 5.把反馈的信息 ...

  8. 电商快递电子面单对接使用方法

    一.电子面单接口类型及定义 1. 快递电子面单接口:快递公司自己开发的电子面单服务, 商家使用必须快递公司上门做系统对接,使用一家快递则需要对接一次. 2.菜鸟电子面单接口:可一次对接15家快递公司, ...

  9. 免费电子面单Api_快递鸟接口JAVA对接调用案例

    电子面单是一种通过热敏纸打印输出纸质物流面单的物流服务.通过热感应显示文字,打印速度比传统针式打印速度提升4~6倍.电子面单以接口形式嵌入到自己的系统.网站上,可以在自己的平台操作打印电子面单. 一. ...

最新文章

  1. HAproxy七层负载均衡——访问控制、动静分离、读写分离实现过程详解
  2. 封装高可复用的服务端响应SSC程序修复对象 --ServerResponse
  3. QueueToStack
  4. spring-boot-starter-actuator(健康监控)配置和使用
  5. update yum 到指定版本_linux yum安装指定版本mysql或php
  6. pyTorch api
  7. [ARC061E]すぬけ君の地下鉄旅行 / Snuke's Subway Trip
  8. batch入门教程(4)
  9. tr069开源代码文档_tr069开源代码——cwmp移植
  10. matlab实验七阶跃信号,信号与系统MATLAB实验
  11. 海思hi3559a nginx 移植
  12. yapi 权限_yapi接口管理平台手册
  13. 微型计算机什么样子,微型计算机的组成有哪些 -价格怎么样?
  14. 连连支付提现人民币的时候汇率是怎么样的?
  15. JAVA中关于可变和不可变类型的理解
  16. 【数据科学】5个数据讲故事技巧,用于创建更有说服力的图和表
  17. U盘做启动盘后 容量变小怎么恢复?
  18. 牛逼!用 AI 实现 C++、Java、Python 代码互译!
  19. npm run dev 和 npm run serve区别
  20. unity3d 飞碟游戏

热门文章

  1. js过滤树形结构数据并获取新的树形结构
  2. portalv15安装 tia_博图TIA Portal V15安装讲解
  3. 2019 杭电第九场1007 Rikka with Travels
  4. Python Diary - Day 4 运算符
  5. Linux软件包用yum但没网,Red Hat Linux 无法使用yum命令
  6. 乖离 暗机器人_乖离性百万亚瑟王黑暗机器人打法技巧 暗马桶攻略
  7. 测绘工程本科生如何入门GNSS算法 - 引言
  8. NFC NFC手机 兼容的标签 支持Mifare Classic 手机列表
  9. 华为云物联网平台创建产品与设备(含MQTT.fx测试)
  10. 计算机毕业设计ssm农村老人管理系统的设计与实现36jlv系统+程序+源码+lw+远程部署