PHP对接快宝云打印API

1,023 阅读3分钟

注:本文对接的功能包括通过快宝云电子面单接口获取快递单号、打印面单两个功能


一.连接打印机

本次对接的打印机为热敏打印机,不支持云打印,需要使用快宝云打印软件,在电脑上链接打印机,使之可以通过云控制快宝云软件,软件控制打印机,实现云打印功能

1.下载快宝云软件,安装完成后先选择本地打印机




2.选择打印机后生成访问密码,本密码为调用打印面单的时候的本台打印机的识别标识


二.生成电子面单

参考代码:

 private $host = 'https://kop.kuaidihelp.com/test';
    private $appId = '*****';//快宝云平台appid
    private $appKey = '****************';//快宝云平台app秘钥
    /**
     * 获取快递单号
     */
    public function getOddNumber($body_data,$sender_data,$recipient_data)
    {
        $headers = array();
        //根据API的要求,定义相对应的Content-Type
        array_push($headers, "Content-Type".":"."application/x-www-form-urlencoded; charset=UTF-8");
        $method = 'account.waybill.get';
        $ts = time();
        $body_data = [
            'customer_name' => "*******",//快递网点或快递开放平台申请的大客户账号。
            'customer_password' => "*******",//快递网点或快递开放平台申请的大客户密码
            'order_id' => "KB101100111011232",//订单编号,必须唯一
            'trade_name' => "智能手机",//商品名称
            'shipper_type' => "yt",//快递公司标识符
            'pay_type' => "1",//支付方式
            'weight' => "1.23",//物品总重量 :kg
        ];

        //寄件方信息列表
        $sender_data = [
            'company' => '南山区深圳软件产业基地',//寄件人姓名
            'name' => '张飞鸿',//寄件方公司名称
            'tel' => '南山区深圳软件产业基地',//固定电话(注:固定电话和手机号码必须填写一个)
            'mobile' => '18688888888',//手机号码(注:固定电话和手机号码必须填写一个)
            'province' => '广东省',//寄件方所在省名称,如果所在省有省字,则不能略
            'city' => '深圳市',//寄件方所在市名称,如果所在市含有市字,则不能省略
            'district' => '南山区',//寄件方所在地区(区/县/镇)
            'address' => '深圳软件产业基地',//寄件方地址
        ];
        //收件方信息列表
        $recipient_data = [
            'company' => '宝芝林贸易',//收件人姓名
            'name' => '王三姨',//收件方公司名称
            'tel' => '95127777',//固定电话(注:固定电话和手机号码必须填写一个)
            'mobile' => '13666666666',//手机号码(注:固定电话和手机号码必须填写一个)
            'province' => '江苏省',//收件方所在省名称,如果所在省有省字,则不能略
            'city' => '苏州市',//收件方所在市名称,如果所在市含有市字,则不能省略
            'district' => '沧浪区',//收件方所在地区(区/县/镇)
            'address' => '人民路沧浪亭街31号宝芝林贸易有限公司',//收件方地址
        ];
        $body_data['sender'] = $sender_data;
        $body_data['recipient'] = $recipient_data;
        $bodys = [
            "app_id" => $this->appId,
            "method" => $method,
            "sign" => md5($this->appId . $method . $ts . $this->appKey),
            "ts" => $ts,
            "data" => json_encode($body_data)
        ];
        $bodys = http_build_query($bodys);
        $url = $this->host;
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($curl, CURLOPT_FAILONERROR, false);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_HEADER, false);
        if (1 == strpos("$".$this->host, "https://"))
        {
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        }
        curl_setopt($curl, CURLOPT_POSTFIELDS, $bodys);
        return json_decode(curl_exec($curl));
    }

三.打印电子面单

参考代码

    /**
     * 打印面单
     */
    public function printOdd($body_data,$print_data)
    {
        $host = "https://kop.kuaidihelp.com/api";
        $headers = array();
        //根据API的要求,定义相对应的Content-Type
        array_push($headers, "Content-Type".":"."application/x-www-form-urlencoded; charset=UTF-8");
        $method = 'cloud.print.do';
        $ts = time();
        $print_data[] = [
             'pickupCodeNew' =>$pickupCodeNew,
             'template_id' => '84012',//打印模板ID(点此查看系统支持的所有模板);如果为空,则以云打印机上设置的模板为准,可到“微快递小邮筒”公众号的“管理”->“云打印机设置”中设置默认的模板
             'cp_code' => 'YTO',//快递品牌
             'pickup_code' => $pickupCodeNew,//取件码
             'print_type' => '3',//打印类型,1:仅生成底单 2:仅打印 3:打印并生成底单,默认为3
             'user_name' => '',//打印人名称
             'note' => $value['remark'],//备注
             'goods_name' => $value['product_type'],//物品名称,最长50个字符
             'weight' =>$value['weight'],//物品重量,单位为公斤
             'tid' => $value['order_number'],//任务ID,建议用订单号之类的唯一标识,提交和回调时将返回该字段, 后台申请单号时也将使用该字段作订单号
             'recipient'=>[//收件人信息
                 'address'=>[//收件人地址
                     'province' => $value['consignee_province'],//收件方所在省名称,如果所在省有省字,则不能略
                     'city' => $value['consignee_city'],//收件方所在市名称,如果所在市含有市字,则不能省略
                     'district' => $value['consignee_area'],//收件方所在地区(区/县/镇)
                     'detail' => $value['consignee_address'],//收件方地址

                 ],
                 'mobile' =>$value['consignee_phone'],//收件人手机号码,手机与固话必须至少一个有值
                 'name' => $value['consignee_name'],//收件人姓名
                 'phone' => '',//收件人固话号码,手机与固话必须至少一个有值
             ],
             'routing_info'=>[
                 'consolidation'=>[
                     'name' => $value['consolidation_name'],
                     'code' =>  $value['consolidation_code'],
                 ],
                 'route_code' => '',
                 'sortation' =>[
                     'name' =>'',
                 ],

             ],
             'sender' => [//发件人信息
                 'address'=>[//发件人地址
                     'province' =>$value['province'],//寄件方所在省名称,如果所在省有省字,则不能略
                     'city' => $value['city'],//寄件方所在市名称,如果所在市含有市字,则不能省略
                     'district' => $value['area'],//寄件方所在地区(区/县/镇)
                     'detail' => $value['address'],//寄件方地址
                 ],
                 'mobile' => $value['phone'],//发件人手机号码,手机与固话必须至少一个有值
                 'name' => $value['name'],//发件人姓名
                 'phone' => '',//发件人固话号码,手机与固话必须至少一个有值
             ],
             'waybill_code' =>$value['waybill_code']//运单号。若为空,则使用云打印机上绑定的单号源自动获取运单号,参见示例代码:结合小邮筒配置单号源打印
        ];

        $body_data['print_data'] = $print_data;

        $bodys = [
            "app_id" => $this->appId,
            "method" => $method,
            "sign" => md5($this->appId . $method . $ts . $this->appKey),
            "ts" => $ts,
            "data" => json_encode($body_data)
        ];
        $bodys = http_build_query($bodys);
        $url = $host;
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($curl, CURLOPT_FAILONERROR, false);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_HEADER, false);
        if (1 == strpos("$".$host, "https://"))
        {
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        }
        curl_setopt($curl, CURLOPT_POSTFIELDS, $bodys);
        return json_decode(curl_exec($curl));

API参考文档:open.kuaidihelp.com/api