'顺丰速运', 'EMS' => 'EMS', 'ZJS' => '宅急送', 'YTO' => '圆通速递', 'HTKY' => '百世快递', 'ZTO' => '中通快递', 'YD' => '韵达速递', 'STO' => '申通快递', 'DBL' => '德邦快递', 'UC' => '优速快递', 'JD' => '京东快递', 'XFEX' => '信丰物流', 'ANE' => '安能物流', 'GTO' => '国通快递', 'HHTT' => '天天快递', 'KYSY' => '跨越速运', 'YZPY' => '邮政快递包裹', 'ZTKY' => '中铁快运', 'YZBK' => '邮政国内标快', 'YCWL' => '远成快运', 'UAPEX' => '全一快递', 'SURE' => '速尔快递', 'PJ' => '品骏快递', 'DBLKY' => '德邦快运', 'ANEKY' => '安能快运', 'JDKY' => '京东快运', 'LB' => '龙邦快递', 'CND' => '承诺达', 'HTKYKY' => '百世快运', 'ZTOKY' => '中通快运', 'SX' => '顺心捷达', 'JTSD' => '极兔速递' ]; public $province = [ '北京' => 11, '天津' => 12, '河北省' => 13, '山西省' => 14, '内蒙古自治区' => 15, '辽宁省' => 21, '吉林省' => 22, '黑龙江省' => 23, '上海' => 31, '江苏省' => 32, '浙江省' => 33, '安徽省' => 34, '福建省' => 35, '江西省' => 36, '山东省' => 37, '河南省' => 41, '湖北省' => 42, '湖南省' => 43, '广东省' => 44, '广西壮族自治区' => 45, '海南省' => 46, '重庆' => 50, '四川省' => 51, '贵州省' => 52, '云南省' => 53, '西藏自治区' => 54, '陕西省' => 61, '甘肃省' => 62, '青海省' => 63, '宁夏回族自治区' => 64, '新疆维吾尔自治区' => 65, '台湾' => 71, '香港特别行政区' => 81, '澳门特别行政区' => 82, ]; public function __construct() { if (!app('plugins')->isEnabled('exhelper')){ return json_encode(array('result'=>'error','resp'=>'插件没有开启')); } $set = ExhelperSys::uniacid()->first(); if ($set) { $this->name = trim($set['name']); $this->apikey = trim($set['apikey']); $this->merchant_id = trim($set['merchant_id']); if (empty($set['apikey']) || empty($set['merchant_id'])){ return $this->errorJson('err','没有设置'); } } // else { // return $this->message('请配置面单', Url::absoluteWeb('plugin.exhelper.admin.panel.index')); // } } public function waybill() { $ordersn = request()->id; // $this->zip_code = request()->zip_code; if (!app('plugins')->isEnabled('exhelper')){ return json_encode(array('result'=>'error','resp'=>'插件没有开启')); } $order_model = Order::where('id', $ordersn)->first(); if (!$ordersn || !$order_model) { return json_encode(array('result'=>'error','resp'=>'请传参数订单编号ordersn')); } if (count($ordersn) > 1) { return json_encode(array('result'=>'error', 'resp'=>'订单超过规定数量,请选择1条订单')); } $template_model = ElectronicTemplate::uniacid()->where('order_sn',$order_model['order_sn'])->first(); if ($template_model){ $expressCompanies = \app\common\repositories\ExpressCompany::create()->all(); $company = ''; array_filter( $expressCompanies, function($var) use($template_model,&$company){ if(in_array($template_model['shipper_code'],$var)){ $company = $var; return $var; } }); return json_encode(array('result'=>'success', 'resp'=>['logistic_code'=>$template_model['logistic_code'], 'shipper_code'=>$template_model['shipper_code'],'company'=> $company])); } if (!is_array($ordersn) || count($ordersn) == 1) { // $order_sn = explode(',', $ordersn); $order = Order::where('id', $ordersn) ->uniacid() ->with('hasManyOrderGoods') ->with('hasManyOrderGoods.goods') ->with('hasOneDispatchType') ->with('belongsToMember') ->with('address') ->first() // ->find($id) ->toArray(); // dd($order['has_many_order_goods']); return $this->beginHandle($order); } } /** * 快递鸟建议用户使用时,详细查看以下注意事项: * 1、顺丰速运、中铁快运、宅急送、全一快递可以不申请电子面单客户号,直接下单(如果用户已和网点申请到电子面单客户号,严格按照表格对应关系填写); * 3、顺丰速运,运费现付、到付发货,无需客户号,运费如需月结,仅需要联系网点申请月结号(10位数的纯数字格式); * 4、通过快递鸟用户管理后台申请的优速电子面单客户号,只需要客户编号即可正常使用电子面单接口,通过当地快递网点线下申请的需要使用客户编号和密钥才可下单; * 5、通过快递鸟用户管理后台申请的中通电子面单客户号,只需要商家ID即可正常使用电子面单接口,通过当地快递网点线下申请的需要使用商家ID和商家接口密码才可下单; * 6、宅急送可直接请求电子面单接口下单使用,不用申请电子面单客户号,如果用户是自己联系当地网点申请电子面单客户号,那么LogisticCode(快递单号)字段为必填(网点会提供); * 7、速尔快递,必须传值SendStaff收件快递员,否则直接影响网点收件; * 8、安能快递,仅支持通过快递鸟后台申请的客户号发货,客户号格式如1111111_ANE666,网点名称格式如6666666. * 京东快运下单,需联系京东站点维护事业部编码(EBU开头)、仓库编码以及寄件人简称。 * 宅急送、速尔快递、远成快运、品骏快递、快运公司无测试环境 * */ public function beginHandle($order) { // 正式地址: http://api.kdniao.com/api/eorderservice(不加密)https://api.kdniao.com/api/eorderservice(加密) $add = explode(' ', $order['address']['address']); \Log::info('-=-=add=-=-', $add); $send = SendUser::uniacid()->where('isdefault', 1)->first(); \Log::info('-=-=send=-=-', $send); if (empty($send)) { //查找寄件人信息表 die(json_encode(array('result' => 'error', 'resp' => '寄件人信息为空,请输入后在选择。'))); // return $this->message('寄件人信息为空,请输入后在选择', Url::absoluteWeb('plugin.exhelper.admin.panel.index')); } $send = $send->toArray(); $panel = ExhelperPanel::uniacid()->where('isdefault', 1)->first(); // dd($panel->exhelper_style); \Log::info('panel--uniacid', [$panel, \Yunshop::app()->uniacid]); if (empty($panel)) { die(json_encode(array('result' => 'error', 'resp' => '无默认模板信息'))); // return $this->message('无默认模板信息', Url::absoluteWeb('plugin.exhelper.admin.panel.index')); } \Log::info('begin---panel'); $sender = array( 'Name' => $send['sender_name'], 'Mobile' => $send['sender_tel'], 'ProvinceName' => $send['sender_province'], 'CityName' => $send['sender_city'], 'ExpAreaName' => $send['sender_area'], 'Address' => $send['sender_street'].$send['sender_address'] ); $receiver = array( 'Name' => $order['address']['realname'], 'Mobile' => $order['address']['mobile'], 'ProvinceName' => $add[0], 'CityName' => $add[1], 'ExpAreaName' => $add[2], 'Address' => $add[3].$add[4] ); if ($receiver['Address'] == ''){ $receiver['Address'] = $add[3].$add[4].$add[5]; } if (in_array($panel['exhelper_style'], ['EMS','YZPY','YZBK'])) { //为邮政时需要获取邮政编码 if ($this->getCode($send['sender_province'],$send['sender_city'], $send['sender_area']) != 1) { $sender['PostCode'] = $sender['sender_code'] ? : $this->getCode($send['sender_province'],$send['sender_city'], $send['sender_area']); } // if (empty($this->zip_code)){ // die(json_encode(array('result' => 'error', 'resp' => '邮政编码不能为空'))); // }else{ // $receiver['PostCode'] = $this->zip_code; // } if ($this->getCode($add[0],$add[1], $add[2]) != 1) { $receiver['PostCode'] = $this->getCode($add[0],$add[1], $add[2]); } } // dd($sender, $receiver); $commodity = []; $weight = ''; $goos_total = ''; foreach ($order['has_many_order_goods'] as $k => $v) { $commodityOne = [ //商品名称 'GoodsName' => $v['title'], //商品件数 'Goodsquantity' => $v['total'], //商品价格 'GoodsPrice' => $v['goods_price'], //商品编码 'GoodsCode' => $v['goods_sn'], //商品描述 // 'GoodsDesc' => $v['goods_option_title'], //商品重量 'GoodsWeight' => $v['goods']['weight'] ? $v['goods']['weight'] * $v['total'] : '', //商品体积 'GoodsVol' => '' ]; $weight += $v['goods']['weight'] ? $v['goods']['weight'] * $v['total'] : 0; $goos_total .= $v['title'].' '.$v['goods_option']['title'].' x '.$v['total'].'
'; $commodity[] = $commodityOne; } // dd($commodity,$weight); $PayType = $panel['panel_name'] == '德邦快递' ? 3 : 1; $data = [ 'Sender' => $sender, 'Receiver' => $receiver, //商品信息 'Commodity' => $commodity, // 包裹总重量 (kg) double(10,3) 'Weight' => $weight ?: '', // 运输方式 1陆运 2空运 默认为1 'TransType' => 1, //快递公司编码 'ShipperCode' => $panel['exhelper_style'], //第三方订单号 物流为京东且 ExpType =1时必填 'ThrOrderCode' => $order['order_sn'], //订单编号 'OrderCode' => $order['order_sn'],//$order['order_sn'].rand(1111, 9999), //运费支付方式 1现付 2到付 3月结 4第三方付 // 'PayType' => $order['pay_type_id'], 'PayType' => $PayType, // 快递公司业务类型 'ExpType' => 1, //是否要求签回单 0不要求 1要求 'IsReturnSignBill' => 0, //快递运费 'Cost' => '', //其他费用 'OtherCost' => '', //是否通知快递员上门揽件 'IsNotice' => $panel->isself, //包裹数 'Quantity' => count($order['has_many_order_goods']), //包裹为快运时必填,包裹总体积 'Volume' => '', // 'Remark' => $order['remark'], 'Remark' => $order['note'], //返回电子面单模板 'IsReturnPrintTemplate' => 1, //送货方式 0自提 1送货上门 2送货上楼 'DeliveryMethod' => 1, 'CustomArea' => $goos_total//商品数量 ]; /* * JD * 快递鸟用户,通常ExpType传值6. * 订单来源:京东商城 1 * 订单来源:天猫 2 * 订单来源:苏宁 3 * 订单来源:亚马逊中国 4 * 订单来源:ChinaSkin 5 * 订单来源:其他销售平台 6 */ if ($panel['exhelper_style'] == 'JD'){ $data['ExpType'] = 6; } // if ($panel['exhelper_style'] == 'SF'){ // $data['TemplateSize'] = 15001; // } //取模板样式传到快递鸟 $data['TemplateSize'] = strstr($panel['panel_style'],'mm') ? '' : $panel['panel_style']; // dd($data); // dd($panel->isself); if ($panel->isself == 1) { //上门揽件时间 $data['StartDate'] = $panel->begin_time; $data['EndDate'] = $panel->end_time; } $set = $this->panelSet(); if($panel['exhelper_style'] == 'JTSD'){ //极兔速递参数不同 $data['DeliveryMethod'] = 3; //6-代收点自提, 5-快递柜自提,4-站点自提,3-派送上门 $data['Weight'] = $data['Weight']/1000; //使用千克 } if (in_array($panel['exhelper_style'], ['DBL','PJ','DBLKY'])) { $data['CustomerName'] = trim($panel['panel_sign']); } elseif (!in_array($panel['exhelper_style'], ['SF','ZTKY', 'UAPEX', 'HOAU']) || ($panel['exhelper_style'] == 'EMS' && $sender['ProvinceName'] != '广东省')) { $data['CustomerName'] = trim($panel['panel_no']); } else { $data['CustomerName'] = ''; } $data['CustomerPwd'] = $set[$panel['exhelper_style']]['CustomerPwd'] ? trim($panel['panel_pass']) : ''; $data['MonthCode'] = ($set[$panel['exhelper_style']]['MonthCode'] && $panel['exhelper_style'] == 'YTO') ? trim($panel['panel_pass']) : ''; $data['SendSite'] = $set[$panel['exhelper_style']]['SendSite'] ? trim($panel['panel_code']) : ''; //快递公司参数 SendStaff-速尔快递需要提供收件快递员信息,LogisticCode-宅急送需要快递单号信息-有待完善 $data['SendStaff'] = (isset($set[$panel['exhelper_style']]['SendStaff']) && $panel['exhelper_style'] == 'SURE') ? '' : ''; $data['LogisticCode'] = (isset($set[$panel['exhelper_style']]['LogisticCode']) && $panel['exhelper_style'] == 'ZJS') ? '' : '' ; //快运公司参数 京东快运需要仓库编码和寄件人简称 $data['WareHouseID'] = (isset($set[$panel['exhelper_style']]['WareHouseID']) && $panel['exhelper_style'] == 'JDKY') ? trim($panel['panel_code']) : '' ; $data['Name'] = (isset($set[$panel['exhelper_style']]['Name']) && $panel['exhelper_style'] == 'JDKY')? trim($send['sender_name']) : ''; // dd($data); // header('Content_Type', 'Content-Type:application/json'); //return $this->getCompanyPanel($data, $this->test_panel_url, $order['id']); //测试地址 return $this->getCompanyPanel($data, $this->panel_url, $order['id'],$order['order_sn']); //正式地址 } //获取快递公司电子面单 public function getCompanyPanel($data, $url, $order_id,$order_sn) { \Log::info('get---panel'); //调用电子面单 $jsonParam = json_encode($data, JSON_UNESCAPED_UNICODE); $jsonResult = $this->submitEOrder($jsonParam, $url); \Log::info('data2', $data); //解析电子面单返回结果 $result = json_decode($jsonResult, true); \Log::info('result', $result); if($result['ResultCode'] == '100' && $result['Success'] == 'true') { $panelsetting = ExhelperPanel::uniacid()->where('isdefault',1)->first()->toArray(); $opera = new OrderService; $param = array( 'order_id' => $order_id, 'express_code' => $result['Order']['ShipperCode'], 'express_company_name' => $this->company[$result['Order']['ShipperCode']], 'express_sn' => $result['Order']['LogisticCode'] ); // dd($result); // $opera->orderSend($param); if (!$this->saveTemplate($result,$order_sn,$data)){ return json_encode(array('result'=>'error','resp'=>'电子面单储存失败')); } $expressCompanies = \app\common\repositories\ExpressCompany::create()->all(); $company = ''; $shipperCode = $result['Order']['ShipperCode'] ?: $data['ShipperCode']; array_filter( $expressCompanies, function($var) use($result,&$company,$shipperCode){ if(in_array($shipperCode,$var)){ $company = $var; return $var; } }); return json_encode(array('result'=>'success', 'resp'=>['logistic_code'=>$result['Order']['LogisticCode'], 'shipper_code'=>$shipperCode , 'company'=> $company])); } else { return json_encode(array('result'=>'error', 'resp'=>$result['Reason'])); } } /* * 电子面单打印优化,储存电子面单模板 */ public function saveTemplate($result,$order_sn,$data) { if (!$order_sn){ return false; } if (!$result){ return false; } $data = [ 'uniacid' => \Yunshop::app()->uniacid, 'order_sn' => $order_sn, 'print_template' => $result['PrintTemplate'], 'mark_destination' => $result['Order']['MarkDestination'] ?: '', 'logistic_code' => $result['Order']['LogisticCode'] ?: '', 'shipper_code' => $result['Order']['ShipperCode'] ?: $data['ShipperCode'], 'order_code' => $result['Order']['OrderCode'] ?: '', 'kdn_order_code' => $result['Order']['KDNOrderCode'] ?: '', 'package_code' => $result['Order']['PackageCode'] ?: '', 'sorting_code' => $result['Order']['SortingCode'] ?: '', 'sub_count' => $result['SubCount'] ?: '', 'ebusiness_id' => $result['EBusinessID'] ?: '', 'uniquer_request_number' => $result['UniquerRequestNumber'] ?: '', 'result_code' => $result['ResultCode'], 'reason' => $result['Reason'], 'success' => $result['Success'] ]; $template_model = new ElectronicTemplate(); $template_model->setRawAttributes($data); $validator = $template_model->validator($template_model->getAttributes()); if ($validator->fails()) { $this->error($validator->messages()); } else { if ($template_model->save()) { //显示信息并跳转 return true; } else { return false; } } } private function submitEOrder($requestData, $url) { $datas = array( 'EBusinessID' => $this->merchant_id, 'RequestType' => '1007', 'RequestData' => urlencode($requestData), 'DataType' => '2', ); $datas['DataSign'] = $this->encrypt($requestData, $this->apikey); $result = Curl::to($url)->withData($datas)->post(); return $result; } /** * 电商Sign签名生成 * @param data 内容 * @param appkey Appkey * @return DataSign签名 */ private function encrypt($data, $appkey) { return urlencode(base64_encode(md5($data.$appkey))); } /** * 获取地址区域邮政编码 * @param string $provice_name 省份名称 * @param string $area_name 区/县名称 * @return int $code 邮政编码 */ public function getCode($provice_name,$city_name, $area_name) { $address = new Address(); $provice_id = $address->where('areaname','like','%'.$city_name.'%')->first(); $area_id = $address->where('areaname', 'like','%'.$area_name.'%')->where('parentid',$provice_id->id)->select('id')->first(); if(!$area_id) { \Log::info('通过数据表获取城市名'.$city_name.'失败'); return 1; } $area_id = $area_id->toArray(); $url = 'http://www.ems.com.cn/ems/tool/rpq/queryPostCode?city='.$area_id['id'].'&province='.$this->province[$provice_name]; $code = json_decode(Curl::to($url)->get(), true); if (is_array($code['model']['postCode'])) { return $code['model']['postCode'][0]; } \Log::info('====--请求获取邮政编码失败, 地址信息为'.$provice_name.$city_name); return 1; } //快递公司参数配置 public function panelSet() { return [ 'EMS' => [ 'CustomerName' => '大客户号', 'CustomerPwd' => 'APP_SECRET', 'MonthCode' => '', 'SendSite' => '', 'SendStaff' => '', 'LogisticCode' => '' ], 'SF' => [ 'CustomerName' => '', 'CustomerPwd' => '', 'MonthCode' => '月结号(选填)', 'SendSite' => '', 'SendStaff' => '', 'LogisticCode' => '' ], 'ZTKY' => [ 'CustomerName' => '', 'CustomerPwd' => '', 'MonthCode' => '', 'SendSite' => '', 'SendStaff' => '', 'LogisticCode' => '' ], 'YZBK' => [ 'CustomerName' => '', 'CustomerPwd' => '', 'MonthCode' => '', 'SendSite' => '', 'SendStaff' => '', 'LogisticCode' => '' ], 'YZPY' => [ 'CustomerName' => '', 'CustomerPwd' => '', 'MonthCode' => '', 'SendSite' => '', 'SendStaff' => '', 'LogisticCode' => '' ], 'ZJS' => [ 'CustomerName' => '标识', 'CustomerPwd' => '秘钥', 'MonthCode' => '', 'SendSite' => '', 'SendStaff' => '', 'LogisticCode' => '快递单号', ], 'UAPEX' => [ 'CustomerName' => '', 'CustomerPwd' => '', 'MonthCode' => '', 'SendSite' => '', 'SendStaff' => '', 'LogisticCode' => '' ], 'ZTO' => [ 'CustomerName' => '商家ID', 'CustomerPwd' => '商家接口密码(选填)', 'MonthCode' => '', 'SendSite' => '', 'SendStaff' => '', 'LogisticCode' => '' ], 'STO' => [ 'CustomerName' => '客户简称', 'CustomerPwd' => '客户密码', 'MonthCode' => '', 'SendSite' => '所属网点', 'SendStaff' => '', 'LogisticCode' => '' ], 'DBL' => [ 'CustomerName' => '月结编码', 'CustomerPwd' => '', 'MonthCode' => '', 'SendSite' => '', 'SendStaff' => '', 'LogisticCode' => '' ], 'JD' => [ 'CustomerName' => '商家编码', 'CustomerPwd' => '', 'MonthCode' => '', 'SendSite' => '', 'SendStaff' => '', 'LogisticCode' => '' ], 'XFEX' => [ 'CustomerName' => '客户平台ID', 'CustomerPwd' => '客户平台验证码', 'MonthCode' => '', 'SendSite' => '客户商号ID或仓库ID', 'SendStaff' => '', 'LogisticCode' => '' ], 'HHTT' => [ 'CustomerName' => '客户帐号', 'CustomerPwd' => '客户密码', 'MonthCode' => '', 'SendSite' => '网点名称', 'SendStaff' => '', 'LogisticCode' => '' ], 'GTO' => [ 'CustomerName' => '客户简称', 'CustomerPwd' => '客户密码', 'MonthCode' => '', 'SendSite' => '网点名称', 'SendStaff' => '', 'LogisticCode' => '' ], 'SURE' => [ 'CustomerName' => '客户号', 'CustomerPwd' => '', 'MonthCode' => '', 'SendSite' => '网点编号(仓库号)', 'SendStaff' => '收件快递员(网点提供)', 'LogisticCode' => '' ], 'KYSY' => [ 'CustomerName' => '客户号', 'CustomerPwd' => '', 'MonthCode' => '', 'SendSite' => '', 'SendStaff' => '', 'LogisticCode' => '' ], 'YD' => [ 'CustomerName' => '客户ID', 'CustomerPwd' => '接口联调密码', 'MonthCode' => '', 'SendSite' => '', 'SendStaff' => '', 'LogisticCode' => '' ], 'HTKY' => [ 'CustomerName' => '操作编码', 'CustomerPwd' => 'ERP秘钥', 'MonthCode' => '', 'SendSite' => '', 'SendStaff' => '', 'LogisticCode' => '' ], 'YTO' => [ 'CustomerName' => '商家代码', 'CustomerPwd' => '', 'MonthCode' => '密钥串', 'SendSite' => '', 'SendStaff' => '', 'LogisticCode' => '' ], 'YCWL' => [ 'CustomerName' => '商户代码', 'CustomerPwd' => '', 'MonthCode' => '', 'SendSite' => '网点名称', 'SendStaff' => '', 'LogisticCode' => '' ], 'UC' => [ 'CustomerName' => '客户编号', 'CustomerPwd' => '密钥(选填)', 'MonthCode' => '', 'SendSite' => '', 'SendStaff' => '', 'LogisticCode' => '' ], 'ANE' => [ 'CustomerName' => '客户号', 'CustomerPwd' => '', 'MonthCode' => '', 'SendSite' => '网点名称(仅数字部分)', 'SendStaff' => '', 'LogisticCode' => '' ], 'PJ' => [ 'CustomerName' => '月结号', 'CustomerPwd' => '密钥', 'MonthCode' => '', 'SendSite' => '', 'SendStaff' => '', 'LogisticCode' => '' ], 'CND' => [ 'CustomerName' => '客户编码', 'CustomerPwd' => '客户密码', 'MonthCode' => '', 'SendSite' => '网点名称', 'SendStaff' => '', 'LogisticCode' => '' ], 'HOAU' => [ 'CustomerName' => '', 'CustomerPwd' => '', 'MonthCode' => '', 'SendSite' => '', 'WareHouseID' => '', 'Name' => '' ], 'DBLKY' => [ 'CustomerName' => '月结编码', 'CustomerPwd' => '', 'MonthCode' => '', 'SendSite' => '', 'WareHouseID' => '', 'Name' => '' ], 'ANEKY' => [ 'CustomerName' => '客户编码', 'CustomerPwd' => '客户秘钥', 'MonthCode' => '', 'SendSite' => '', 'WareHouseID' => '', 'Name' => '' ], 'JDKY' => [ 'CustomerName' => '商家编码', 'CustomerPwd' => '事业部编码(EBU开头)', 'MonthCode' => '', 'SendSite' => '', 'WareHouseID' => '仓库编码', 'Name' => '寄件人简称' ], 'LB' => [ 'CustomerName' => '电子面单账号', 'CustomerPwd' => '密码', 'MonthCode' => '', 'SendSite' => '', 'WareHouseID' => '', 'Name' => '' ], 'HTKYKY' => [ 'CustomerName' => '账户信息', 'CustomerPwd' => '账户密码', 'MonthCode' => '', 'SendSite' => '', 'WareHouseID' => '', 'Name' => '' ], 'ZTOKY' => [ 'CustomerName' => '商家CP', 'CustomerPwd' => '商家秘钥', 'MonthCode' => '', 'SendSite' => '寄件网点ID', 'WareHouseID' => '', 'Name' => '' ], 'JTSD' => [ 'CustomerName' => '电子面单账号', 'CustomerPwd' => '密码', 'MonthCode' => '', 'SendSite' => '', 'WareHouseID' => '', 'Name' => '' ] ]; } //批量打印 /** * 组装POST表单用于调用快递鸟批量打印接口页面 */ public function build_form() { //OrderCode:需要打印的订单号,和调用快递鸟电子面单的订单号一致,PortName:本地打印机名称,请参考使用手册设置打印机名称。支持多打印机同时打印。 // $request_data = '[{"OrderCode":"234351215333113311353","PortName":"打印机名称一"},{"OrderCode":"234351215333113311354","PortName":"打印机名称二"}]'; $ordersns = request()->ordersn; // dd($ordersns); foreach ($ordersns as $k => $v) { $request_data[$k]['OrderCode'] = $v; $request_data[$k]['PortName'] = $this->name; } \Log::info('--panel_print---ordersn,--request-data', ['ordersn'=>$ordersns, 'request_data'=>$request_data]); $request_data_encode = urlencode($request_data); $data_sign = $this->encrypt($this->get_ip().$request_data_encode, $this->apikey); //是否预览,0-不预览 1-预览 $is_priview = '0'; //组装表单 $form = '
'; print_r($form); } /** * 判断是否为内网IP * @param ip IP * @return 是否内网IP */ private function is_private_ip($ip) { return !filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE); } /** * 获取客户端IP(非用户服务器IP) * @return 客户端IP */ private function get_ip() { //获取客户端IP if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { $ip = getenv('HTTP_CLIENT_IP'); } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { $ip = getenv('HTTP_X_FORWARDED_FOR'); } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $ip = getenv('REMOTE_ADDR'); } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { $ip = $_SERVER['REMOTE_ADDR']; } if(!$ip || $this->is_private_ip($ip)) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://www.kdniao.com/External/GetIp.aspx'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); return $output; } else{ return $res; } } }