ElectronicsheetDelivery.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\electronicsheet\model;
  11. use app\model\BaseModel;
  12. use app\model\shop\Shop;
  13. use extend\Kdniao;
  14. use app\model\system\Address;
  15. /**
  16. * 电子面单物流配送
  17. */
  18. class ElectronicsheetDelivery extends BaseModel
  19. {
  20. /**
  21. * 电子面单发货
  22. * @param $param
  23. * @param $is_delivery
  24. * @return array
  25. */
  26. public function delivery($param)
  27. {
  28. //获取电子面单设置
  29. $electronicsheet_model = new ExpressElectronicsheet();
  30. $config = $electronicsheet_model->getElectronicsheetConfig($param[ 'site_id' ]);
  31. $config_info = $config[ 'data' ][ 'value' ];
  32. if (empty($config_info)) {
  33. return $this->error('', '请先配置电子面单');
  34. }
  35. if (empty($param[ 'template_id' ])) {
  36. return $this->error('', '请先配置电子面单模板');
  37. }
  38. //获取电子模板信息
  39. $template = $electronicsheet_model->getExpressElectronicsheetInfo([ [ 'id', '=', $param[ 'template_id' ] ] ]);
  40. if (empty($template[ 'data' ])) {
  41. return $this->error('', '电子面单模板不存在');
  42. }
  43. //获取店铺信息
  44. $shop_model = new Shop();
  45. $shop = $shop_model->getShopInfo([ [ 'site_id', '=', $param[ 'site_id' ] ] ]);
  46. $shop_info = $shop[ 'data' ];
  47. if (empty($shop_info[ 'name' ])) {
  48. return $this->error('', '店铺联系地址中联系人姓名未设置');
  49. }
  50. if (empty($shop_info[ 'province_name' ]) || empty($shop_info[ 'city_name' ]) || empty($shop_info[ 'district_name' ]) || empty($shop_info[ 'address' ])) {
  51. return $this->error('', '店铺联系地址中联系地址未设置');
  52. }
  53. if (empty($shop_info[ 'telephone' ]) && empty($shop_info[ 'mobile' ])) {
  54. return $this->error('', '店铺联系地址中联系方式未设置');
  55. }
  56. $result = $this->electronicsheetDelivery($param, $config_info, $template[ 'data' ], $shop_info);
  57. if (isset($result[ 'code' ]) && $result[ 'code' ] < 0) {
  58. return $result;
  59. } else {
  60. return $this->success($result);
  61. }
  62. }
  63. /**
  64. * 电子面单发货
  65. * @param $delivery_id //包裹id
  66. * @param $config_info //快递鸟配置信息
  67. * @param $template //电子面单模板
  68. * @param $shop_info //发货人信息
  69. * @param $goods_array //商品信息
  70. * @return array
  71. */
  72. public function electronicsheetDelivery($param, $config_info, $template, $shop_info)
  73. {
  74. //获取订单信息
  75. $order_info = model('order')->getInfo([ [ 'order_id', '=', $param[ 'order_id' ] ] ]);
  76. //获取快递公司编码
  77. $express_company = model('express_company_template')->getInfo([ [ 'company_id', '=', $template[ 'company_id' ] ] ], 'express_no,print_style');
  78. $print_style = json_decode($express_company[ 'print_style' ], true);
  79. //获取商品信息
  80. if (empty($param[ 'order_goods_id_array' ])) {
  81. $goods_array = model('order_goods')->getInfo(
  82. [
  83. [ 'order_id', '=', $param[ 'order_id' ] ]
  84. ], 'sku_name as GoodsName,num as GoodsQuantity'
  85. );
  86. } else {
  87. $goods_array = model('order_goods')->getInfo(
  88. [
  89. [ 'order_goods_id', 'in', $param[ 'order_goods_id_array' ] ],
  90. [ 'order_id', '=', $param[ 'order_id' ] ]
  91. ], 'sku_name as GoodsName,num as GoodsQuantity'
  92. );
  93. }
  94. //替换商品名称中的特殊字符 ' " # & + < > % \
  95. $search = array ( "'", '"', '&', '+', '<', '>', '%', "\\", '#', "and" );
  96. $goods_array[ 'GoodsName' ] = str_replace($search, '', $goods_array[ 'GoodsName' ]);
  97. //实例化快递鸟
  98. $config = [
  99. 'EBusinessID' => $config_info[ 'kdniao_user_id' ],
  100. 'AppKey' => $config_info[ 'kdniao_api_key' ]
  101. ];
  102. $kdniao = new Kdniao($config);
  103. //构造电子面单提交信息
  104. $eorder = [];
  105. $eorder[ 'CustomerName' ] = $template[ 'customer_name' ];
  106. $eorder[ 'CustomerPwd' ] = $template[ 'customer_pwd' ];
  107. $eorder[ 'SendSite' ] = $template[ 'send_site' ];
  108. $eorder[ 'SendStaff' ] = $template[ 'send_staff' ];
  109. $eorder[ 'MonthCode' ] = $template[ 'month_code' ];
  110. $eorder[ 'ShipperCode' ] = $express_company[ 'express_no' ];//快递公司编码
  111. $eorder[ 'OrderCode' ] = $order_info[ 'order_no' ];//订单号
  112. $eorder[ 'PayType' ] = $template[ 'postage_payment_method' ]; //邮费支付方式
  113. $eorder[ 'ExpType' ] = 1; //快递类型
  114. $eorder[ 'TemplateSize' ] = $print_style[ $template[ 'print_style' ] ][ 'template_size' ]; //模板规格
  115. //发货人信息
  116. $sender = [];
  117. $sender[ 'Name' ] = $shop_info[ 'name' ];
  118. $sender[ 'Mobile' ] = $shop_info[ 'mobile' ];
  119. $sender[ 'Tel' ] = $shop_info[ 'telephone' ];
  120. $sender[ 'ProvinceName' ] = $shop_info[ 'province_name' ];
  121. $sender[ 'CityName' ] = $shop_info[ 'city_name' ];
  122. $sender[ 'ExpAreaName' ] = $shop_info[ 'district_name' ];
  123. $sender[ 'Address' ] = $shop_info[ 'address' ];
  124. $sender[ 'PostCode' ] = '000000';
  125. //获取收货人信息
  126. $area_model = new Address();
  127. $province_name = $area_model->getAreasInfo([ [ 'id', '=', $order_info[ 'province_id' ] ] ], 'name');
  128. $city_name = $area_model->getAreasInfo([ [ 'id', '=', $order_info[ 'city_id' ] ] ], 'name');
  129. $district_name = $area_model->getAreasInfo([ [ 'id', '=', $order_info[ 'district_id' ] ] ], 'name');
  130. $receiver = [];
  131. $receiver[ 'Name' ] = $order_info[ 'name' ];
  132. $receiver[ 'Mobile' ] = $order_info[ 'mobile' ];
  133. $receiver[ 'ProvinceName' ] = $province_name[ 'data' ][ 'name' ];
  134. $receiver[ 'CityName' ] = $city_name[ 'data' ][ 'name' ];
  135. $receiver[ 'ExpAreaName' ] = empty($district_name[ 'data' ][ 'name' ]) ? '' : $district_name[ 'data' ][ 'name' ];
  136. $receiver[ 'Address' ] = $order_info[ 'address' ];
  137. $receiver[ 'PostCode' ] = '000000';
  138. $commodity[] = $goods_array;
  139. $eorder[ 'Sender' ] = $sender;
  140. $eorder[ 'Receiver' ] = $receiver;
  141. $eorder[ 'Commodity' ] = $commodity; //商品信息
  142. $eorder[ 'IsReturnPrintTemplate' ] = 1; //是否返回电子模板
  143. $jsonResult = $kdniao->submitEOrder($eorder);
  144. $result = json_decode($jsonResult, true);
  145. if (isset($result[ 'ResultCode' ])) {
  146. if ($result[ 'ResultCode' ] == '100' || $result[ 'ResultCode' ] == '106') {
  147. return $result;
  148. }
  149. }
  150. return $this->error('', $result[ 'Reason' ]);
  151. }
  152. }