达芬奇云打印组件接入Demo

0. 接入流程图

1. 连接打印客户端

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

地址 :

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

        // 打开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 获取所有的达芬奇标准电子面单模板: /logistics/templateList

返回的数据是StandardTemplateResult数组:

        logistics_code : cp编码   
        perview_url : 预览地址
        template_code : 标准模板id
        template_name : 标准模板名称
        template_url : 标准模板url
        template_type : 模板类型
        version : 面单版本
    

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

3.1.1.2 电子面单云打印接口(暂不支持):

返回的数据是WaybillCloudPrintResponse:

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

3.1.2 电子面单模板打印数据

电子面单云打印接口返回的数据,构建模板打印数据:
{
    "err_infos": [],
    "waybill_infos": [
        {
            "order_id": "4734030940700083755|1",
            "print_data": "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",
            "track_no": "UT2900007709084"
        }
    ]
}
    

3.2 用户模板(暂不支持)

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

3.2.1 TOP调用请求相关数据

3.2.1.1 获取用户使用的达芬奇电子面单模板信息 :

返回的数据是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 获取商家的自定义区模板信息 :

输入参数是 : 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 电子面单云打印接口: (同3.1.1.2)

3.2.2 用户模板打印数据格式

3.2.2.1 标准电子面单模板打印数据格式(同3.1.2)
   {
        "templateURL":"https://sf3-ttcdn-tos.pstatp.com/obj/logistics-davinci/template/template_76.xml",
        "signature": "签名",
        "waybillNo":"电子面单号"
        "data":{
            "key1":"value1",
            "key2":"value2"
        }
    }
    
3.2.2.2 自定义区打印数据格式
   {
        "templateURL":"",
        "data":{
            "key1":"value1",
            "key2":"value2"
        }
    }
    

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

3.3 打印

3.3.1 明文打印

面单号 :

电子面单URL :

自定义区URL :

function doPrint()
    {
        request  = {
            cmd : "print",
            requetID : "12345678901234567890",
            version : "1.0",
            task : {
                "taskID" : "1",
                "preview" : false,
                "printer" : "km200",
                "documents" : [
                    {
                        "documentID" : "9890000160004",
                        "contents" : [
                            //电子面单部分
                            {
                                "templateURL" : "https://sf3-ttcdn-tos.pstatp.com/obj/logistics-davinci/template/template_76.xml",
                                "data": {
                                    "trackNo":"UT2900004974342",
                                    "logoUrl":"https://sf3-ttcdn-tos.pstatp.com/obj/power/jtexpress_logo.png",
                                    "receiverInfo": {
                                        "address": {
                                            "cityName": "北京市",
                                            "countryCode": "CHN",
                                            "detailAddress": "江南大道恒鑫大厦",
                                            "districtName": "朝阳区",
                                            "provinceName": "北京市",
                                        },
                                        "contact":{
                                            "mobile":"18212982654",
                                            "name":"云宽"
                                        }
                                    },
                                    "senderInfo": {
                                        "address": {
                                            "cityName": "南京市",
                                            "countryCode": "CHN",
                                            "detailAddress": "不知道详细地址",
                                            "districtName": "玄武区",
                                            "provinceName": "江苏省",
                                        },
                                        "contact":{
                                            "mobile":"18313137654",
                                            "name":"光柱"
                                        }
                                    },
                                    "routingInfo":{
                                        "package":{
                                            "name":"杭州",
                                            "code":"hangzhou"
                                        },
                                        "markDestination":{
                                            "name":"洒大地",
                                            "code":"POSTB"
                                        },
                                        "sortCode":"380D-56-04"
                                    },
                                    "services":{
                                        "SVC_COD":{
                                            "code":"SVC_COD",
                                            "value":"200.13",
                                            "title":"代收货款"
                                        },
                                        "SVC_INSURE":{
                                            "code":"",
                                            "value":"",
                                            "title":""
                                        }
                                    },
                                    "sfServices":{
                                        "proCode":"",
                                        "destRouteLabel":"",
                                        "codingMapping":"",
                                        "codingMappingOut":"",
                                        "abFlag":"",
                                        "destTeamCode":"",
                                        "proName":""
                                    },
                                    "jdService": {
                                        "transType": "2",
                                        "promiseTimeType": "1",
                                        "sourceSortCenterName": "北京大兴分拣中心",
                                        "targetSortCenterName": "北京大兴分拣中心",
                                        "originalCrossCode": "5-S09",
                                        "destinationCrossCode": "5-S09",
                                        "siteName": "*北京亦庄营业部",
                                        "road": "017",
                                        "coverCode": "T",
                                        "distributeCode": "110"
                                    }
                                }
                            }
                        ]
                    }
                ]
            }
        };

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

3.3.2 密文打印

面单号 :

电子面单URL :

自定义区URL :

                                        function doPrint()
    {
        request  = {
            "cmd": "print",
            "requetID": "12345678901234567890",
            "version": "1.0",
            "task": {
                "taskID": "1",
                "preview": false,
                "printer": "km200",
                "documents": [{
                    "documentID": "9890000160004",
                    "contents": [{
                        "templateURL": "https://sf3-ttcdn-tos.pstatp.com/obj/logistics-davinci/template/template_76.xml",
                        "params": "access_token=值&app_key=值&method=logistics.getShopKey&param_json={}&timestamp=时间&v=2&sign=值&sign_method=hmac-sha256,参数值详见电商开放平台https://op.jinritemai.com/docs/guide-docs/10/23,其中的method=logistics.getShopKey,param_json={}",
                        "signature": "nlJqqkSAMnLawmmBJQGTrP59TDcbpvAodSo9EyvtR8cjj8ml/A1s3GJi3OfUiZpGcrcjFSPU3iSsl4WxB6uCgftnlP4RmNMsdmiUUZBPHX6htF9VGWeCplOFVHx9j2yTppQqkoyw46wcTEh/EGSB4trfyE+KObbythC8/s1LRelU4HJxPhSlTUQ2gusqQn6IWSbosZ43v+s/6snud4RxZ7AKkRA+kZE8ihOHDzHWG9QYBB2afzmxf5oqlukRgGxxY7o4HvsSxTHhBVuYQou68eNizovFGl7YeWK47hIzQVa/b3Zp+ZxNwUhrxy/50ATb+gumw+ds1HvhvKf7FFEzUg==",
                        "encryptedData": "dnZhvCOQBMFDvs1eJlBhe4Gn/E6PqWYKrmT+mI0ao+9k9sf48d0duCB6wk16btzs4jjn6URndrkLStS4vPVl4jzpq6wdVqsdOj09QbFqss8lBJ51wA2/xbgNevzsyAG2EVRcTUevXP1UILcDha/GVT0rsqBnwA4KFsiIzHFO/1/6gyZIs2+R7kZHvJjU3vFvlYHHGeZktPPZNm/GPnCaNkaqKSDaaCJI7jQ8oPKGXVL6rbrnrODUWo1hViKFrt9Mo4mzRf8NFhkESELcAG9hjxQy+6aVDsL3zwumTXOFhTsKEi6/LXEKnwjy9Cm+S+I95d+V7mET6+StGIL7YQz0BnP1Vkquwy/oiSXNeMpIhNpWnfFcSdOE/PO49KJ0nfT/YYyx3/o+r4nJkGiCACrWbfrVm+G30nHspi/akWyJy0P5J7haAm/qoxhE0hajb4/AnO2CJenp+Upd9czbqoCavY7aFvA9ChVEts0AUTyHPZ/JQ0h8FMNoDhd7AXJF/z0OlKM/ZD9NstXsDGTCf8Bh61eQC2Dc+pjMyGsqXVkjtTb+RgP2xgW6G7y2W8x7N01kD+AKbD23j8Lu1AWSjn3UyS873wTa1YCwXPwNY0qyw+kHFcJPXbeELmVyZ8p7w4gTg/NGxRAve1whuhWU1wNNlGSZTW8J9Lxd8ZT+TlXrGG+U4v1kxhL8pR9Oh3sGh369gkrlMX2W4pq2nDJCy1dWzVI107xypebgIDwP88a3STmxl46sTkaiRk/wMy6O24Ifrlgx7jUUyH0ZBxFDFl+CIGYhCMpGB91637gDMcADFIK9W/2HgEDe0lkQxi/ixOf1aAGPj7I9hLz6OLfq7wh34TgHZZVF+x1haeIgodMeFGr2i2Jiy/3bTUznbnfCp5qbK1E0LourNF0G+vML+vwnFcPUSq3sSS0bAngM8hvyim69o3+ZbS8kIK23hZrxWrNdnNJAdpcqaGInx/2f0N8tCajUzwx/BMaMWBPZtC6YpXBGUjhXafM6COwwSjr7hMeFYYwsPCM67UkMzALrNF0RPpAs5eaix98u0QJpQFl28Hcvcwx8n8AzFThk2Q4EE3ApTNHkX/BeEZ+4U7JEE5NCL5xN/TbYigghgeQRz3YjEwXUhrN3PA3EtupBOfI4Spn513Woi9fmC/fN49djg+3+o9Wiv1dpcXVEY45GiZAFxIXrHQf9tvlSg5vbHMD38l8W4Ae/ubOpxEOAVFr6x3wkrtTbFhmYBRRlNyGsidaBJ7ayhM7u8eSJlBvUXpmO8V+E83eZh5p9uT9XOzB6aLo8jw==",
                        "addData": {
                            "senderInfo": {
                                "address": {                                        
                                    "cityName": "南京市",
                                        "countryCode": "CHN",
                                        "detailAddress": "软件大道10号华为南研所E区",
                                        "districtName": "雨花台区",
                                        "provinceName": "江苏省"
                                    },
                                "contact": {
                                    "mobile": "13282160693",
                                     "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 参考