GoodsCircle.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\goodscircle\model;
  11. use app\model\BaseModel;
  12. use addon\weapp\model\Config as WeappConfigModel;
  13. use addon\wxoplatform\model\Config as WxOplatformConfigModel;
  14. use EasyWeChat\Factory;
  15. /**
  16. * 好物圈
  17. */
  18. class GoodsCircle extends BaseModel
  19. {
  20. private $app;
  21. public function __construct($site_id = 0)
  22. {
  23. //微信小程序配置
  24. $weapp_config_model = new WeappConfigModel();
  25. $weapp_config = $weapp_config_model->getWeappConfig($site_id);
  26. $weapp_config = $weapp_config[ "data" ][ "value" ];
  27. if (isset($weapp_config[ 'is_authopen' ]) && addon_is_exit('wxoplatform')) {
  28. $plateform_config_model = new WxOplatformConfigModel();
  29. $plateform_config = $plateform_config_model->getOplatformConfig();
  30. $plateform_config = $plateform_config[ "data" ][ "value" ];
  31. $config = [
  32. 'app_id' => $plateform_config[ "appid" ] ?? '',
  33. 'secret' => $plateform_config[ "secret" ] ?? '',
  34. 'token' => $plateform_config[ "token" ] ?? '',
  35. 'aes_key' => $plateform_config[ "aes_key" ] ?? '',
  36. 'log' => [
  37. 'level' => 'debug',
  38. 'permission' => 0777,
  39. 'file' => 'runtime/log/wechat/oplatform.logs',
  40. ],
  41. ];
  42. $open_platform = Factory::openPlatform($config);
  43. $this->app = $open_platform->miniProgram($weapp_config[ 'authorizer_appid' ], $weapp_config[ 'authorizer_refresh_token' ]);
  44. } else {
  45. $config = [
  46. 'app_id' => $weapp_config[ "appid" ] ?? '',
  47. 'secret' => $weapp_config[ "appsecret" ] ?? '',
  48. 'response_type' => 'array',
  49. 'log' => [
  50. 'level' => 'debug',
  51. 'permission' => 0777,
  52. 'file' => 'runtime/log/wechat/easywechat.logs',
  53. ],
  54. ];
  55. $this->app = Factory::miniProgram($config);
  56. }
  57. }
  58. /**
  59. * 导入或更新物品信息
  60. */
  61. public function importProduct($goods_ids)
  62. {
  63. if (!empty($goods_ids)) {
  64. $data = [
  65. 'product_list' => []
  66. ];
  67. $goods_list = model('goods')->getList([ [ 'goods_id', 'in', explode(',', $goods_ids) ] ], 'goods_id,goods_name,introduction,goods_image,sku_id,category_id,goods_attr_format');
  68. if (!empty($goods_list)) {
  69. try {
  70. foreach ($goods_list as $goods_item) {
  71. $sku_list = model('goods_sku')->getList([ [ 'goods_id', '=', $goods_item[ 'goods_id' ] ] ], 'sku_id,discount_price,price,goods_state,stock');
  72. foreach ($sku_list as $k => $v) {
  73. $sku_list[ $k ][ 'stock' ] = numberFormat($sku_list[ $k ][ 'stock' ]);
  74. }
  75. $goods_data = [
  76. "item_code" => $goods_item[ 'goods_id' ],
  77. "title" => $goods_item[ 'goods_name' ],
  78. "desc" => $goods_item[ 'introduction' ],
  79. "category_list" => [],
  80. "image_list" => array_map(function($value) {
  81. return img($value);
  82. }, explode(',', $goods_item[ 'goods_image' ])),
  83. "src_wxapp_path" => "/pages/goods/detail?sku_id=" . $goods_item[ 'sku_id' ],
  84. "sku_list" => [],
  85. "attr_list" => []
  86. ];
  87. if (!empty($goods_item[ 'category_id' ])) {
  88. $category_id = trim($goods_item[ 'category_id' ], ',');
  89. $goods_category = model('goods_category')->getList([ [ 'category_id', 'in', explode(',', $category_id) ] ], 'category_name');
  90. if (!empty($goods_category)) {
  91. foreach ($goods_category as $item) {
  92. array_push($goods_data[ "category_list" ], $item[ 'category_name' ]);
  93. }
  94. }
  95. }
  96. if (!empty($goods_item[ 'goods_attr_format' ])) {
  97. $goods_attr = json_decode($goods_item[ 'goods_attr_format' ], true);
  98. foreach ($goods_attr as $attr_item) {
  99. $attr_data = [
  100. "name" => $attr_item[ 'attr_name' ],
  101. "value" => $attr_item[ 'attr_value_name' ]
  102. ];
  103. array_push($goods_data[ "attr_list" ], $attr_data);
  104. }
  105. }
  106. foreach ($sku_list as $sku_item) {
  107. $sku_data = [
  108. "sku_id" => $sku_item[ 'sku_id' ],
  109. "price" => $sku_item[ 'discount_price' ] * 100,
  110. "original_price" => $sku_item[ 'price' ] * 100
  111. ];
  112. $sku_data[ 'status' ] = $sku_item[ 'goods_state' ] == 1 ? 1 : 2;
  113. if ($sku_item[ 'stock' ] == 0) $sku_data[ 'status' ] = 3;
  114. array_push($goods_data[ "sku_list" ], $sku_data);
  115. }
  116. array_push($data[ 'product_list' ], $goods_data);
  117. }
  118. $result = $this->app->mall->product->import($data);
  119. if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] == 0) {
  120. return $this->success();
  121. } else {
  122. return $this->error('', $result[ 'errmsg' ]);
  123. }
  124. } catch (\Exception $e) {
  125. return $this->error('', $e->getMessage());
  126. }
  127. }
  128. }
  129. }
  130. /**
  131. * 导入订单每次最大10条
  132. * @param $order_id
  133. * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
  134. * @throws \GuzzleHttp\Exception\GuzzleException
  135. */
  136. public function importOrder($order_ids)
  137. {
  138. if (!empty($order_ids)) {
  139. $data = [
  140. 'order_list' => []
  141. ];
  142. $order_join = [
  143. [ 'member m', 'm.member_id = o.member_id', 'left' ]
  144. ];
  145. $order_list = model('order')->getList([ [ 'order_id', 'in', explode(',', $order_ids) ] ], 'o.order_id,o.order_no,o.goods_money,o.pay_money,o.delivery_money,o.create_time,o.pay_time,o.buyer_message,o.pay_type,o.order_status_name,m.weapp_openid', '', 'o', $order_join, '', 10);
  146. if (!empty($order_list)) {
  147. try {
  148. foreach ($order_list as $order_item) {
  149. $order_data = [
  150. 'order_id' => $order_item[ 'order_id' ],
  151. 'create_time' => $order_item[ 'create_time' ],
  152. 'pay_finish_time' => $order_item[ 'pay_time' ],
  153. 'desc' => $order_item[ 'buyer_message' ],
  154. 'fee' => $order_item[ 'pay_money' ],
  155. 'trans_id' => $order_item[ 'order_no' ],
  156. 'ext_info' => [
  157. 'product_info' => [
  158. 'item_list' => []
  159. ],
  160. 'express_info' => [
  161. 'price' => $order_item[ 'delivery_money' ]
  162. ],
  163. 'brand_info' => [
  164. 'contact_detail_page' => [
  165. 'path' => '/pages/index/index'
  166. ]
  167. ],
  168. 'payment_method' => $order_item[ 'pay_type' ] == 'wechatpay' ? 1 : 2,
  169. 'user_open_id' => $order_item[ 'weapp_openid' ],
  170. 'order_detail_page' => [
  171. 'path' => '/pages/order/detail?order_id=' . $order_item[ 'order_id' ]
  172. ],
  173. 'total_fee' => $order_item[ 'goods_money' ]
  174. ]
  175. ];
  176. switch ( $order_item[ 'order_status_name' ] ) {
  177. case '待发货':
  178. $order_data[ 'status' ] = 3;
  179. break;
  180. case '已发货':
  181. $order_data[ 'status' ] = 4;
  182. break;
  183. case '已完成':
  184. $order_data[ 'status' ] = 100;
  185. break;
  186. }
  187. $order_goods_join = [
  188. [ 'goods g', 'og.goods_id = g.goods_id', 'left' ]
  189. ];
  190. $order_goods_list = model('order_goods')->getList([ [ 'order_id', '=', $order_item[ 'order_id' ] ] ], 'og.goods_id,og.sku_id,og.num,og.goods_money,og.sku_image,og.sku_name,og.price,g.category_id', '', 'og', $order_goods_join);
  191. foreach ($order_goods_list as $goods_item) {
  192. $goods_data = [
  193. 'item_code' => $goods_item[ 'goods_id' ],
  194. 'sku_id' => $goods_item[ 'sku_id' ],
  195. 'amount' => numberFormat($goods_item[ 'num' ]),
  196. 'total_fee' => $goods_item[ 'goods_money' ] * 100,
  197. 'thumb_url' => img($goods_item[ 'sku_image' ]),
  198. 'title' => $goods_item[ 'sku_name' ],
  199. 'unit_price' => $goods_item[ 'price' ],
  200. 'original_price' => $goods_item[ 'price' ],
  201. 'category_list' => [],
  202. 'item_detail_page' => [
  203. 'path' => '/pages/goods/detail?sku_id=' . $goods_item[ 'sku_id' ]
  204. ]
  205. ];
  206. if (!empty($goods_item[ 'category_id' ])) {
  207. $category_id = trim($goods_item[ 'category_id' ], ',');
  208. $goods_category = model('goods_category')->getList([ [ 'category_id', 'in', explode(',', $category_id) ] ], 'category_name');
  209. if (!empty($goods_category)) {
  210. foreach ($goods_category as $item) {
  211. array_push($goods_data[ "category_list" ], $item[ 'category_name' ]);
  212. }
  213. }
  214. }
  215. array_push($order_data[ 'ext_info' ][ 'product_info' ][ 'item_list' ], $goods_data);
  216. }
  217. array_push($data[ 'order_list' ], $order_data);
  218. }
  219. $result = $this->app->mall->order->add($data);
  220. if (isset($result[ 'errcode' ]) && $result[ 'errcode' ] == 0) {
  221. return $this->success();
  222. } else {
  223. return $this->error('', $result[ 'errmsg' ]);
  224. }
  225. } catch (\Exception $e) {
  226. return $this->error('', $e->getMessage());
  227. }
  228. }
  229. }
  230. }
  231. }