一.简介
使用拼多多开放平台提供的拼多多电子面单功能。
拼多多开放平台提供的这两个应用的区别:
1.在于业务权限方面,跨境erp权限很多具体可以在开放平台看到,其中就包括了获取电子面单,而电子面单应用呢就只限于获取电子面单的一系列。
2.erp在测试过程中就可以给应用授权,电子面单需要上线才能授权
3.获取code(授权)的拼接方式不同如图:


同时erp需要店铺授权,电子面单不需要 电子面单如图:需要的是拼多多电子面单账户
注册地址:拼多多电子面单平台地址(注册应用授权所要的账号)
注册好后,登入找到如下图位置:

把上图的账号加进来就好

erp如图: 这里加的是拼多多商家后台的账号(具体过程在下文 ,请完后看,这里只是说下区别)

其他流程几乎相同 获取面单的代码也一致 两者间代码共用,只需要更换相应的 clientId,clientSecret ,以及不同授权码获取到的token 即可

二.流程
1.拼多多开放平台地址:拼多多开放平台地址
2.找到文档 如图:

3.根据新手指南完成 注册账号,选择角色,应用创建,这三个步骤

注册完之后,点击下图个人中心,就可以找到选择角色的【资质信息】模块

完成选择角色后,可以点击控制台,去创建应用


我这里是选择的跨境,因为我们这边的业务需求,但是这个电子面单的实现方式是一样的, 所以这个你可以按你们自己的来 只要包含电子面单打印功能即可。

创建完应用之后 就可以 下载相关的sdk了


点击下载即可

下载下来解压,它包含两部分 如图

可以直接把jar放在自己项目的配置文件下面

我这边是springboot项目 使用方法 如下:
在启动类的pom文件中添加 如图插件

再在需要用到jar包提供的代码的模块里加入 改jar包 并在此pom文件中加入如下 :

这样便可以 使用jar文件里的内容了。

完成这里之后,就去注册一个商家账号,在后续开发流程中有使用
商家后台地址:商家后台地址
注册完之后完成如下图操作 :

4.完成后,可以进入开发阶段
首先,找到文档,先看完相关功能 如图:



我这边没有直接按文档来 因为他又提供sdk 所以参数不需要自己封装 所以我是直接先用它提供的代码把数据组装起来 然后再来看自己 哪些参数不清楚 少哪些参数的 这里我就直接把我的获取面单代码贴出来把

//获取面单private   String getPDDMailNo() {//拼多多开放平台上申请的应用的 clientIdString clientId="clientId";//拼多多开放平台上申请的应用的 clientSecretString clientSecret="clientSecret";String expresscode="YUNDA";//要获取的运单类型//商铺账号  可以在商家后台看到 这是拼多多店铺账号Long userId=0L;String accessToken="accessToken";//accessTokenString code="code";//授权码PopClient client = new PopHttpClient(clientId, clientSecret);PddWaybillGetRequest request = new PddWaybillGetRequest();PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequest paramWaybillCloudPrintApplyNewRequest = new PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequest();paramWaybillCloudPrintApplyNewRequest.setNeedEncrypt(false);PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequestSender sender = new PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequestSender();PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequestSenderAddress address = new PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequestSenderAddress();paramWaybillCloudPrintApplyNewRequest.setWpCode(expresscode);address.setCity("");address.setDetail("");address.setDistrict("");address.setProvince("");sender.setAddress(address);sender.setName("");sender.setMobile("");sender.setPhone("");paramWaybillCloudPrintApplyNewRequest.setSender(sender);List<PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequestTradeOrderInfoDtosItem> tradeOrderInfoDtos = new ArrayList<PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequestTradeOrderInfoDtosItem>();PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequestTradeOrderInfoDtosItem item = new PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequestTradeOrderInfoDtosItem();//建议用订单编号item.setObjectId("");PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequestTradeOrderInfoDtosItemOrderInfo orderInfo = new PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequestTradeOrderInfoDtosItemOrderInfo();orderInfo.setOrderChannelsType("PDD");List<String> tradeOrderList = new ArrayList<String>();tradeOrderList.add("");orderInfo.setTradeOrderList(tradeOrderList);item.setOrderInfo(orderInfo);PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequestTradeOrderInfoDtosItemPackageInfo packageInfo = new PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequestTradeOrderInfoDtosItemPackageInfo();packageInfo.setId("");List<PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequestTradeOrderInfoDtosItemPackageInfoItemsItem> items = new ArrayList<PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequestTradeOrderInfoDtosItemPackageInfoItemsItem>();//for () {PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequestTradeOrderInfoDtosItemPackageInfoItemsItem item1 = new PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequestTradeOrderInfoDtosItemPackageInfoItemsItem();item1.setCount(0);item1.setName("");items.add(item1);//}packageInfo.setItems(items);packageInfo.setTotalPackagesCount(0);packageInfo.setVolume(0L);packageInfo.setWeight(0L);item.setPackageInfo(packageInfo);PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequestTradeOrderInfoDtosItemRecipient recipient = new PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequestTradeOrderInfoDtosItemRecipient();PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequestTradeOrderInfoDtosItemRecipientAddress address1 = new PddWaybillGetRequest.ParamWaybillCloudPrintApplyNewRequestTradeOrderInfoDtosItemRecipientAddress();address1.setCity("");address1.setDetail("");address1.setDistrict("");address1.setProvince("");address1.setTown("");address1.setCountry("");recipient.setAddress(address1);recipient.setMobile("");recipient.setName("");recipient.setPhone("");item.setRecipient(recipient);//运单模板String templateUrl=getTemplates(clientId,clientSecret,expresscode);item.setTemplateUrl(templateUrl);item.setUserId(userId);tradeOrderInfoDtos.add(item);paramWaybillCloudPrintApplyNewRequest.setTradeOrderInfoDtos(tradeOrderInfoDtos);request.setParamWaybillCloudPrintApplyNewRequest(paramWaybillCloudPrintApplyNewRequest);try {PddWaybillGetResponse response = client.syncInvoke(request, accessToken);} catch (Exception e) {e.printStackTrace();}return "";}//获取标准面单模板private   String getTemplates(String clientId,String clientSecret,String WpCode) {String templates="";PopClient client = new PopHttpClient(clientId, clientSecret);PddCloudprintStdtemplatesGetRequest request = new PddCloudprintStdtemplatesGetRequest();request.setWpCode(WpCode);PddCloudprintStdtemplatesGetResponse response = null;try {response = client.syncInvoke(request);} catch (Exception e) {e.printStackTrace();}//标准面单模板urlif( response.getPddCloudprintStdtemplatesGetResponse()!=null){templates=response.getPddCloudprintStdtemplatesGetResponse().getResult().getDatas().get(0).getStandardTemplates().get(0).getStandardTemplateUrl();}return templates;}//获取tokenpublic  void getAccessToken() {String clientId="clientId";String clientSecret="clientSecret";String code = "code";String accessToken = "";PddPopAuthTokenCreateRequest request = new PddPopAuthTokenCreateRequest();request.setCode(code);PddPopAuthTokenCreateResponse response = null;PopClient client = new PopHttpClient(clientId, clientSecret);try {response = client.syncInvoke(request);} catch (Exception e) {e.printStackTrace();}if (response.getPopAuthTokenCreateResponse().getAccessToken() != null) {accessToken = response.getPopAuthTokenCreateResponse().getAccessToken();}}

接下来就说一下主要参数 从哪找 clientId,clientSecret

code 根据下图位置 看文档 自己拼接
拼接规则:
https://{授权页链接}?response_type=code&client_id={应用client_id}&redirect_uri={client_id对应的回调地址}&state={自定义参数}

我的是这样的 假如我的client_id=1111 回调地址=http://123 (回调地址上图可见)
https://fuwu.pinduoduo.com/service-market/auth?response_type=code&client_id=1111&redirect_uri=http://123&state=1212

在获取code之前需要在这里 授权店铺 点击添加 然后输入商家后台 注册时的账号名即可

把拼接好的地址在浏览器上打开 出现如下页面 点击授权即可

授权后出现的页面则是 回调地址 的网址页面 code 会在连接后

需要注意的时 code 10分钟过期一次 accessToken 24小时过期一次

在参数中还有一个 就是 template_url 模板url
这个参数 我上面代码有提供
按以上步骤来 就可以获取到面单号了 记得 物流审核完之后 让对应网点给点测试单

接下来就是面单打印了
文档地址:拼多多面单打印文档地址

打印命令数据封装

代码:

//拼接打印信息public  String  getText() {String clientId="clientId";String userId="userId";String uuid = UUID.randomUUID().toString().replaceAll("-", "");String printdata ="获取电子面单时返回的参数";JSONObject object = JSONObject.parseObject(printdata);JSONObject text = new JSONObject();text.put("ERPId",clientId);text.put("cmd", "print");text.put("requestID", uuid);JSONObject task = new JSONObject();com.alibaba.fastjson.JSONArray documents = new com.alibaba.fastjson.JSONArray();JSONObject document = new JSONObject();com.alibaba.fastjson.JSONArray contents = new com.alibaba.fastjson.JSONArray();JSONObject content = new JSONObject();JSONObject addData = new JSONObject();JSONObject sender = new JSONObject();JSONObject address = new JSONObject();//面单上是默认隐藏发件人信息   如果要显示的话 就在一面address 中加入即可  这address.put("city", "");address.put("detail", "");address.put("district", "");address.put("province", "");sender.put("address", address);sender.put("mobile", "");sender.put("name", "");addData.put("sender", sender);//到这content.put("addData", addData);content.put("encryptedData", object.get("encryptedData"));content.put("signature", object.get("signature"));content.put("templateUrl", object.get("templateUrl"));content.put("userid", userId);content.put("ver", object.get("ver"));contents.add(content);JSONObject content1 = new JSONObject();JSONObject data = new JSONObject();data.put("height", "");com.alibaba.fastjson.JSONArray lists = new com.alibaba.fastjson.JSONArray();//这可不填 这JSONObject list = new JSONObject();list.put("fontSize", "");list.put("height", "");list.put("left", "");list.put("text", "");list.put("top", "");list.put("width", "");lists.add(list);data.put("list", lists);JSONObject waterdata = new JSONObject();waterdata.put("text", "");data.put("waterdata", waterdata);data.put("width", "");//到这  就按我这里一样 给""content1.put("data", data);//如果面单模板是自定义模板  那就这里填自定义模板 url   如果是标准模板的话 这里就不填数据content1.put("templateURL","");contents.add(content1);document.put("contents", contents);//最好是面单号document.put("documentID", "面单号");documents.add(document);task.put("documents", documents);com.alibaba.fastjson.JSONArray notifyType = new com.alibaba.fastjson.JSONArray();notifyType.add("print");task.put("notifyType", notifyType);task.put("preview", "");task.put("previewType", "");//打印机名字 不传 默认系统打印机task.put("printer", "打印机名称");//唯一task.put("taskID", uuid);text.put("task", task);text.put("version", "1.0");return text.toString();}

在自己电脑上安装 打印组件

下载安装即可

然后在前端把 数据发送给组件 也可以用Java代码 发送 但是最好是前端 因为 打印组件是安装在 操作人员的电脑上的 也就是客户端 所以 发送给组件 组件的通信地址是 :ws://127.0.0.1:5000 (127.0.0.1 也就是本地

 function WebSocketTest(text){var ws = new WebSocket("ws://127.0.0.1:5000");if ("WebSocket" in window){// 打开一个 web socketws.onopen = function(){// Web Socket 已连接上,使用 send() 方法发送数据ws.send(text);console.log("发送给组件的信息:————————"+text);};ws.onmessage = function (evt){var received_msg = evt.data;var received=eval("("+ received_msg+")");var printStatu=received.printStatus;if(printStatu!=null&&printStatu!=""){var printStatus=eval(printStatu);for(var i=0;i<printStatus.length;i++){var status2=printStatus[i].status;var documentID=printStatus[i].documentID;if(status2=="success"){//打印成功console.log("打印成功"+status2);}}}console.log("数据已接收"+received_msg);};ws.onclose = function(){// 关闭 websocketconsole.log("连接已关闭");};}else{// 浏览器不支持 WebSocketalert("您的浏览器不支持 WebSocket!");return;}}

到这 整个 获取面单 和面单打印的流程就结束了 如果发现又什么 不对的地方可以 联系我 修正 ,接下来要做的就是 提交上线的一系列了

拼多多电子面单云打印接口对接 (跨境erp应用,电子面单应用)[拼多多获取电子面单,拼多多面单打印]相关推荐

  1. java金蝶星空云金蝶Java 对接 金蝶云星空 接口 对接 金蝶API 对接 金蝶 接口 解决 会话失效 问题 会话已失效,请重新登录

    java金蝶星空云金蝶Java 对接 金蝶云星空 接口 对接 金蝶API 对接 金蝶 接口 解决 会话失效 问题 会话已失效,请重新登录 1.准备工作 1.1 接口调用账户 1.2 下载 金蝶星空云 ...

  2. 使用JAVA对接跨境贸易电子商务数据交换接口拼接xml

    使用JAVA对接跨境贸易电子商务数据交换接口拼接xml 1.首先创建一个package-info.java 其中添加一下内容 /*** package-info.java* 放在和实体同一个包路径下* ...

  3. 快递电子面单批量打印接口对接demo-JAVA

    目前有三种方式对接电子面单: 1.快递公司:各家快递公司逐一对接接口 2.菜鸟:支持常用15家快递电子面单打印 3.快递鸟:仅对接一次,支持常用30多家主流快递电子面单打印 目前也是支持批量打印电子面 ...

  4. 快递单号查询接口对接指南

    快递查询接口API     快递查询接口是指快递查询网对外开放的应用程序接口,开发人员能够通过调用该接口与快递查询网进行交互,并基于该接口开发自己的快递查询应用程序.目前比较常用的接口有快递鸟API. ...

  5. 快递单号查询接口对接-快递鸟API.net源码c#

    前言 看完快递鸟api对接教程这篇文章,然后把源码复制到你的项目上,就能快速完成快递接口对接,调用快递鸟的极兔快递查询API接口,能查询到快递单号从收件.运输,到转运中心,派送到签收等各个环节的物流发 ...

  6. 积加(跨境ERP)与金蝶云星空单据集成对接

    方案简介 由于积加ERP 系统专注服务于亚马逊跨境电商是非常复杂和庞大的应用系统,具有非常丰富的业务流程.复杂的系统架构和服务接口.主要涉及系统解决店铺运营,店铺管理,供应链管理,协同智能补货.采用& ...

  7. 淘宝店铺订单接口,店铺订单插旗接口,ERP订单接口,订单备注接口,跨境电商订单接口,交易订单接口,官方开发平台接口对接方案

    一.淘宝天猫官方开放平台API接口对接接口说明: 1.通过注册账号获取key和secret,然后购买淘宝应用市场的相关店铺订单智能发货接口,拿到店铺授权后递交到会员中心平台进行店铺递交授权,授权成功后 ...

  8. 亚马逊、shopee、速卖通、ebay、newegg等跨境平台买手测评有哪些风险,卖家为何对自养号测评补单有偏见?

    随着越来越多的跨境电商平台入局,目前跨境电商平台亚马逊.ebay.wish.lazada.敦煌.shopee.速卖通.wayfair.阿里国际站.沃尔玛.newegg.美客多等跨境平台的卖家都在递增, ...

  9. 腾讯云服务器如何搭建跨境电商亚马逊多店铺管理环境

    前言 每个亚马逊卖家最担心的事情不是没有流量和订单,而是关于店铺账户的安全性.因为亚马逊非常重视买家购物体验,为了能够给买家提供更好的购物体验,在规则上是禁止同一个卖家在平台上同时操作多个账户的.如果 ...

最新文章

  1. Python是不是被严重高估了(转载)
  2. numpy meshgrid用法
  3. (转)access和SQL语句的区别
  4. Vivado时钟分组约束的三类应用
  5. 内核线程、轻量级进程、用户线程
  6. XGBoost、LightGBM与CatBoost算法对比与调参
  7. hive参数配置使用
  8. Datetime数据类型之datetime2和datetimeoffset数据类型
  9. 28 CO配置-控制-产品成本控制-成本对象控制-期末结算-定义行标识
  10. 《C#本质论(第4版)》一1.2 C#语法基础
  11. element-ui的tree配合原生
  12. 金蝶kis是怎么恢复套账的
  13. FHIR标准和国际基于FHIR的互联互通实践(1):如何定义互联互通?
  14. 常见的数据结构及其特征
  15. python xlwt_python xlwt模块简介
  16. 怎样保存html视频,网页上的视频怎么保存到电脑 网页视频保存到电脑的步骤教程...
  17. Word List 01
  18. matlab迭代实现矩阵运算,用matlab实现Rayleigh迭代计算矩阵特征值的程序
  19. This old-style function definition is not preceded by a prototype
  20. linux服务器新装hba卡,Linux系统上安装FC HBA卡驱动-weiyonghz-ChinaUnix博客

热门文章

  1. can和could的用法_can和could的用法
  2. 程序执行报错Missing Connection or ConnectionString 解决方法
  3. html阅读小红书,小红书排名怎么刷:以下HTML5页面大纲开始!
  4. 中国传统文化讲坛之“春风拂槛”唐文化论坛成功举办
  5. 系统或应用计算机指令的术语叫什么意思,[计算机软件及应用]BPM术语解释.doc
  6. 从gnuplot到GeoGebra的艰难之旅
  7. i.MX - RT1052调教总结
  8. 军犬舆情每日热点:天津成立联合调查组进驻权健集团;瑞幸咖啡巨亏8亿
  9. 用定制标签库和配置文件实现对JSP页面元素的访问控制
  10. 计算机绘图c2是什么,Cad里c2表示(cad中C1(C2)这样的符号是什么意思)