Infosend.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376
  1. <?php
  2. /**
  3. * @copyright Copyright (c) 2017 https://www.sapixx.com All rights reserved.
  4. * @license Licensed (http://www.apache.org/licenses/LICENSE-2.0).
  5. * @author pillar<ltmn@qq.com>
  6. * 小程序公共API服务
  7. */
  8. namespace app\ais\controller\api\v1;
  9. use app\ais\controller\api\Base;
  10. use app\ais\model\AisInfoCate;
  11. use app\ais\model\AisInfo;
  12. use app\ais\model\AisInfoReply;
  13. use app\ais\model\AisInfoFollow;
  14. use app\ais\model\AisConfig;
  15. use app\ais\model\AisInfoMp;
  16. use app\ais\model\MchId;
  17. use app\common\facade\WechatPay;
  18. use app\common\facade\Upload;
  19. use app\common\model\SystemUser;
  20. use app\common\model\SystemMemberSms;
  21. use think\facade\Config;
  22. use filter\Filter;
  23. class Infosend extends Base{
  24. /**
  25. * 初始化当前应用是否登录
  26. * @return void
  27. */
  28. public function initialize() {
  29. parent::initialize();
  30. $this->isUserAuth();
  31. }
  32. /**
  33. * 判断是否注册城市号
  34. */
  35. public function isMp(){
  36. $rel = AisInfoMp::where(['uid' => $this->user->id])->count();
  37. if($rel){
  38. return enjson(200);
  39. }
  40. return enjson(204);
  41. }
  42. /**
  43. * 判断是否注册城市号
  44. */
  45. public function getThemes(){
  46. $rel = AisInfoCate::where(['member_miniapp_id' => $this->member_miniapp_id])->field('id,name')->select();
  47. return enjson(200,$rel);
  48. }
  49. /**
  50. * 读取微信API
  51. * @param integer 读取ID
  52. * @return json
  53. */
  54. public function getTpl(){
  55. $param['id'] = $this->request->param('id/d',0);
  56. $this->apiSign($param);
  57. $rel = AisInfoCate::cateTpl($param['id']);
  58. return enjson(200,'成功',$rel);
  59. }
  60. /**
  61. * 城市号信息
  62. */
  63. public function getMp(){
  64. $param['uid'] = $this->request->param('uid/d',0);
  65. $this->apiSign($param);
  66. $where = [];
  67. $where['uid'] = $param['uid'];
  68. $rel = AisInfoMp::where($where)->find();
  69. if($rel){
  70. if($rel->is_lock){
  71. return enjson(403,'城市号不存在');
  72. }
  73. $rel->views = AisInfo::where(['uid' => $rel->uid])->count();
  74. $rel->like = AisInfoFollow::where(['uid' => $rel->uid])->count();
  75. $rel->is_follow = 0;
  76. $rel->vip_time = empty($rel->vip_time)?'0':date('Y-m-d',$rel->vip_time);
  77. $rel->reg_time = empty($rel->reg_time)?'0':date('Y-m-d',$rel->reg_time);
  78. if($this->user){
  79. $rel->is_follow = AisInfoFollow::where(['uid' => $this->user->id,'like_uid'=>$rel->uid])->count();
  80. }
  81. return enjson(200,'成功',$rel);
  82. }
  83. return enjson(204);
  84. }
  85. /**
  86. * 编辑开通城市号和申请认证城市号
  87. *
  88. * @return void
  89. */
  90. public function editMp(){
  91. $param['logo'] = $this->request->param('logo/s');
  92. $param['skin'] = $this->request->param('skin/s');
  93. $param['title'] = $this->request->param('title/s');
  94. $param['note'] = $this->request->param('note/s');
  95. $param['telphone'] = $this->request->param('telphone/s');
  96. $param['vip_title'] = $this->request->param('vip_title/s','');
  97. $param['vip_about'] = $this->request->param('vip_about/s','');
  98. $param['checked'] = $this->request->param('checked/d',0);
  99. $this->apiSign($param);
  100. $data['title'] = $param['title'];
  101. $data['note'] = $param['note'];
  102. $rel = AisInfoMp::where(['uid' => $this->user->id])->find();
  103. if($rel){
  104. if($rel->is_lock){
  105. return enjson(403,'城市号已被锁定');
  106. }
  107. //判断是否修改skin
  108. if(!empty($param['skin'])){
  109. $rel->skin = $param['skin'];
  110. }
  111. //判断是否修改logo
  112. if(!empty($param['logo'])){
  113. $rel->logo = $param['logo'];
  114. }
  115. if(!$rel->is_apply && !$rel->is_vip){
  116. $rel->is_apply = $param['checked'] ? 1 : 0;
  117. $rel->vip_title = $param['vip_title'];
  118. $rel->vip_about = $param['vip_about'];
  119. }
  120. $result = $rel->save();
  121. }else{
  122. $data['member_miniapp_id'] = $this->miniapp_id;
  123. $data['uid'] = $this->user->id;
  124. $data['is_apply'] = $param['checked'] ? 1 : 0;
  125. $data['is_vip'] = 0;
  126. $data['vip_title'] = $param['vip_title'];
  127. $data['vip_about'] = $param['vip_about'];
  128. $data['reg_time'] = time();
  129. $data['vip_time'] = time();
  130. $data['fans'] = AisInfoFollow::where(['uid' => $this->user->id])->count();
  131. $data['logo'] = empty($param['logo']) ? $this->user->face: $param['logo'];
  132. $data['skin'] = empty($param['skin']) ? Config::get('upload.upload_relative').'static/ais/skin/2.jpg':$param['skin'];
  133. $result = AisInfoMp::create($data);
  134. }
  135. if($result){
  136. return enjson(200,'城市号设置成功');
  137. }
  138. return enjson(403,'设置失败');
  139. }
  140. /**
  141. * VIP认证
  142. */
  143. public function vipAuth(){
  144. if(request()->isPost()){
  145. $rel = AisInfoMp::where(['uid' => $this->user->id,'is_lock' => 0,'is_vip' => 1])->count();
  146. if($rel){
  147. return enjson(200,'认证用户',['vip'=>1]);
  148. }
  149. }
  150. return enjson(200,'非认证用户',['vip'=>0]);
  151. }
  152. /**
  153. * 商城图片
  154. */
  155. public function upImg(){
  156. if(request()->isPost()){
  157. $rel = Upload::index();
  158. if($rel['error'] == 0){
  159. return enjson(200,'success',$rel['url']);
  160. }else{
  161. return enjson(204);
  162. }
  163. }
  164. }
  165. /**
  166. * 发表信息
  167. */
  168. public function send(){
  169. if(request()->isPost()){
  170. $param = [
  171. 'content' => $this->request->param('content/s'),
  172. 'telphone' => $this->request->param('telphone/s',''),
  173. 'topday' => $this->request->param('topday/d',0),
  174. 'cate_id' => $this->request->param('cate_id/d',0),
  175. 'store_id' => $this->request->param('store_id/d',0),
  176. 'imgs' => $this->request->param('imgs/s','[]','htmlspecialchars_decode'),
  177. 'fields' => $this->request->param('fields/s','[]','htmlspecialchars_decode'),
  178. 'is_get' => $this->request->param('is_get/d',0),
  179. 'price' => $this->request->param('price/d'),
  180. ];
  181. $this->apiSign($param);
  182. $param['member_miniapp_id'] = $this->miniapp_id;
  183. $param['uid'] = $this->user->id;
  184. $validate = $this->validate($param,'Info.sendInfo');
  185. if(true !== $validate){
  186. return json(['code'=>403,'msg'=>$validate]);
  187. }
  188. $param['images'] = json_encode(Filter::filter_escape(json_decode($param['imgs'],true)));
  189. $param['fields'] = json_encode(Filter::filter_escape(json_decode($param['fields'],true)));
  190. //置顶
  191. $amount = 0;
  192. $config = AisConfig::getConfig($this->miniapp_id);
  193. if($param['topday'] && !empty($config)){
  194. $topday = json_decode($config->info,true);
  195. foreach ($topday as $value) {
  196. if($value['day'] == $param['topday']){
  197. $amount = $value['money'];
  198. $param['topday'] = $value['day'];
  199. }
  200. }
  201. }
  202. $param['top_money'] = $amount; //置顶金额
  203. $param['order_no'] = order_no($this->user->invite_code);
  204. $result = AisInfo::postThemes($param);
  205. if($result){
  206. if($amount > 0){
  207. $order = [
  208. 'openid' => $this->user['miniapp_uid'],
  209. 'miniapp_id' => $this->miniapp_id,
  210. 'name' => '信息置顶',
  211. 'order_no' => $param['order_no'],
  212. 'total_fee' => $amount,
  213. 'notify_url' => api(1,'ais/notify/infoSend',$this->miniapp_id)
  214. ];
  215. if($this->member_miniapp->is_psp){
  216. $setting = AisConfig::getConfig($this->miniapp_id);
  217. if (empty($setting->mchid)) {
  218. return enjson(403,'服务商模式下,必须配置默认商户号');
  219. }
  220. $order['mchid'] = $setting->mchid;
  221. }
  222. $ispay = WechatPay::orderPay($order);;
  223. if($ispay['code'] == 0){
  224. return enjson(403,$ispay['msg']);
  225. }
  226. return enjson(200,'发布成功',$ispay['data']);
  227. }
  228. return enjson(204,'发布成功');
  229. }else{
  230. return enjson(403,'发布失败');
  231. }
  232. }
  233. }
  234. /**
  235. * 发布评论
  236. */
  237. public function postReply(){
  238. if(request()->isPost()){
  239. $param = [
  240. 'content' => $this->request->param('content/s'),
  241. 'info_id' => $this->request->param('info_id/d'),
  242. 'sign' => $this->request->param('sign/s',0),
  243. ];
  244. $this->apiSign($param);
  245. $data = [
  246. 'content' => $param['content'],
  247. 'info_id' => $param['info_id'],
  248. 'uid' => $this->user->id,
  249. 'member_miniapp_id' => $this->miniapp_id,
  250. ];
  251. $validate = $this->validate($data,'Info.sendReply');
  252. if(true !== $validate){
  253. return enjson(403,$validate);
  254. }
  255. $result = AisInfoReply::postReply($data);
  256. if($result){
  257. AisInfo::where(['id' => $param['info_id']])->setInc('reply_num',1);
  258. return enjson(200,'评论成功');
  259. }else{
  260. return enjson(403,'评论失败');
  261. }
  262. }
  263. }
  264. /**
  265. * 点赞
  266. **/
  267. public function like(){
  268. $param['id'] = $this->request->param('id/d',0);
  269. $param['sign'] = $this->request->param('sign');
  270. $this->apiSign($param);
  271. $condition['member_miniapp_id'] = $this->miniapp_id;
  272. $condition['id'] = $param['id'];
  273. $rel = AisInfo::where($condition)->find();
  274. $like_face = json_decode(empty($rel->like_face) ? '[]':$rel->like_face,true);
  275. if(count($like_face) < 10){
  276. if(!in_array($this->user->face,$like_face)){
  277. array_push($like_face,$this->user->face);
  278. $rel->like_face = json_encode($like_face);
  279. }
  280. }
  281. $rel->like = ['inc',1];
  282. $rel->save();
  283. if(empty($rel)){
  284. return enjson(403,'不用重复点赞');
  285. }else{
  286. return enjson(200);
  287. }
  288. }
  289. /**
  290. * 评论点赞
  291. * @return void
  292. */
  293. public function replylike(){
  294. $param['id'] = $this->request->param('id/d',0);
  295. $param['sign'] = $this->request->param('sign');
  296. $this->apiSign($param);
  297. $condition['member_miniapp_id'] = $this->miniapp_id;
  298. $condition['id'] = $param['id'];
  299. $rel = AisInfoReply::where($condition)->setInc('like',1);
  300. if(empty($rel)){
  301. return enjson(403,'不用重复点赞');
  302. }else{
  303. return enjson(200);
  304. }
  305. }
  306. /**
  307. * 关注或取消
  308. */
  309. public function follow(){
  310. $param['uid'] = $this->request->param('uid/d');
  311. $param['state'] = $this->request->param('state/d',0);
  312. $param['sign'] = $this->request->param('sign');
  313. $this->apiSign($param);
  314. if($param['uid'] == $this->user->id){
  315. return enjson(403,'不用关注自己');
  316. }
  317. //判断关注用户是否存在
  318. $is_user = SystemUser::where(['id' => $param['uid'],'is_lock' => 0,'is_delete' => 0])->find();
  319. if(empty($is_user)){
  320. return enjson(403,'当前用户已被封号');
  321. }
  322. //关注
  323. $condition['like_uid'] = $param['uid'];
  324. $condition['uid'] = $this->user->id;
  325. $info = AisInfoFollow::where($condition)->find();
  326. if(empty($info)){
  327. $follow = AisInfoFollow::where(['uid' => $this->user->id,'like_uid' => 0])->find();
  328. if($param['state'] == 1){
  329. if(empty($follow)){
  330. $rel = AisInfoFollow::create(['uid' => $this->user->id,'like_uid' => $param['uid']]);
  331. }else{
  332. $follow->like_uid = $param['uid'];
  333. $rel = $follow->save();
  334. }
  335. }else{
  336. return enjson(403,'关注失败');
  337. }
  338. }else{
  339. if($param['state'] == 0){
  340. $info->like_uid = 0;
  341. $rel = $info->save();
  342. }
  343. }
  344. if(empty($rel)){
  345. return enjson(403,'关注失败');
  346. }else{
  347. //增加粉丝
  348. $infomp = AisInfoMp::where(['uid' => $param['uid']])->find();
  349. if($infomp){
  350. if($param['state']){
  351. $infomp->fans = ['inc',1];
  352. }else{
  353. $infomp->fans = ['dec',1];
  354. }
  355. $infomp->save();
  356. }
  357. return enjson(200,$param['state']?'已关注':'取消关注');
  358. }
  359. }
  360. }