123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- <?php
- namespace app\common\library;
- use app\common\model\Order;
- use app\common\model\ElectronicsOrder;
- use app\common\model\OrderElectronics;
- use fast\Http;
- /**
- * 电子面单
- * @ DateTime 2021-06-11
- * @
- */
- class KdApiExpOrder
- {
- protected static $reqUrl = '';
- /**
- * @ DateTime 2021-06-11
- * @
- * @electronics [type] $electronics
- * @electronics [type] $sender
- * @return void
- */
- public static function create($order_id, $electronics_id)
- {
- $order = Order::with(['OrderGoods'])
- ->field('o.*,p.name province_name,c.name city_name,a.name area_name')
- ->alias('o')
- ->join('shop_address d', 'o.address_id=d.id', 'LEFT')
- ->join('shop_area p', 'd.province_id=p.id', 'LEFT')
- ->join('shop_area c', 'd.city_id=c.id', 'LEFT')
- ->join('shop_area a', 'd.area_id=a.id', 'LEFT')
- ->where('o.id', $order_id)
- ->find();
- if ($order->orderstate == 1) {
- throw new \Exception('订单已取消,不支持生成电子面单');
- }
- if ($order->orderstate == 2) {
- throw new \Exception('订单已失效,不支持生成电子面单');
- }
- if ($order->orderstate == 3) {
- throw new \Exception('订单已完成,不支持生成电子面单');
- }
- if (!$order->paystate) {
- throw new \Exception('订单未支付,不支持生成电子面单');
- }
- if ($order->shippingstate) {
- throw new \Exception('订单已发货,不支持生成电子面单');
- }
- $electronics = ElectronicsOrder::with(['Shipper'])->where('id', $electronics_id)->find();
- if (empty($order)) {
- throw new \Exception('未找到订单');
- }
- if (empty($electronics)) {
- throw new \Exception("电子面单模板不存在");
- }
- if (empty($electronics->shipper)) {
- throw new \Exception("快递公司不存在");
- }
- if (empty($order->order_goods)) {
- throw new \Exception("订单商品不存在");
- }
- $Commodity = [];
- $quantity = 0;
- $Weight = 0;
- foreach ($order->order_goods as $item) {
- $Commodity[] = [
- 'GoodsName' => $item['title'],
- 'GoodsCode' => $item['goods_id'] . '_' . $item['goods_sku_id'],
- 'Goodsquantity' => $item['nums'],
- 'GoodsPrice' => $item['price'],
- 'GoodsWeight' => $item['weight'],
- // 'GoodsVol' => 0,
- 'GoodsDesc' => $item['attrdata']
- ];
- $quantity = bcadd($quantity, $item['nums']);
- $Weight = bcadd($Weight, $item['weight']);
- }
- // 组装应用级参数
- $requestData = [
- 'MemberID' => $order->user_id,
- 'OrderCode' => $order->order_sn,
- 'ShipperCode' => $electronics->shipper->shipper_code,
- 'LogisticCode' => $electronics->logistic_code,
- 'CustomerName' => $electronics->customer_name,
- 'CustomerPwd' => $electronics->customer_pwd,
- // 'ThrOrderCode' => '1234567890',
- 'SendSite' => $electronics->send_site,
- 'PayType' => $electronics->paytype,
- 'MonthCode' => $electronics->month_code,
- 'IsReturnSignBill' => $electronics->is_return_sign_bill,
- 'OperateRequire' => $electronics->operate_require,
- 'ExpType' => $electronics->exp_type,
- 'Cost' => $order->shippingfee,
- 'OtherCost' => 0,
- 'Sender' => [
- 'Company' => $electronics->company,
- 'Name' => $electronics->name,
- 'Tel' => $electronics->tel,
- 'Mobile' => $electronics->mobile,
- 'PostCode' => $electronics->post_code,
- 'ProvinceName' => $electronics->province_name,
- 'CityName' => $electronics->city_name,
- 'ExpAreaName' => $electronics->exp_area_name,
- 'Address' => $electronics->address
- ],
- 'Receiver' => [
- 'Company' => '',
- 'Name' => $order->receiver,
- 'Tel' => '',
- 'Mobile' => $order->mobile,
- 'PostCode' => $order->zipcode,
- 'ProvinceName' => $order->province_name,
- 'CityName' => $order->city_name,
- 'ExpAreaName' => $order->area_name,
- 'Address' => $order->address
- ],
- 'Commodity' => $Commodity,
- 'IsNotice' => $electronics->is_notice,
- 'StartDate' => '',
- 'EndDate' => '',
- 'AddService' => [],
- 'Weight' => $Weight,
- 'Quantity' => $quantity,
- // 'Volume' => 0,
- 'IsReturnPrintTemplate' => $electronics->is_return_temp,
- 'Remark' => $electronics->remark
- ];
- self::setReqUrl();
- $res = self::sendPost($requestData, 1007);
- //生成电子面单后,替换快递单号
- if (isset($res['Success']) && $res['Success']) {
- $order->expressno = $res['Order']['LogisticCode'];
- $order->expressname = $electronics['shipper']['name'];
- $order->save();
- }
- //入库
- OrderElectronics::push($res, $order->order_sn, $electronics->customer_name, $electronics->customer_pwd);
- return $res;
- }
- /**
- * @ DateTime 2021-06-11
- * @ 电子面单取消
- * @return void
- */
- public static function cancel($param)
- {
- // 组装应用级参数
- $requestData = [
- 'ShipperCode' => $param['shipper_code'],
- 'OrderCode' => $param['order_sn'],
- 'ExpNo' => $param['logistic_code'],
- 'CustomerName' => $param['customer_name'],
- 'CustomerPwd' => $param['customer_pwd']
- ];
- self::setReqUrl();
- return self::sendPost($requestData, 1147);
- }
- /**
- * @ DateTime 2021-06-11
- * @ 单号余量查询
- * @return void
- */
- public static function getOrderTraces($param)
- {
- $requestData = [
- 'ShipperCode' => $param['shipper_code'],
- 'StationCode' => '',
- 'StationName' => '',
- 'CustomerName' => $param['customer_name'],
- 'CustomerPwd' => $param['customer_pwd']
- ];
- self::setReqUrl();
- return self::sendPost($requestData, 1127);
- }
- /**
- * @ 物流查询
- * @param [type] $param
- * @return void
- */
- public static function getLogisticsQuery($param)
- {
- $requestData = [
- 'OrderCode' => $param['order_sn'],
- 'ShipperCode' => $param['shipper_code'],
- 'LogisticCode' => $param['logistic_code'],
- ];
- self::setReqUrl(1);
- return self::sendPost($requestData, 1002);
- }
- //设置url
- protected static function setReqUrl($type = 0)
- {
- $config = get_addon_config('shop');
- if ($config['api_mode'] == 'sandbox') {
- self::$reqUrl = 'http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json';
- } else {
- switch ($type) {
- case 1: //即时物流
- self::$reqUrl = 'https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx';
- break;
- default: //电子面单
- self::$reqUrl = 'https://api.kdniao.com/api/EOrderService';
- }
- }
- }
- /**
- * @ DateTime 2021-06-11
- * @ 请求
- * @return void
- */
- protected static function sendPost($requestData, $requestType)
- {
- $requestData = json_encode($requestData, JSON_UNESCAPED_UNICODE);
- $config = get_addon_config('shop');
- // 组装系统级参数
- $data = array(
- 'EBusinessID' => $config['EBusinessID'],
- 'RequestType' => $requestType,
- 'RequestData' => urlencode($requestData),
- 'DataType' => '2',
- );
- $data['DataSign'] = self::encrypt($requestData, $config['kdNiaoApiKey']);
- //以form表单形式提交post请求,post请求体中包含了应用级参数和系统级参数
- $result = Http::post(self::$reqUrl, $data);
- return (array)json_decode($result, true);
- }
- /**
- * Sign签名生成
- * @electronics data 内容
- * @electronics ApiKey ApiKey
- * @return DataSign签名
- */
- protected static function encrypt($data, $apiKey)
- {
- return urlencode(base64_encode(md5($data . $apiKey)));
- }
- }
|