Store.php 48 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151
  1. <?php
  2. namespace app\api\controller;
  3. use think\facade\View;
  4. use think\facade\Db;
  5. use think\facade\Lang;
  6. /**
  7. * ============================================================================
  8. * DSMall多用户商城
  9. * ============================================================================
  10. * 版权所有 2014-2028 长沙德尚网络科技有限公司,并保留所有权利。
  11. * 网站地址: http://www.csdeshang.com
  12. * ----------------------------------------------------------------------------
  13. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
  14. * 不允许对程序代码以任何形式任何目的的再发布。
  15. * ============================================================================
  16. * 店铺控制器
  17. */
  18. class Store extends MobileMall
  19. {
  20. public function initialize()
  21. {
  22. parent::initialize();
  23. Lang::load(base_path() . 'home/lang/' . config('lang.default_lang') . '/store.lang.php');
  24. }
  25. /**
  26. * 获取用户信息
  27. */
  28. private function _getMemberInfo()
  29. {
  30. $key = request()->header('X-DS-KEY');
  31. $mbusertoken_model = model('mbusertoken');
  32. $mb_user_token_info = $mbusertoken_model->getMbusertokenInfoByToken($key);
  33. if (empty($mb_user_token_info)) {
  34. ds_json_encode(11001, lang('please_login'));
  35. }
  36. $member_model = model('member');
  37. $member_info = $member_model->getMemberInfoByID($mb_user_token_info['member_id']);
  38. return $member_info;
  39. }
  40. /**
  41. * @api {POST} api/Store/store_list 店铺列表
  42. * @apiVersion 1.0.0
  43. * @apiGroup Store
  44. *
  45. * @apiHeader {String} X-DS-KEY 卖家授权token
  46. *
  47. * @apiParam {Int} cate_id 分类ID
  48. * @apiParam {String} keyword 关键词
  49. * @apiParam {String} user_name 用户名
  50. * @apiParam {String} area_info 地区
  51. * @apiParam {String} order 排序 desc降序 asc升序
  52. * @apiParam {String} sort_key 排序字段 store_credit店铺信用 store_sales销量
  53. * @apiParam {Int} page 页码
  54. * @apiParam {Int} pagesize 每页显示数量
  55. *
  56. * @apiSuccess {String} code 返回码,10000为成功
  57. * @apiSuccess {String} message 返回消息
  58. * @apiSuccess {Object} result 返回数据
  59. * @apiSuccess {Object[]} result.store_list 店铺列表 (返回字段参考store)
  60. * @apiSuccess {Int} result.page_total 总页数
  61. * @apiSuccess {Boolean} result.hasmore 是否有更多 true是false否
  62. */
  63. public function store_list()
  64. {
  65. //店铺类目快速搜索
  66. $class_list = rkcache('storeclass', true, 'file');
  67. $cate_id = intval(input('param.cate_id'));
  68. if (!key_exists($cate_id, $class_list))
  69. $cate_id = 0;
  70. View::assign('class_list', $class_list);
  71. //店铺搜索
  72. $condition = [];
  73. $keyword = trim(input('param.keyword'));
  74. if ($keyword != '') {
  75. $condition[] = ['store_name|store_mainbusiness', 'like', '%' . $keyword . '%'];
  76. }
  77. $user_name = trim(input('param.user_name'));
  78. if ($user_name != '') {
  79. $condition[] = ['member_name', '=', $user_name];
  80. }
  81. $area_info = trim(input('param.area_info'));
  82. if (!empty($area_info)) {
  83. //修复店铺按地区搜索
  84. $tabs = preg_split("#\s+#", $area_info, -1, PREG_SPLIT_NO_EMPTY);
  85. $len = count($tabs);
  86. $area_name = $tabs[$len - 1];
  87. if ($area_name) {
  88. $area_name = trim($area_name);
  89. $condition[] = ['area_info', 'like', '%' . $area_name . '%'];
  90. }
  91. }
  92. if ($cate_id > 0) {
  93. $condition[] = ['storeclass_id', '=', $cate_id];
  94. }
  95. $condition[] = ['store_state', '=', 1];
  96. $order = trim(input('param.order'));
  97. if (!in_array($order, ['desc', 'asc'])) {
  98. unset($order);
  99. }
  100. $order_sort = 'store_sort asc';
  101. //信用度排序
  102. $key = trim(input('param.sort_key'));
  103. switch ($key) {
  104. case 'store_sales':
  105. $order_sort = 'store_sales desc';
  106. break;
  107. case 'store_credit':
  108. $order_sort = 'store_credit desc';
  109. break;
  110. }
  111. $store_model = model('store');
  112. $store_list = $store_model->getStoreList($condition, 10, $order_sort);
  113. //获取店铺商品数,推荐商品列表等信息
  114. $store_list = $store_model->getStoreSearchList($store_list);
  115. $memberId = $this->getMemberIdIfExists();
  116. foreach ($store_list as $key => $val) {
  117. // 如果已登录 判断该店铺是否已被收藏
  118. if ($memberId) {
  119. $c = (int)model('favorites')->getStoreFavoritesCountByStoreId($val['store_id'], $memberId);
  120. $store_list[$key]['is_favorate'] = $c > 0;
  121. } else {
  122. $store_list[$key]['is_favorate'] = false;
  123. }
  124. $store_list[$key]['goods_list'] = model('goods')->getGoodsListByColorDistinct([['store_id', '=', $val['store_id']], ['goods_commend', '=', 1]], 'goods_image,goods_id,goods_price', 'goods_id desc', 0, 4);
  125. foreach ($store_list[$key]['goods_list'] as $k => $v) {
  126. $store_list[$key]['goods_list'][$k]['goods_image_url'] = goods_cthumb($v['goods_image'], 480, $val['store_id']);
  127. }
  128. $store_list[$key]['store_avatar'] = get_store_logo($store_list[$key]['store_avatar']);
  129. }
  130. $result = array_merge(['store_list' => $store_list], mobile_page($store_model->page_info));
  131. ds_json_encode(10000, '', $result);
  132. }
  133. /**
  134. * @api {POST} api/Store/store_info 店铺信息
  135. * @apiVersion 1.0.0
  136. * @apiGroup Store
  137. *
  138. * @apiParam {Int} store_id 店铺ID
  139. *
  140. * @apiSuccess {String} code 返回码,10000为成功
  141. * @apiSuccess {String} message 返回消息
  142. * @apiSuccess {Object} result 返回数据
  143. * @apiSuccess {Object[]} result.rec_goods_list 推荐商品列表
  144. * @apiSuccess {Int} result.rec_goods_list.evaluation_count 评论数
  145. * @apiSuccess {Int} result.rec_goods_list.evaluation_good_star 评分
  146. * @apiSuccess {Int} result.rec_goods_list.goods_addtime 添加时间
  147. * @apiSuccess {Int} result.rec_goods_list.goods_id 商品ID
  148. * @apiSuccess {String} result.rec_goods_list.goods_image 商品图片名称
  149. * @apiSuccess {String} result.rec_goods_list.goods_image_url 商品图片完整路径
  150. * @apiSuccess {Float} result.rec_goods_list.goods_marketprice 市场价
  151. * @apiSuccess {String} result.rec_goods_list.goods_name 商品名称
  152. * @apiSuccess {Float} result.rec_goods_list.goods_price 商品价格
  153. * @apiSuccess {Int} result.rec_goods_list.goods_salenum 销量
  154. * @apiSuccess {Boolean} result.rec_goods_list.group_flag 是否抢购 false否true是
  155. * @apiSuccess {Int} result.rec_goods_list.is_goodsfcode 是否F码商品 0否1是
  156. * @apiSuccess {Int} result.rec_goods_list.is_have_gift 是否含赠品 0否1是
  157. * @apiSuccess {Int} result.rec_goods_list.is_virtual 是否虚拟商品 0否1是
  158. * @apiSuccess {Int} result.rec_goods_list.store_id 店铺ID
  159. * @apiSuccess {String} result.rec_goods_list.store_name 店铺名称
  160. * @apiSuccess {Boolean} result.rec_goods_list.xianshi_flag 是否显示 false否true是
  161. * @apiSuccess {Int} result.rec_goods_list_count 推荐商品数
  162. * @apiSuccess {Object} result.store_info 店铺信息
  163. * @apiSuccess {Int} result.store_info.goods_count 商品数
  164. * @apiSuccess {Boolean} result.store_info.is_favorate 已收藏 false否true是
  165. * @apiSuccess {Boolean} result.store_info.is_platform_store 是否自营 false否true是
  166. * @apiSuccess {String[]} result.store_info.mb_sliders 轮播图
  167. * @apiSuccess {String} result.store_info.mb_title_img 背景图
  168. * @apiSuccess {Int} result.store_info.member_id 用户ID
  169. * @apiSuccess {String} result.store_info.store_avatar 店铺图像
  170. * @apiSuccess {Int} result.store_info.store_collect 店铺收藏数
  171. * @apiSuccess {String} result.store_info.store_credit_text 信用描述
  172. * @apiSuccess {Int} result.store_info.store_id 店铺ID
  173. * @apiSuccess {String} result.store_info.store_name 店铺名称
  174. * @apiSuccess {Object[]} result.store_info.store_credit 店铺评分
  175. * @apiSuccess {String} result.store_info.store_company_name 店铺公司名称
  176. * @apiSuccess {String} result.store_info.area_info 店铺地址
  177. * @apiSuccess {String} result.store_info.store_phone 店铺商家电话
  178. * @apiSuccess {String} result.store_info.store_mainbusiness 店铺主营商品
  179. * @apiSuccess {String} result.store_info.seller_name 店铺店主用户名
  180. * @apiSuccess {String} result.store_info.store_qq 店铺QQ
  181. * @apiSuccess {String} result.store_info.store_ww 店铺旺旺
  182. */
  183. public function store_info()
  184. {
  185. $store_id = intval(input('param.store_id'));
  186. if ($store_id <= 0) {
  187. ds_json_encode(10001, lang('param_error'));
  188. }
  189. $store_online_info = model('store')->getStoreOnlineInfoByID($store_id);
  190. if (empty($store_online_info)) {
  191. ds_json_encode(10001, lang('show_store_index_store_not_exists'));
  192. }
  193. $store_info = [];
  194. $store_info['store_id'] = $store_online_info['store_id'];
  195. $store_info['store_name'] = $store_online_info['store_name'];
  196. $store_info['member_id'] = $store_online_info['member_id'];
  197. $store_info['store_credit'] = $store_online_info['store_credit'];
  198. $store_info['store_company_name'] = $store_online_info['store_company_name'];
  199. $store_info['area_info'] = $store_online_info['area_info'];
  200. $store_info['store_phone'] = $store_online_info['store_phone'];
  201. $store_info['store_mainbusiness'] = $store_online_info['store_mainbusiness'];
  202. $store_info['seller_name'] = $store_online_info['seller_name'];
  203. $store_info['store_qq'] = $store_online_info['store_qq'];
  204. $store_info['store_ww'] = $store_online_info['store_ww'];
  205. $store_info['store_longitude'] = $store_online_info['store_longitude'];
  206. $store_info['store_latitude'] = $store_online_info['store_latitude'];
  207. $store_info['store_address'] = $store_online_info['store_address'];
  208. $storejoinin_model = model('storejoinin');
  209. if (!$store_online_info['is_platform_store']) {
  210. $storejoinin_info = $storejoinin_model->getOneStorejoinin(['member_id' => $store_info['member_id']]);
  211. //营业执照
  212. if ($storejoinin_info) {
  213. $store_info['business_licence_number_electronic'] = $storejoinin_info['business_licence_number_electronic'] ? get_store_joinin_imageurl($storejoinin_info['business_licence_number_electronic']) : '';
  214. }
  215. }
  216. // 店铺头像
  217. $store_info['store_avatar'] = get_store_logo($store_online_info['store_avatar']);
  218. // 商品数
  219. $store_info['goods_count'] = (int)$store_online_info['goods_count'];
  220. // 店铺被收藏次数
  221. $store_info['store_collect'] = (int)$store_online_info['store_collect'];
  222. // 如果已登录 判断该店铺是否已被收藏
  223. if ($memberId = $this->getMemberIdIfExists()) {
  224. $c = (int)model('favorites')->getStoreFavoritesCountByStoreId($store_id, $memberId);
  225. $store_info['is_favorate'] = $c > 0;
  226. } else {
  227. $store_info['is_favorate'] = false;
  228. }
  229. // 是否官方店铺
  230. $store_info['is_platform_store'] = (bool)$store_online_info['is_platform_store'];
  231. // 动态评分
  232. if ($store_info['is_platform_store']) {
  233. $store_info['store_credit_text'] = lang('official_store');
  234. } else {
  235. $store_info['store_credit_text'] = sprintf(
  236. lang('store_credit_text'), $store_online_info['store_credit']['store_desccredit']['credit'], $store_online_info['store_credit']['store_servicecredit']['credit'], $store_online_info['store_credit']['store_deliverycredit']['credit']
  237. );
  238. }
  239. // 页头背景图
  240. $store_info['mb_title_img'] = !empty($store_online_info['mb_title_img']) ? ds_get_pic(ATTACH_STORE, $store_online_info['mb_title_img']) : '';
  241. // 轮播
  242. $store_info['mb_sliders'] = [];
  243. $mbSliders = @unserialize($store_online_info['mb_sliders']);
  244. if ($mbSliders) {
  245. foreach ((array)$mbSliders as $s) {
  246. if ($s['img']) {
  247. $s['imgUrl'] = ds_get_pic(ATTACH_STORE . DIRECTORY_SEPARATOR . 'mobileslide', $s['img']);
  248. $store_info['mb_sliders'][] = $s;
  249. }
  250. }
  251. }
  252. //店主推荐
  253. $where = [];
  254. $where[] = ['store_id', '=', $store_id];
  255. $where[] = ['goods_commend', '=', 1];
  256. $goods_model = model('goods');
  257. $goods_fields = $this->getGoodsFields();
  258. $goods_list = $goods_model->getGoodsListByColorDistinct($where, $goods_fields, 'goods_sort desc, goods_id desc', 0, 20);
  259. $goods_list = $this->_goods_list_extend($goods_list);
  260. $cache_key = 'goods-live-' . $store_info['store_id'] . '-' . date('H');
  261. $result = rcache($cache_key);
  262. if (empty($result)) {
  263. //获取店铺一小时内正在进行的直播
  264. $live_apply_model = model('live_apply');
  265. $condition = [];
  266. $condition[] = ['live_apply_state', '=', 1];
  267. $condition[] = ['live_apply_play_time', '<', strtotime(date('Y-m-d H:0:0')) + 3600];
  268. $condition[] = ['live_apply_end_time', '>', TIMESTAMP];
  269. $condition[] = ['live_apply_type', '=', LIVE_APPLY_TYPE_GOODS];
  270. $condition[] = ['live_apply_user_type', '=', 2];
  271. $condition[] = ['live_apply_user_id', '=', $store_info['store_id']];
  272. $live_apply_list = $live_apply_model->getLiveApplyList($condition, '*', 0);
  273. foreach ($live_apply_list as $key => $val) {
  274. $live_apply_list[$key]['goods_commonid_array'] = Db::name('live_apply_goods')->where([['live_apply_id', '=', $val['live_apply_id']]])->column('goods_commonid');
  275. }
  276. $minute = 60 - intval(date('i'));
  277. $result = ['live_apply_list' => $live_apply_list];
  278. wcache($cache_key, $result, $minute * 60);
  279. }
  280. $live_apply_list = $result['live_apply_list'];
  281. foreach ($live_apply_list as $val) {
  282. if ($val['live_apply_play_time'] < TIMESTAMP && $val['live_apply_end_time'] > TIMESTAMP) {
  283. $val['live_apply_cover_image_url'] = ds_get_pic(ATTACH_COMMON, config('ds_config.default_goods_image'));
  284. if ($val['live_apply_cover_video']) {
  285. $val['live_apply_cover_video_url'] = ds_get_pic(ATTACH_LIVE_APPLY . '/' . $val['live_apply_user_id'], $val['live_apply_cover_video']);
  286. } elseif ($val['live_apply_cover_image']) {
  287. $val['live_apply_cover_image_url'] = ds_get_pic(ATTACH_LIVE_APPLY . '/' . $val['live_apply_user_id'], $val['live_apply_cover_image']);
  288. }
  289. $i = 0;
  290. $val['goods_list'] = [];
  291. foreach ($val['goods_commonid_array'] as $v) {
  292. $goods_info = $goods_model->getGoodsCommonInfoByID($v);
  293. if (!$goods_info || $goods_info['goods_state'] != 1 || $goods_info['goods_verify'] != 1) {
  294. continue;
  295. }
  296. $goods_info['goods_image_url'] = goods_cthumb($goods_info['goods_image'], 480, $goods_info['store_id']);
  297. $val['goods_list'][] = $goods_info;
  298. $i++;
  299. if ($i >= 3) {
  300. break;
  301. }
  302. }
  303. $store_info['live_apply_info'] = $val;
  304. break;
  305. }
  306. }
  307. $result = [
  308. 'store_info' => $store_info,
  309. 'rec_goods_list_count' => count($goods_list),
  310. 'rec_goods_list' => $goods_list,
  311. ];
  312. ds_json_encode(10000, '', $result);
  313. }
  314. /**
  315. * 店铺列表(到店付款)
  316. */
  317. public function get_store_list()
  318. {
  319. //搜索条件
  320. $condition = [
  321. ['store_state', '=', 1],
  322. ['is_arrive', '=', 1],
  323. ];
  324. $keyword = trim(input('param.keyword'));
  325. if (!empty($keyword)) {
  326. $condition[] = ['store_name', 'like', "%{$keyword}%"];
  327. }
  328. $storeclass_id = input('param.storeclass_id');
  329. if (!empty($storeclass_id)) {
  330. $condition[] = ['storeclass_id', '=', $storeclass_id];
  331. }
  332. //获取店铺列表
  333. $store_model = model('store');
  334. $store_list = $store_model->getStoreList($condition, $this->pagesize);
  335. /**
  336. * 数据处理
  337. */
  338. foreach ($store_list as $key => $val) {
  339. $store_list[$key]['store_avatar'] = get_store_logo($store_list[$key]['store_avatar']);
  340. }
  341. $result = array_merge(['store_list' => $store_list], mobile_page($store_model->page_info));
  342. ds_json_encode(10000, '', $result);
  343. }
  344. /**
  345. * 店铺详情(到店付款)
  346. */
  347. public function get_store_info()
  348. {
  349. $store_id = intval(input('param.store_id'));
  350. $info = Db::name('store')->where('store_id', $store_id)->find();
  351. if (empty($info) || $info['store_state'] != 1 || $info['is_arrive'] != 1) {
  352. ds_json_encode(10001, lang('show_store_index_store_not_exists'));
  353. }
  354. $info['store_avatar'] = get_store_logo($info['store_avatar']);
  355. ds_json_encode(10000, '', $info);
  356. }
  357. /**
  358. * 获取所有分类
  359. */
  360. public function get_all_class()
  361. {
  362. $list = model('Storeclass')->getStoreclassList();
  363. ds_json_encode(10000, '', $list);
  364. }
  365. /**
  366. * 创建订单(到店付款)
  367. */
  368. public function create_order()
  369. {
  370. // store_id: ""
  371. // card_id: "13788854878"
  372. // order_amount: "101"
  373. $member_info = $this->_getMemberInfo();
  374. $order_amount = input('param.order_amount');
  375. $store_id = input('param.store_id');
  376. if ($order_amount <= 0) {
  377. ds_json_encode(10001, '订单金额必须大于0');
  378. }
  379. $order = [];
  380. $order['order_state'] = 10;
  381. $order['deduction_amount'] = 0;
  382. $order['store_id'] = $store_id;
  383. $orderSn = makePaySn($member_info['member_id']);
  384. $logic_payment = model('payment', 'logic'); //推送消息记录
  385. $card_id = input('param.card_id');
  386. $order['card_id'] = $card_id;
  387. if (!empty($card_id) || $card_id != 0) {
  388. if (strpos($card_id, ',') !== false) {
  389. $card_ids = explode(',', $card_id);
  390. } else {
  391. $card_ids[] = $card_id;
  392. }
  393. $SubCard = model('Subcard');
  394. foreach ($card_ids as $key => $value) {
  395. $where = [];
  396. $where['id'] = $value;
  397. $where['member_id'] = $member_info['member_id'];
  398. $cardInfo = $SubCard->where($where)->find();
  399. if (!$cardInfo && $cardInfo['card_status'] != 3 && $cardInfo['balance'] != 0) {
  400. continue;
  401. }
  402. if (!empty($cardInfo['bind_store'])) {
  403. $class_id = Db::name('store')->where('store_id', $store_id)->value('storeclass_id');
  404. if (!empty($class_id)) {
  405. $bind_store = explode(',', $cardInfo['bind_store']);
  406. if (!in_array($class_id, $bind_store)) {
  407. continue;
  408. }
  409. }
  410. }
  411. $balance = $cardInfo['balance'];
  412. //1.卡的余额要变, 订单金额也要变
  413. if ($balance < $order_amount - $order['deduction_amount']) {
  414. //余额小于 先冻结起来
  415. $pay_amount = $balance;
  416. $order['deduction_amount'] += $pay_amount;
  417. // $unpaid_amount =
  418. // $order['card_id'] = $value;
  419. $updateInfo = [
  420. 'balance' => 0,
  421. 'card_status' => 3,//用完了
  422. 'freeze' => $cardInfo['freeze'] + $pay_amount, //余额冻结
  423. 'used_count' => $cardInfo['used_count'] + 1,
  424. 'update_time' => time(),
  425. ];
  426. $info = [
  427. 'cardNo' => $cardInfo['card_no'],
  428. 'memberId' => $member_info['member_id'],
  429. 'amount' => $pay_amount,
  430. 'orderNo' => $orderSn,
  431. ];
  432. $logic_payment->payRecordPushNoAmount($info, 1);
  433. } else {
  434. //余额大于等于订单金额
  435. $pay_amount = $order_amount - $order['deduction_amount'];
  436. $order['deduction_amount'] += $pay_amount;
  437. // $order['card_id'] = $cardId;
  438. $order['payment_time'] = TIMESTAMP;
  439. $order['finished_time'] = TIMESTAMP;
  440. $order['payment_code'] = 'card';
  441. $updateInfo = [
  442. 'balance' => $balance - $pay_amount,
  443. 'card_status' => 2, //状态为使用中
  444. 'freeze' => $cardInfo['freeze'] + $pay_amount, //余额冻结
  445. 'used_count' => $cardInfo['used_count'] + 1,
  446. 'update_time' => time(),
  447. ];
  448. $order['order_state'] = 40; //直接就到了待发货阶段
  449. $info = [
  450. 'cardNo' => $cardInfo['card_no'],
  451. 'memberId' => $member_info['member_id'],
  452. 'amount' => $pay_amount,
  453. 'orderNo' => $orderSn,
  454. ];
  455. $logic_payment->payRecordPushNoAmount($info, 1);
  456. }
  457. Db::name('sub_card')->where([
  458. ['id', '=', $value],
  459. ])->update($updateInfo);
  460. $expenseData[$key] = [
  461. 'member_id' => $member_info['member_id'],
  462. 'card_id' => $value,
  463. 'expense_amount' => $pay_amount, //抵消金额
  464. 'order_amount' => $order_amount,
  465. 'expense_time' => time(),
  466. ];
  467. }
  468. }
  469. $order['order_sn'] = $orderSn;
  470. $order['account'] = 'bbfuli1117';
  471. $order['buyer_id'] = $member_info['member_id'];
  472. $order['buyer_name'] = $member_info['member_name'];
  473. $order['add_time'] = TIMESTAMP;
  474. $order['order_amount'] = $order_amount;
  475. $order['pd_amount'] = 0;
  476. $storeOrder = model('StoreOrder');
  477. $storeOrder->startTrans();
  478. $result = $storeOrder->save($order);
  479. if (!$result) {
  480. $storeOrder->rollback();
  481. ds_json_encode(10001, '订单保存失败');
  482. }
  483. $order_id = $storeOrder->id;
  484. if (!empty($expenseData)) {
  485. foreach ($expenseData as $key => $value) {
  486. //插入消费记录
  487. $value['order_id'] = $order_id;
  488. $value['is_vir'] = 3;
  489. Db::name('sub_card_expense')->insert($value);
  490. }
  491. if ($order['deduction_amount'] == $order['order_amount']) {
  492. $order['order_id'] = $order_id;
  493. $logic_payment->paysuccesspush($order, 3);
  494. $logic_payment->payPhoneMessage($order, 3);
  495. }
  496. }
  497. $storeOrder->commit();
  498. $data = [];
  499. $data['order_id'] = $order_id;
  500. $data['order_sn'] = $orderSn;
  501. $data['pay_type'] = 'store_pay';
  502. ds_json_encode(10000, '订单保存成功', $data);
  503. }
  504. /**
  505. * @api {POST} api/Store/store_goods_class 店铺商品分类
  506. * @apiVersion 1.0.0
  507. * @apiGroup Store
  508. *
  509. * @apiParam {Int} store_id 店铺ID
  510. *
  511. * @apiSuccess {String} code 返回码,10000为成功
  512. * @apiSuccess {String} message 返回消息
  513. * @apiSuccess {Object} result 返回数据
  514. */
  515. public function store_goods_class()
  516. {
  517. $store_id = intval(input('param.store_id'));
  518. if ($store_id <= 0) {
  519. ds_json_encode(10001, lang('param_error'));
  520. }
  521. $store_online_info = model('store')->getStoreOnlineInfoByID($store_id);
  522. if (empty($store_online_info)) {
  523. ds_json_encode(10001, lang('show_store_index_store_not_exists'));
  524. }
  525. $store_info = [];
  526. $store_info['store_id'] = $store_online_info['store_id'];
  527. $store_info['store_name'] = $store_online_info['store_name'];
  528. $store_goods_class = model('storegoodsclass')->getStoregoodsclassList(['store_id' => $store_id]);
  529. if ($store_goods_class) {
  530. $tree = new \mall\Tree();
  531. $tree->setTree($store_goods_class, 'storegc_id', 'storegc_parent_id', 'storegc_name');
  532. $store_goods_class = $tree->getArrayList();
  533. }
  534. $result = [
  535. 'store_info' => $store_info,
  536. 'store_goods_class' => $store_goods_class,
  537. ];
  538. ds_json_encode(10000, '', $result);
  539. }
  540. /**
  541. * @api {POST} api/Store/store_goods 店铺商品
  542. * @apiVersion 1.0.0
  543. * @apiGroup Store
  544. *
  545. * @apiParam {Int} store_id 店铺ID
  546. * @apiParam {Int} storegc_id 店铺分类ID
  547. * @apiParam {String} keyword 关键词
  548. * @apiParam {String} prom_type 促销类型 xianshi限时折扣
  549. * @apiParam {Float} price_from 价格从
  550. * @apiParam {Float} price_to 价格到
  551. * @apiParam {Int} key 排序键 1商品id 2促销价 3销量 4收藏量 5点击量
  552. * @apiParam {Int} order 排序值 1升序 2降序
  553. *
  554. * @apiSuccess {String} code 返回码,10000为成功
  555. * @apiSuccess {String} message 返回消息
  556. * @apiSuccess {Object} result 返回数据
  557. */
  558. public function store_goods()
  559. {
  560. $param = input('param.');
  561. $store_id = (int)$param['store_id'];
  562. if ($store_id <= 0) {
  563. ds_json_encode(10001, lang('param_error'));
  564. }
  565. $storegc_id = isset($param['storegc_id']) ? (int)$param['storegc_id'] : '';
  566. $keyword = isset($param['keyword']) ? trim((string)$param['keyword']) : '';
  567. $condition = [];
  568. $condition[] = ['store_id', '=', $store_id];
  569. // 默认不显示预订商品
  570. if ($storegc_id > 0) {
  571. $condition[] = ['goods_stcids', 'like', '%,' . $storegc_id . ',%'];
  572. }
  573. //促销类型
  574. if (isset($param['prom_type'])) {
  575. switch ($param['prom_type']) {
  576. case 'xianshi':
  577. $condition[] = ['goods_promotion_type', '=', 2];
  578. break;
  579. case 'groupbuy':
  580. $condition[] = ['goods_promotion_type', '=', 1];
  581. break;
  582. }
  583. }
  584. if ($keyword != '') {
  585. $condition[] = ['goods_name', 'like', '%' . $keyword . '%'];
  586. }
  587. $price_from = preg_match('/^[\d.]{1,20}$/', isset($param['price_from'])) ? $param['price_from'] : null;
  588. $price_to = preg_match('/^[\d.]{1,20}$/', isset($param['price_to'])) ? $param['price_to'] : null;
  589. if ($price_from && $price_from) {
  590. $condition[] = ['goods_promotion_price', 'between', "{$price_from},{$price_to}"];
  591. } elseif ($price_from) {
  592. $condition[] = ['goods_promotion_price', '>=', $price_from];
  593. } elseif ($price_to) {
  594. $condition[] = ['goods_promotion_price', '<=', $price_to];
  595. }
  596. // 排序
  597. $order = (isset($param['sort_order']) && (int)$param['sort_order'] == 1) ? 'asc' : 'desc';
  598. if (isset($param['sort_key'])) {
  599. switch (trim($param['sort_key'])) {
  600. case '1':
  601. $order = 'goods_id ' . $order;
  602. break;
  603. case '2':
  604. $order = 'goods_promotion_price ' . $order;
  605. break;
  606. case '3':
  607. $order = 'goods_salenum ' . $order;
  608. break;
  609. case '4':
  610. $order = 'goods_collect ' . $order;
  611. break;
  612. case '5':
  613. $order = 'goods_click ' . $order;
  614. break;
  615. default:
  616. $order = 'goods_id DESC';
  617. break;
  618. }
  619. } else {
  620. $order = 'goods_id DESC';
  621. }
  622. $goods_model = model('goods');
  623. $goods_fields = $this->getGoodsFields();
  624. $goods_list = $goods_model->getGoodsListByColorDistinct($condition, $goods_fields, $order, 10);
  625. $goods_list = $this->_goods_list_extend($goods_list);
  626. $result = array_merge(['goods_list_count' => count($goods_list), 'goods_list' => $goods_list,], mobile_page($goods_model->page_info));
  627. ds_json_encode(10000, '', $result);
  628. }
  629. /**
  630. * 获取订单详情
  631. */
  632. public function get_order_info()
  633. {
  634. $pay_sn = input('param.pay_sn');
  635. $condition = [];
  636. $condition[] = ['order_sn', '=', $pay_sn];
  637. $order_info = model('StoreOrder')->where($condition)->find();
  638. if ($order_info['order_state'] != 10) {
  639. ds_json_encode(12001, lang('pay_repeat'));
  640. }
  641. $condition = [];
  642. $condition[] = ['payment_platform', '=', 'h5'];
  643. $payment_list = model('payment')->getPaymentOpenList($condition);
  644. $member_info = $this->_getMemberInfo();
  645. $pay_info['pay_amount'] = $order_info['order_amount'];
  646. $pay_info['member_available_pd'] = $member_info['available_predeposit'];
  647. $pay_info['member_available_rcb'] = $member_info['available_rc_balance'];
  648. $pay_info['member_available_point'] = $member_info['point'];
  649. $pay_info['member_paypwd'] = true;
  650. if (empty($member_info['member_paypwd'])) {
  651. $pay_info['member_paypwd'] = false;
  652. }
  653. $pay_info['pay_sn'] = $order_info['order_sn'];
  654. $pay_info['payed_amount'] = $order_info['pd_amount'] + $order_info['rcb_amount'] + $order_info['deduction_amount'];
  655. if ($pay_info['payed_amount'] > '0.00') {
  656. $pay_info['pay_amount'] = $pay_info['pay_amount'] - $pay_info['payed_amount'];
  657. }
  658. //如果线上线下支付金额都为0,转到支付成功页
  659. if (empty($pay_info['pay_amount'])) {
  660. ds_json_encode(12001, lang('pay_repeat'));
  661. }
  662. $pay_in["pay_info"] = $pay_info;
  663. $pay_in["pay_info"]["payment_list"] = $payment_list;
  664. ds_json_encode(10000, '', $pay_in);
  665. }
  666. private function getGoodsFields()
  667. {
  668. return implode(',', [
  669. 'goods_id',
  670. 'goods_commonid',
  671. 'store_id',
  672. 'store_name',
  673. 'goods_name',
  674. 'goods_price',
  675. 'goods_promotion_price',
  676. 'goods_promotion_type',
  677. 'goods_marketprice',
  678. 'goods_image',
  679. 'goods_salenum',
  680. 'evaluation_good_star',
  681. 'evaluation_count',
  682. 'is_virtual',
  683. 'is_goodsfcode',
  684. 'is_have_gift',
  685. 'goods_addtime',
  686. ]);
  687. }
  688. /**
  689. * 处理商品列表(抢购、限时折扣、商品图片)
  690. */
  691. private function _goods_list_extend($goods_list)
  692. {
  693. //获取商品列表编号数组
  694. $goodsid_array = [];
  695. foreach ($goods_list as $key => $value) {
  696. $goodsid_array[] = $value['goods_id'];
  697. }
  698. foreach ($goods_list as $key => $value) {
  699. $goods_list[$key]['group_flag'] = false;
  700. $goods_list[$key]['xianshi_flag'] = false;
  701. $goods_list[$key]['goods_price'] = $value['goods_promotion_price'];
  702. switch ($value['goods_promotion_type']) {
  703. case 1:
  704. $goods_list[$key]['group_flag'] = true;
  705. break;
  706. case 2:
  707. $goods_list[$key]['xianshi_flag'] = true;
  708. break;
  709. }
  710. //商品图片url
  711. $goods_list[$key]['goods_image_url'] = goods_cthumb($value['goods_image'], 480, $value['store_id']);
  712. unset($goods_list[$key]['goods_promotion_type']);
  713. unset($goods_list[$key]['goods_promotion_price']);
  714. unset($goods_list[$key]['goods_commonid']);
  715. unset($goods_list[$key]['nc_distinct']);
  716. }
  717. return $goods_list;
  718. }
  719. /**
  720. * 商品评价
  721. */
  722. public function store_credit()
  723. {
  724. $store_id = intval(input('param.store_id'));
  725. if ($store_id <= 0) {
  726. ds_json_encode(10001, lang('param_error'));
  727. }
  728. $store_online_info = model('store')->getStoreOnlineInfoByID($store_id);
  729. if (empty($store_online_info)) {
  730. ds_json_encode(10001, lang('show_store_index_store_not_exists'));
  731. }
  732. ds_json_encode(10000, '', ['store_credit' => $store_online_info['store_credit']]);
  733. }
  734. /**
  735. * 店铺商品排行
  736. */
  737. public function store_goods_rank()
  738. {
  739. $store_id = intval(input('param.store_id'));
  740. if ($store_id <= 0) {
  741. ds_json_encode(10001, '查询出错');
  742. }
  743. $ordertype = ($t = trim(input('param.ordertype'))) ? $t : 'salenumdesc';
  744. $show_num = ($t = intval(input('param.num'))) > 0 ? $t : 10;
  745. $where = [];
  746. $where[] = ['store_id', '=', $store_id];
  747. // 排序
  748. switch ($ordertype) {
  749. case 'salenumdesc':
  750. $order = 'goods_salenum desc';
  751. break;
  752. case 'salenumasc':
  753. $order = 'goods_salenum asc';
  754. break;
  755. case 'collectdesc':
  756. $order = 'goods_collect desc';
  757. break;
  758. case 'collectasc':
  759. $order = 'goods_collect asc';
  760. break;
  761. case 'clickdesc':
  762. $order = 'goods_click desc';
  763. break;
  764. case 'clickasc':
  765. $order = 'goods_click asc';
  766. break;
  767. }
  768. if ($order) {
  769. $order .= ',goods_id desc';
  770. } else {
  771. $order = 'goods_id desc';
  772. }
  773. $goods_model = model('goods');
  774. $goods_fields = $this->getGoodsFields();
  775. $goods_list = $goods_model->getGoodsListByColorDistinct($where, $goods_fields, $order, 0, $show_num);
  776. $goods_list = $this->_goods_list_extend($goods_list);
  777. ds_json_encode(10000, '', ['goods_list' => $goods_list]);
  778. }
  779. /**
  780. * 店铺商品上新
  781. */
  782. public function store_new_goods()
  783. {
  784. $store_id = intval(input('param.store_id'));
  785. if ($store_id <= 0) {
  786. ds_json_encode(10000, '', ['goods_list' => []]);
  787. }
  788. $show_day = ($t = intval(input('param.show_day'))) > 0 ? $t : 30;
  789. $where = [];
  790. $where[] = ['store_id', '=', $store_id];
  791. $stime = strtotime(date('Y-m-d', TIMESTAMP - 86400 * $show_day));
  792. $etime = $stime + 86400 * ($show_day + 1);
  793. $where[] = ['goods_addtime', 'between', [$stime, $etime]];
  794. $order = 'goods_addtime desc, goods_id desc';
  795. $goods_model = model('goods');
  796. $goods_fields = $this->getGoodsFields();
  797. $goods_list = $goods_model->getGoodsListByColorDistinct($where, $goods_fields, $order, $this->pagesize);
  798. if ($goods_list) {
  799. $goods_list = $this->_goods_list_extend($goods_list);
  800. foreach ($goods_list as $k => $v) {
  801. $v['goods_addtime_text'] = $v['goods_addtime'] ? $this->checkTime($v['goods_addtime']) : '';
  802. $goods_list[$k] = $v;
  803. }
  804. }
  805. $result = array_merge(['goods_list' => $goods_list], mobile_page($goods_model->page_info));
  806. ds_json_encode(10000, '', $result);
  807. }
  808. /**
  809. * 店铺简介
  810. */
  811. public function store_intro()
  812. {
  813. $store_id = intval(input('param.store_id'));
  814. if ($store_id <= 0) {
  815. ds_json_encode(10001, lang('param_error'));
  816. }
  817. $store_online_info = model('store')->getStoreOnlineInfoByID($store_id);
  818. if (empty($store_online_info)) {
  819. ds_json_encode(10001, lang('show_store_index_store_not_exists'));
  820. }
  821. $store_info = $store_online_info;
  822. //开店时间
  823. $store_info['store_time_text'] = $store_info['store_addtime'] ? @date('Y-m-d', $store_info['store_addtime']) : '';
  824. // 店铺头像
  825. $store_info['store_avatar'] = get_store_logo($store_online_info['store_avatar']);
  826. //商品数
  827. $store_info['goods_count'] = (int)$store_online_info['goods_count'];
  828. //店铺被收藏次数
  829. $store_info['store_collect'] = (int)$store_online_info['store_collect'];
  830. //店铺所属分类
  831. $store_class = model('storeclass')->getStoreclassInfo(['storeclass_id' => $store_info['storeclass_id']]);
  832. $store_info['storeclass_name'] = $store_class['storeclass_name'];
  833. //如果已登录 判断该店铺是否已被收藏
  834. if ($member_id = $this->getMemberIdIfExists()) {
  835. $c = (int)model('favorites')->getStoreFavoritesCountByStoreId($store_id, $member_id);
  836. $store_info['is_favorate'] = $c > 0 ? true : false;
  837. } else {
  838. $store_info['is_favorate'] = false;
  839. }
  840. // 是否官方店铺
  841. $store_info['is_platform_store'] = (bool)$store_online_info['is_platform_store'];
  842. // 页头背景图
  843. $store_info['mb_title_img'] = $store_online_info['mb_title_img'] ? ds_get_pic(ATTACH_STORE, $store_online_info['mb_title_img']) : '';
  844. // 轮播
  845. $store_info['mb_sliders'] = [];
  846. $mbSliders = @unserialize($store_online_info['mb_sliders']);
  847. if ($mbSliders) {
  848. foreach ((array)$mbSliders as $s) {
  849. if ($s['img']) {
  850. $s['imgUrl'] = ds_get_pic(ATTACH_STORE, $s['img']);
  851. $store_info['mb_sliders'][] = $s;
  852. }
  853. }
  854. }
  855. ds_json_encode(10000, '', ['store_info' => $store_info]);
  856. }
  857. /**
  858. * @api {POST} api/Store/get_store_class 获取店铺分类
  859. * @apiVersion 1.0.0
  860. * @apiGroup Store
  861. *
  862. * @apiHeader {String} X-DS-KEY 卖家授权token
  863. *
  864. * @apiSuccess {String} code 返回码,10000为成功
  865. * @apiSuccess {String} message 返回消息
  866. * @apiSuccess {Object} result 返回数据
  867. * @apiSuccess {Object[]} result.store_class 返回数据
  868. * @apiSuccess {Int} result.store_class.storeclass_bail 店铺分类保证金数额
  869. * @apiSuccess {Int} result.store_class.storeclass_id 店铺分类ID
  870. * @apiSuccess {String} result.store_class.storeclass_name 店铺分类名
  871. * @apiSuccess {Int} result.store_class.storeclass_sort 排序
  872. */
  873. public function get_store_class()
  874. {
  875. $store_class = rkcache('storeclass', true);
  876. ds_json_encode(10000, '', ['store_class' => array_values($store_class)]);
  877. }
  878. public function get_store_grade()
  879. {
  880. $storegrade_list = model('storegrade')->getStoregradeList();
  881. ds_json_encode(10000, '', ['storegrade_list' => array_values($storegrade_list)]);
  882. }
  883. /**
  884. * 店铺活动
  885. */
  886. public function store_promotion()
  887. {
  888. $xianshi_array = model('pxianshi');
  889. $promotion['promotion'] = $condition = [];
  890. $condition[] = ['store_id', '=', intval(input('post.store_id'))];
  891. $condition[] = ['xianshi_end_time', '>', TIMESTAMP];
  892. $condition[] = ['xianshi_state', '=', 1];
  893. $xianshi = $xianshi_array->getXianshiList($condition);
  894. if (!empty($xianshi)) {
  895. foreach ($xianshi as $key => $value) {
  896. $xianshi[$key]['start_time_text'] = date('Y-m-d', $value['xianshi_starttime']);
  897. $xianshi[$key]['end_time_text'] = date('Y-m-d', $value['xianshi_end_time']);
  898. $xianshi[$key]['goods_list'] = model('pxianshigoods')->getXianshigoodsExtendList(['xianshi_id' => $value['xianshi_id']]);
  899. }
  900. $promotion['promotion']['xianshi'] = $xianshi;
  901. }
  902. $mansong_array = model('pmansong');
  903. $condition = [];
  904. $condition[] = ['store_id', '=', intval(input('post.store_id'))];
  905. $condition[] = ['mansong_endtime', '>', TIMESTAMP];
  906. $condition[] = ['mansong_state', '=', 1];
  907. $mansong = $mansong_array->getMansongList($condition);
  908. if (!empty($mansong)) {
  909. foreach ($mansong as $key => $value) {
  910. $mansong[$key]['start_time_text'] = date('Y-m-d', $value['mansong_starttime']);
  911. $mansong[$key]['end_time_text'] = date('Y-m-d', $value['mansong_endtime']);
  912. $mansong[$key]['rules'] = model('pmansongrule')->getMansongruleListByID($value['mansong_id']);
  913. }
  914. $promotion['promotion']['mansong'] = $mansong;
  915. }
  916. if (!empty($promotion['promotion'])) {
  917. ds_json_encode(10000, '', $promotion);
  918. }
  919. ds_json_encode(10001, lang('no_promotion_recent'));
  920. }
  921. /**
  922. * 取得的时间间隔
  923. */
  924. public function checkTime($time)
  925. {
  926. if ($time == '') {
  927. return false;
  928. }
  929. $catch_time = (TIMESTAMP - $time);
  930. if ($catch_time < 60) {
  931. return $catch_time . lang('second_ago');
  932. } elseif ($catch_time < 60 * 60) {
  933. return intval($catch_time / 60) . lang('minute_ago');
  934. } elseif ($catch_time < 60 * 60 * 24) {
  935. return intval($catch_time / 60 / 60) . lang('hour_ago');
  936. } elseif ($catch_time < 60 * 60 * 24 * 30) {
  937. return intval($catch_time / 60 / 60 / 24) . lang('day_ago');
  938. } elseif ($catch_time < 60 * 60 * 24 * 360) {
  939. return intval($catch_time / 60 / 60 / 24 / 30) . lang('month_ago');
  940. } elseif ($catch_time < 60 * 60 * 24 * 365 * 2) {
  941. return intval($catch_time / 60 / 60 / 24 / 365) . lang('year_ago');
  942. } else {
  943. return date('Y-m-d', $time);
  944. }
  945. }
  946. public function get_store_map()
  947. {
  948. $region = input('param.region');
  949. $o_name = input('param.o_name');
  950. $o_lng = input('param.o_lng');
  951. $o_lat = input('param.o_lat');
  952. $d_name = input('param.d_name');
  953. $d_lng = input('param.d_lng');
  954. $d_lat = input('param.d_lat');
  955. if (!$o_lng || !$o_lat || !$o_name || !$d_lng || !$d_lat || !$d_name) {
  956. ds_json_encode(10001, lang('param_error'));
  957. }
  958. $url = 'https://api.map.baidu.com/direction?region=' . urlencode($region) . '&origin=latlng:' . $o_lat . ',' . $o_lng . '|name:' . urlencode($o_name) . '&destination=latlng:' . $d_lat . ',' . $d_lng . '|name:' . urlencode($d_name) . '&mode=driving&output=html&src=' . urlencode(config('ds_config.h5_site_url'));
  959. $ci = curl_init();
  960. /* Curl settings */
  961. curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  962. curl_setopt($ci, CURLOPT_USERAGENT, "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1");
  963. curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 60); /* 在发起连接前等待的时间,如果设置为0,则无限等待 */
  964. curl_setopt($ci, CURLOPT_TIMEOUT, 7); /* 设置cURL允许执行的最长秒数 */
  965. curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
  966. curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'GET'); /* //设置请求方式 */
  967. curl_setopt($ci, CURLOPT_URL, $url);
  968. curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts
  969. curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, FALSE); // 不从证书中检查SSL加密算法是否存在
  970. //curl_setopt($ci, CURLOPT_HEADER, true); /*启用时会将头文件的信息作为数据流输出*/
  971. // curl_setopt($ci, CURLOPT_FOLLOWLOCATION, 1);
  972. curl_setopt($ci, CURLOPT_MAXREDIRS, 2);/*指定最多的HTTP重定向的数量,这个选项是和CURLOPT_FOLLOWLOCATION一起使用的*/
  973. curl_setopt($ci, CURLINFO_HEADER_OUT, true);
  974. /*curl_setopt($ci, CURLOPT_COOKIE, $Cookiestr); * *COOKIE带过去** */
  975. $response = curl_exec($ci);
  976. $requestinfo = curl_getinfo($ci);
  977. $http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
  978. if (isset($requestinfo['redirect_url']) && $requestinfo['redirect_url'] && strpos($requestinfo['redirect_url'], 'http://map.baidu.com/mobile/?third_party=uri_api#s') === 0) {
  979. ds_json_encode(10000, '', ['url' => str_replace("http://map.baidu.com/mobile/?third_party=uri_api#s", "https://map.baidu.com/mobile/webapp/search/search/qt", $requestinfo['redirect_url']) . '/vt=map/?third_party=uri_api']);
  980. } else {
  981. ds_json_encode(10001, lang('ds_common_op_fail'));
  982. }
  983. }
  984. }
  985. class sortClass
  986. {
  987. //升序
  988. public static function sortArrayAsc($preData, $sortType = 'store_sort')
  989. {
  990. $sortData = [];
  991. foreach ($preData as $key_i => $value_i) {
  992. $price_i = isset($value_i[$sortType]) ? $value_i[$sortType] : 0;
  993. $min_key = '';
  994. $sort_total = count($sortData);
  995. foreach ($sortData as $key_j => $value_j) {
  996. $value_j[$sortType] = isset($value_j[$sortType]) ? $value_j[$sortType] : 0;
  997. if ($price_i < $value_j[$sortType]) {
  998. $min_key = $key_j + 1;
  999. break;
  1000. }
  1001. }
  1002. if (empty($min_key)) {
  1003. array_push($sortData, $value_i);
  1004. } else {
  1005. $sortData1 = array_slice($sortData, 0, $min_key - 1);
  1006. array_push($sortData1, $value_i);
  1007. if (($min_key - 1) < $sort_total) {
  1008. $sortData2 = array_slice($sortData, $min_key - 1);
  1009. foreach ($sortData2 as $value) {
  1010. array_push($sortData1, $value);
  1011. }
  1012. }
  1013. $sortData = $sortData1;
  1014. }
  1015. }
  1016. return $sortData;
  1017. }
  1018. //降序
  1019. public static function sortArrayDesc($preData, $sortType = 'store_sort')
  1020. {
  1021. $sortData = [];
  1022. foreach ($preData as $key_i => $value_i) {
  1023. $price_i = isset($value_i[$sortType]) ? $value_i[$sortType] : 0;
  1024. $min_key = '';
  1025. $sort_total = count($sortData);
  1026. foreach ($sortData as $key_j => $value_j) {
  1027. $value_j[$sortType] = isset($value_j[$sortType]) ? $value_j[$sortType] : 0;
  1028. if ($price_i > $value_j[$sortType]) {
  1029. $min_key = $key_j + 1;
  1030. break;
  1031. }
  1032. }
  1033. if (empty($min_key)) {
  1034. array_push($sortData, $value_i);
  1035. } else {
  1036. $sortData1 = array_slice($sortData, 0, $min_key - 1);
  1037. array_push($sortData1, $value_i);
  1038. if (($min_key - 1) < $sort_total) {
  1039. $sortData2 = array_slice($sortData, $min_key - 1);
  1040. foreach ($sortData2 as $value) {
  1041. array_push($sortData1, $value);
  1042. }
  1043. }
  1044. $sortData = $sortData1;
  1045. }
  1046. }
  1047. return $sortData;
  1048. }
  1049. }