注:本文对接的功能包括通过快宝云电子面单接口获取快递单号、打印面单两个功能
一.连接打印机
本次对接的打印机为热敏打印机,不支持云打印,需要使用快宝云打印软件,在电脑上链接打印机,使之可以通过云控制快宝云软件,软件控制打印机,实现云打印功能
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