菜鸟云打印接入Demo

0. 接入流程图

1. 连接打印客户端

首先要打开打印客户端,然后使用下面的方法,连接客户端(WebSocket协议):

地址 :

function doConnect()
{
    socket = new WebSocket('ws://127.0.0.1:13528');

    // 打开Socket
    socket.onopen = function(event)
    {
        // 监听消息
        socket.onmessage = function(event)
        {
            console.log('Client received a message',event);
        };

        // 监听Socket的关闭
        socket.onclose = function(event)
        {
            console.log('Client notified socket has closed',event);
        };

    };
}

2. 打印机配置

2.1 获取打印机列表


function doGetPrinters() {
    var request  = {
        requestID : '12345678901234567890',
        version : '1.0',
        cmd : 'getPrinters';
    };

    socket.send(JSON.stringify(request));
}

2.2 获取打印机配置(弹出打印机配置界面)


function doPrinterConfig() {
    var request  = {
        requestID : "12345678901234567890",
        version : "1.0",
        cmd : "printerConfig"
    };

    socket.send(JSON.stringify(request));
}

2.3 设置打印机

function doSetPrinterConfig() {
    var request  = {
        requestID : "12345678901234567890",
        version : "1.0",
        cmd : "setPrinterConfig",
        printer : {
            name : "打印机名称",
            needTopLogo : true,
            needBottomLogo: false
        }
    };

    socket.send(JSON.stringify(request));
}

3 打印

  • 商家可以选择直接打印电子面单模板, 或是打印带自定义区域的用户模板

3.1 标准电子面单模板

商家无自定义区,只有标准电子面单模板

3.1.1 TOP调用请求相关数据

3.1.1.1 获取所有的菜鸟标准电子面单模板: cainiao.cloudprint.stdtemplates.get

返回的数据是StandardTemplateResult数组:

    cp_code : cp编码
    standard_templates : StandardTemplateDo[]
        standard_template_id : 标准模板id
        standard_template_name : 标准模板名称
        standard_template_url : 标准模板url

一个CP可以有多个电子面单标准模板, standard_template_url是电子面单标准模板的内容地址.

3.1.1.2 电子面单云打印接口: cainiao.waybill.ii.get

返回的数据是WaybillCloudPrintResponse:

    object_id : 请求id
    signature : 签名
    template_url : 模板URL
    waybill_code : 面单号
    data : 模板内容

3.1.2 电子面单模板打印数据

电子面单云打印接口返回的数据,构建模板打印数据:
{
    "templateURL":"http://cloudprint.cainiao.com/cloudprint/template/getStandardTemplate.json?template_id=801",
    "signature": "ALIBABACAINIAOWANGLUO",
    "waybillNo":"9890000076011"
    "data":{
        "key1":"value1",
        "key2":"value2"
    }
}

3.2 用户模板

用户模板包含标准电子模板和用户自定义区

3.2.1 TOP调用请求相关数据

3.2.1.1 获取用户使用的菜鸟电子面单模板信息 : cainiao.cloudprint.mystdtemplates.get

返回的数据是UserTemplateResult数组:

    cp_code : cp编码
    user_std_templates(UserTemplateDo[]) :用户使用的模板数据
        keys(KeyResult[]) :     keys
            key_name : key的名称
        user_std_template_url : 用户使用模板的url
        user_std_template_id : 用户使用模板的id
        user_std_template_name : 用户使用模板名称
数据返回的是用户使用到的菜鸟标准电子面单模板
3.2.1.1 获取商家的自定义区模板信息 : cainiao.cloudprint.customares.get

输入参数是 : seller_id, template_id(用户使用的标准电子模板id,3.2.1.1返回的user_std_template_id)

返回的数据是CustomAreaResult数组:

    custom_area_id : 自定义区id
    custom_area_url : 自定义区url
    keys(KeyResult[]) : keys
        key_name : key名称
3.2.1.2 电子面单云打印接口: cainiao.waybill.ii.get(同3.1.1.2)

3.2.2 用户模板打印数据格式

3.2.2.1 标准电子面单模板打印数据格式(同3.1.2)
{
    "templateURL":"http://cloudprint.cainiao.com/cloudprint/template/getStandardTemplate.json?template_id=801",
    "signature": "ALIBABACAINIAOWANGLUO",
    "waybillNo":"电子面单号"
    "data":{
        "key1":"value1",
        "key2":"value2"
    }
}
3.2.2.2 自定义区打印数据格式
{
    "templateURL":"http://cloudprint.cainiao.com/cloudprint/customArea/queryCustomAreaList4Top.json?custom_area_id=2201&user_id=2066393830",
    "data":{
        "key1":"value1",
        "key2":"value2"
    }
}

其中的templateURL来源于3.2.1.1, data需要根据key名称自行填充.

3.3 打印

面单号 :

电子面单URL :

自定义区URL :

function doPrint()
{
    request  = {
        cmd : "print",
        requetID : "12345678901234567890",
        version : "1.0",
        task : {
            taskID : "1",
            preview : false,
            printer : "km200",
            documents : [
                {
                    documentID : "9890000076011",
                    contents : [
                        //电子面单部分
                        {
                            templateURL : "http://cloudprint.cainiao.com/cloudprint/template/getStandardTemplate.json?template_id=801",
                            signature : "ALIBABACAINIAOWANGLUO",
                            "data": {
                              "recipient": {
                                "address": {
                                  "city": "北京市",
                                  "detail": "花家地社区卫生服务站三层楼我也不知道是哪儿了",
                                  "district": "朝阳区",
                                  "province": "北京",
                                  "town": "望京街道"
                                },
                                "mobile": "1326443654",
                                "name": "张三",
                                "phone": "057123222"
                              },
                              "routingInfo": {
                                "consolidation": {
                                  "name": "杭州",
                                  "code": "hangzhou"
                                },
                                "origin": {
                                  "code": "POSTB"
                                },
                                "sortation": {
                                  "name": "杭州"
                                },
                                "routeCode": "380D-56-04"
                              },
                              "sender": {
                                "address": {
                                  "city": "北京市",
                                  "detail": "花家地社区卫生服务站二层楼我也不知道是哪儿了",
                                  "district": "朝阳区",
                                  "province": "北京",
                                  "town": "望京街道"
                                },
                                "mobile": "1326443654",
                                "name": "张三",
                                "phone": "057123222"
                              },
                              "shippingOption": {
                                "code": "COD",
                                "services": {
                                  "SVC-COD": {
                                    "value": "200"
                                  }
                                },
                                "title": "代收货款"
                              },
                              "waybillCode": "9890000160004"
                            }
                        },
                        //自定义区部分
                        {
                            templateURL : "http://cloudprint.cainiao.com/cloudprint/customArea/queryCustomAreaList4Top.json?custom_area_id=642230",
                            data : {
                                "item_name": "我是你要的商品芭比娃娃。。。",
                            }
                        }
                    ]
                }
            ]
        }
    };

    socket.send(JSON.stringify(request));
}

4 查询打印任务

4.1 根据taskID查询打印任务

function doGetTaskStatus() {
    var request  = {
        requestID : "12345678901234567890",
        version : "1.0",
        cmd : "getTaskStatus",
        taskID : [
            "1","2"
        ]
    };
    socket.send(JSON.stringify(request));
}

4.2 根据面单号查询打印任务

waybillNO :

function doGetDocumentStatus() {
    var request  = {
        requestID : "12345678901234567890",
        version : "1.0",
        cmd : "getDocumentStatus",
        documentIDs : [
            "9890000076011"
        ]
    };
    socket.send(JSON.stringify(request));
}

5 参考