dyjh 6 年之前
父节点
当前提交
a7f4298bcb

+ 3 - 1
app/Helper/AttachmentHelper.php

xqd
@@ -75,7 +75,9 @@ trait AttachmentHelper
                     $attachment->size = $fileSize;
                     $attachment->file_type = $fileMimeType;
                     if ($attachment->save()) {
-                        $result[$idx] = $md5;
+                        //$result[$idx]['real'] = env('APP_URL').'/'.$real_path;
+                        $result[$idx] = env('APP_URL').'/'.$real_path;
+                        //$result[$idx] = $md5;
                     } else {
                         @unlink($real_path);
                         $result[$idx] = ErrorCode::ATTACHMENT_SAVE_FAILED;

+ 2 - 0
app/Http/Controllers/Api/V1/AttachmentController.php

xqd xqd
@@ -58,6 +58,7 @@ class AttachmentController extends Controller
      *     "message": "",
      *     "data": [
      *         "file": "f72e7dad80f597ed6621a009e82243ad",
+     *         "real": "真实路径"
      *          //文件访问url http://localhost/attachment/f72e7dad80f597ed6621a009e82243ad
      *     ]
      * }
@@ -107,6 +108,7 @@ class AttachmentController extends Controller
             'image/gif',
             'video/mp4',
         ]);
+        //dd($result);
         if (is_array($result)) {
             return $this->api($result);
         } elseif (is_string($result)) {

+ 2 - 2
app/Http/Controllers/Api/V1/Controller.php

xqd xqd
@@ -21,8 +21,7 @@ class Controller extends BaseController
         $this->middleware('auth:api', [
             'except' => [
                 'upload', 'getCode', 'reset', 'login', 'get', 'register', 'alipayNotify', 'wechatpayNotify',
-                'get', 'area', 'get_province', 'get_city', 'get_county', 'test', 'indexMenu'
-
+                'get', 'area', 'get_province', 'get_city', 'get_county', 'test', 'indexMenu', 'userRelease', 'indexTag', 'indexMessage', 'indexGetMessage', 'userEditFavorite', 'userFavorite', 'userMyMessage', 'userMessageDetail', 'userGetMessages'
             ]
         ]);
 
@@ -51,6 +50,7 @@ class Controller extends BaseController
 
     public function getUserId()
     {
+        return 1;
         return session('user_id');
     }
 

+ 278 - 55
app/Http/Controllers/Api/V1/IndexController.php

xqd xqd
@@ -13,50 +13,200 @@ use App\Models\MessagesFollowerModel;
 use App\Models\MessagesInfoModel;
 use App\Models\MessagesTagModel;
 use App\Models\PaymentInfoModel;
+use App\Models\SeenModel;
 use App\Models\UserInfoModel;
-use App\Models\WechatAppModel;
-use EasyWeChat\Factory;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
+use Validator;
+use App\Services\Base\ErrorCode;
 
 class IndexController extends Controller
 {
-    private $pay_config;
 
-    public function __construct()
+    /**
+     * @api {get} /api/index/tag 筛选标签(indexTag)
+     * @apiDescription 筛选标签(indexTag)indexTag
+     * @apiGroup Index
+     * @apiPermission none
+     * @apiVersion 0.1.0
+     * @apiParam {string}  keywords   关键词
+     * @apiSuccessExample {json} Success-Response:
+     * HTTP/1.1 200 OK
+     * {
+     *     "status": true,
+     *     "status_code": 0,
+     *     "message": "",
+     *     "data": [
+     *        {
+     *            "id": 1,
+     *            "name": "标签1",
+     *            "sort": 1,
+     *            "deleted_at": null,
+     *            "created_at": "2018-07-12 17:03:07",
+     *            "updated_at": "2018-07-12 17:03:11"
+     *         }
+     *     ]
+     * }
+     * @apiErrorExample {json} Error-Response:
+     * HTTP/1.1 400 Bad Request
+     * {
+     *     "state": false,
+     *     "code": 1000,
+     *     "message": "传入参数不正确",
+     *     "data": null or []
+     * }
+     */
+
+    public function indexTag(Request $request)
     {
-        $wechat_app = WechatAppModel::find(1);
-        $this->pay_config = [
-            'app_id' => $wechat_app->appId,
-            'mch_id' => $wechat_app->mchId,
-            'key'    => $wechat_app->key,
-
-            'cert_path'  => public_path().'/pem/cert.pem',
-            'key_path'   => public_path().'/pen/key.pem',
-            'notify_url' => '/api/index/notify',
-        ];
+        $keywords = $request->input('keywords');
+        $keywords = '%'.$keywords.'%';
+        $data = MessagesTagModel::where([['name','like',$keywords]])->get();
+        return $this->api($data);
     }
 
+
+    /**
+     * @api {get} /api/index/menu 知识列表(indexMenu)
+     * @apiDescription 知识列表(indexMenu)indexMenu
+     * @apiGroup Index
+     * @apiPermission none
+     * @apiVersion 0.1.0
+     * @apiParam {string}  tag_id   标签ID
+     * @apiSuccessExample {json} Success-Response:
+     * HTTP/1.1 200 OK
+     * {
+     * "status": true,
+     * "status_code": 0,
+     * "message": "",
+     * "data": {
+     *       "menu": [
+     *           {
+     *               "id": 4,
+     *               "name": "标签4",
+     *               "sort": 4,
+     *               "deleted_at": null,
+     *               "created_at": "2018-07-12 17:04:31",
+     *               "updated_at": "2018-07-12 17:04:34"
+     *           }
+     *       ],
+     *       "message": {
+     *       "current_page": 1,
+     *       "data": [
+     *           {
+     *               "id": 1,
+     *               "title": "爱我的",
+     *               "type": 0,
+     *               "owner": "Richod"
+     *           }
+     *       ],
+     *       "first_page_url": "http://zsff.xcx.com/api/index/menu?page=1",
+     *       "from": 1,
+     *       "last_page": 1,
+     *       "last_page_url": "http://zsff.xcx.com/api/index/menu?page=1",
+     *       "next_page_url": null,
+     *       "path": "http://zsff.xcx.com/api/index/menu",
+     *       "per_page": 1,
+     *       "prev_page_url": null,
+     *       "to": 1,
+     *       "total": 1
+     *       }
+     *   }
+     *}
+     * @apiErrorExample {json} Error-Response:
+     * HTTP/1.1 400 Bad Request
+     * {
+     *     "state": false,
+     *     "code": 1000,
+     *     "message": "传入参数不正确",
+     *     "data": null or []
+     * }
+     */
     public function indexMenu(Request $request)
     {
+        $validator = Validator::make($request->all(),
+            [
+                'tag_id' => 'integer'
+            ],
+            [
+                'tag_id.integer' => '标签参数格式不对!'
+            ]
+        );
+        if ($validator->fails()) {
+            return $this->error(ErrorCode::CLIENT_WRONG_PARAMS, '传入参数不正确!', $validator->messages());
+        }
         $data = $request->input();
         $menu = MessagesTagModel::orderBy('sort','Desc')->take(3)->get();
-        if($data['tag_id'] == 0){
-            $message = MessagesInfoModel::where('state',0)->orderBy('id','Desc')->paginate(1);
+        if(!isset($data['tag_id']) || $data['tag_id'] == 0){
+            $message = MessagesInfoModel::where('state',0)->select('id','title','type')->orderBy('id','Desc')->paginate(1);
         } else {;
-            $message = MessagesTagModel::find($data['tag_id'])->messgaes()->where('state',0)->orderBy('id','Desc')->paginate(1);
+            $message = MessagesTagModel::find($data['tag_id'])->messgaes()->where('state',0)->select('id','title','type')->orderBy('id','Desc')->paginate(1);
             //dd($message);
         }
         foreach ($message as $item){
             $user = UserInfoModel::find($item->user_id);
-            $message->owner = $user->nickname;
+            if($user){
+                $item->owner = $user->nickname;
+            }
         }
         return $this->api(compact('menu','message'));
     }
 
 
-
+    /**
+     * @api {get} /api/index/message 知识详情(indexMessage)
+     * @apiDescription 知识详情(indexMenu)indexMessage
+     * @apiGroup Index
+     * @apiPermission none
+     * @apiVersion 0.1.0
+     * @apiParam {int}  id   知识ID
+     * @apiSuccessExample {json} Success-Response:
+     * HTTP/1.1 200 OK
+     * {
+     * "status": true,
+     * "status_code": 0,
+     * "message": "",
+     * "data": {
+     *       "message": {
+     *              "id": 1,
+     *              "title": "爱我的",
+     *              "content": "爱我的",
+     *              "user_id": 1,
+     *              "price": 0,
+     *              "phone": "18228068397",
+     *              "comment": "瓦坎达入口",
+     *              "type": 0,
+     *              "sort": 1,
+     *              "deleted_at": null,
+     *              "created_at": "2018-07-12 17:06:23",
+     *              "updated_at": "2018-07-12 17:06:26",
+     *              "state": 0,
+     *              "is_pay": "是否需要付费 0 需要付费 1 不需要"
+     *          }
+     *      }
+     *}
+     * @apiErrorExample {json} Error-Response:
+     * HTTP/1.1 400 Bad Request
+     * {
+     *     "state": false,
+     *     "code": 1000,
+     *     "message": "传入参数不正确",
+     *     "data": null or []
+     * }
+     */
     public function indexMessage(Request $request)
     {
+        $validator = Validator::make($request->all(),
+            [
+                'id' => 'required'
+            ],
+            [
+                'id.required' => 'id不能为空!'
+            ]
+        );
+        if ($validator->fails()) {
+            return $this->error(ErrorCode::CLIENT_WRONG_PARAMS, '传入参数不正确!', $validator->messages());
+        }
         $id = $request->input('id');
 
         $message = MessagesInfoModel::where([['state',0],['id',$id]])->first();
@@ -67,59 +217,132 @@ class IndexController extends Controller
             return $this->api($data);
         }
 
-        if($message->type == 1){
-            $check_message = MessagesFollowerModel::where([['message_id',$message->id],['user_id',$this->getUserId()]])->first();
-            if(!$check_message){
-                $message->is_pay = 0;
+        if($message->type ==0) {
+            $user = UserInfoModel::find($this->getUserId());
+            $followers['messages_id'] = $message->id;
+            $followers['user_id'] = $user->id;
+            $followers['username'] = $user->nickname;
+            $followers['mobile'] = $user->mobile;
+            $followers['state'] = 2;
+            MessagesFollowerModel::create($followers);
+        }
+
+        if($message->type == 2){
+            if($message->user_id != $this->getUserId()) {
+                $check_message = MessagesFollowerModel::where([['message_id',$message->id],['user_id',$this->getUserId()],['type',1]])->first();
+                if(!$check_message){
+                    $message->is_pay = 0;
+                } else {
+                    $message->is_pay = 1;
+                }
             } else {
                 $message->is_pay = 1;
             }
+
         } else {
             $message->is_pay = '';
         }
         return $this->api(compact('message'));
     }
 
+
+
+    /**
+     * @api {get} /api/index/get_message 获取知识(indexGetMessage)
+     * @apiDescription 获取知识(indexMenu)indexGetMessage
+     * @apiGroup Index
+     * @apiPermission none
+     * @apiVersion 0.1.0
+     * @apiParam {int}  id    知识ID
+     * @apiParam {int}  type  知识类型 1 悬赏 2 付费
+     * @apiSuccessExample {json} Success-Response:
+     * HTTP/1.1 200 OK
+     * {
+     * "status": true,
+     * "status_code": 0,
+     * "message": "",
+     * "data": {
+     *      "msg": "获取成功"
+     *    }
+     *}
+     * @apiErrorExample {json} Error-Response:
+     * HTTP/1.1 400 Bad Request
+     * {
+     *     "state": false,
+     *     "code": 1000,
+     *     "message": "传入参数不正确",
+     *     "data": null or []
+     * }
+     */
     public function indexGetMessage(Request $request)
     {
+        $validator = Validator::make($request->all(),
+            [
+                'id' => 'required',
+                'type' => 'required',
+            ],
+            [
+                'id.required' => 'id不能为空!',
+                'type.required' => 'type不能为空!'
+            ]
+        );
+        if ($validator->fails()) {
+            return $this->error(ErrorCode::CLIENT_WRONG_PARAMS, '传入参数不正确!', $validator->messages());
+        }
         $id = $request->input('id');
-        $message = MessagesInfoModel::where([['id',$id],['type',1]])->first();
+        $type = $request->input('type');
+        $message = MessagesInfoModel::where([['id',$id],['type',$type],['state',0]])->first();
         if(!$message){
-            $data = [
-                'msg' => '该信息不存在或者已完成'
-            ];
-            return $this->api($data);
+            $msg = '该信息不存在或者已完成';
+            return $this->api(compact('msg'));
         }
-        $out_trade_no = 'We'.date('YmdHis').rand(1000,9999);
-        $user = UserInfoModel::find($this->getUserId());
-        $user->money -= $message->price;
-        if($user->money<0){
-            $data = [
-                'msg' => '您的余额已不足,请先充值'
-            ];
-            return $this->api($data);
+
+        $check_is_buy = MessagesFollowerModel::where([['user_id',$this->getUserId()],['messages_id',$message->id]])->first();
+        if($check_is_buy){
+            $msg = '您已获取该知识,请勿重复操作';
+            return $this->api(compact('msg'));
         }
-        $user->save();
-        $save['openid'] = $user->openid;
-        $save['out_trade_no'] = $out_trade_no;
-        $save['user_id'] = $this->getUserId();
-        $save['price'] = $message->price;
-        $save['type'] = 2;
-        $res = PaymentInfoModel::create($save);
-        if($res){
+        $user = UserInfoModel::find($this->getUserId());
+        if($type == 2) {
+            DB::beginTransaction();
+            $out_trade_no = 'We'.date('YmdHis').rand(1000,9999);
+            $user->money -= $message->price;
+            if($user->money<0){
+                $msg = '您的余额已不足,请先充值';
+                return $this->api(compact('msg'));
+            }
+            if(!$user->save()){
+                $msg = '购买失败';
+                DB::rollback();
+                return $this->api(compact('msg'));
+            }
+            //dd(111);
+            $save['openid'] = $user->openid;
+            $save['out_trade_no'] = $out_trade_no;
+            $save['user_id'] = $this->getUserId();
+            $save['to_user'] = $message->user_id;
+            $save['price'] = $message->price;
+            $save['type'] = 2;
+            $res = PaymentInfoModel::create($save);
+            if(!$res) {
+                $msg = '购买失败';
+                DB::rollback();
+                return $this->api(compact('msg'));
+            }
 
-            $data = [
-                'msg' => '购买成功',
-            ];
-            return $this->api($data);
+        }
+        $followers['messages_id'] = $message->id;
+        $followers['user_id'] = $user->id;
+        $followers['username'] = $user->nickname;
+        $followers['mobile'] = $user->mobile;
+        $followers['state'] = $type == 1?0:1;
+        if(MessagesFollowerModel::create($followers)){
+            $msg = '获取成功';
+            DB::commit();
         } else {
-            $data = [
-                'msg' => '购买失败',
-            ];
-            return $this->api($data);
+            $msg = '购买失败';
+            DB::rollback();
         }
+        return $this->api(compact('msg'));
     }
-
-
-
 }

+ 116 - 0
app/Http/Controllers/Api/V1/PayController.php

xqd
@@ -0,0 +1,116 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: 思维定制
+ * Date: 2018/7/16
+ * Time: 18:09
+ */
+
+namespace App\Http\Controllers\Api\V1;
+
+
+use App\Models\UserInfoModel;
+use App\Models\WechatAppModel;
+use EasyWeChat\Factory;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Log;
+
+class PayController extends Controller
+{
+    private $config;
+    public function __construct()
+    {
+        $wechat = WechatAppModel::find(1);
+        $this->config = [
+            // 必要配置
+            'app_id'             => $wechat->appId,
+            'mch_id'             => $wechat->mchId,
+            'key'                => $wechat->key,   // API 密钥
+
+            // 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书)
+            //'cert_path'          => public_path().'/pem/', // XXX: 绝对路径!!!!
+            //'key_path'           => public_path().'/pem/',      // XXX: 绝对路径!!!!
+
+            'notify_url'         => '/pay/notify',     // 你也可以在下单时单独设置来想覆盖它
+        ];
+    }
+
+    public function recharge(Request $request)
+    {
+        $validator = Validator::make($request->all(),
+            [
+                'userid' => 'required',
+                'price' => 'required',
+            ],
+            [
+                'userid.required' => 'userid不能为空!',
+                'price.required' => 'price不能为空!',
+
+            ]
+        );
+
+
+        if ($validator->fails()) {
+            return $this->error(ErrorCode::CLIENT_WRONG_PARAMS, '传入参数不正确!', $validator->messages());
+        }
+        $money = $request->input('price');
+        $user = UserInfoModel::find($this->getUserId());
+
+        $trade_no = 'Pay'.date('YmdHis').rand(1000,9999);
+
+        $app = Factory::payment($this->config);
+
+        $result = $app->order->unify([
+            'body' => '知识付费充值余额',
+            'out_trade_no' => $trade_no,
+            'total_fee' => $money * 100,
+            'trade_type' => 'JSAPI',
+            'notify_url' => url('/api/home/notify'),
+            'openid' => $user->openid
+        ]);
+
+
+
+        if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') {
+            $payment = Factory::payment($this->options());
+            $jssdk = $payment->jssdk;
+
+            $json = $jssdk->bridgeConfig($result['prepay_id']);
+
+            return $this->api(compact('json'));
+        }else{
+            $msg = "签名失败,请稍后再试!";
+
+            return $this->api(compact('msg'));
+        }
+    }
+
+
+//下面是回调函数
+    public function notify()
+    {
+        $app = Factory::payment($this->options());
+        \Log::info("wechat notify start!");
+        return $app->handlePaidNotify(function ($notify, $successful) {
+            \Log::info($notify);
+            if ($notify['result_code'] == 'SUCCESS') {
+                $user = UserInfoModel::where('openid',$notify['openid'])->first();
+                $data['order_no'] = $notify['out_trade_no'];
+                $data['price'] = $notify['total_fee'] / 100;
+                $data['user_id'] = $user->id;
+                $data['code'] = $user->code;
+                \Log::info($data);
+                $user->paid_end_time = Carbon::parse("+1 year")->toDateTimeString();
+                $this->createQueryInfo($user,1);
+
+                OrderInfoModel::create($data);
+                $user->save();
+            } else {
+                return $successful('通信失败,请稍后再通知我');
+            }
+            return true;
+        });
+
+    }
+
+}

+ 524 - 0
app/Http/Controllers/Api/V1/UserController.php

xqd
@@ -0,0 +1,524 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: 思维定制
+ * Date: 2018/7/13
+ * Time: 15:08
+ */
+
+namespace App\Http\Controllers\Api\V1;
+
+
+use App\Models\FavoriteModel;
+use App\Models\MessagesFollowerModel;
+use App\Models\MessagesInfoModel;
+use App\Models\MessagesTagModel;
+use App\Models\PaymentInfoModel;
+use App\Models\SeenModel;
+use App\Models\UserInfoModel;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
+use Validator;
+use App\Services\Base\ErrorCode;
+
+class UserController extends Controller
+{
+
+    /**
+     * @api {post} /api/user/release 发布知识(userRelease)
+     * @apiDescription 发布知识(userRelease)userRelease
+     * @apiGroup User
+     * @apiPermission none
+     * @apiVersion 0.1.0
+     * @apiParam {text}  content    内容
+     * @apiParam {string}  title    标题
+     * @apiParam {number}  price  价格
+     * @apiParam {int}  type  知识类型 1 悬赏 2 付费 0免费
+     * @apiParam {text}  pic_url   图片
+     * @apiParam {array}  tag['id']   标签ID  tag['name']  标签内容
+     * @apiSuccessExample {json} Success-Response:
+     * HTTP/1.1 200 OK
+     * {
+     * "status": true,
+     * "status_code": 0,
+     * "message": "",
+     * "data": {
+     *      "msg": "添加成功"
+     *    }
+     *}
+     * @apiErrorExample {json} Error-Response:
+     * HTTP/1.1 400 Bad Request
+     * {
+     *     "state": false,
+     *     "code": 1000,
+     *     "message": "传入参数不正确",
+     *     "data": null or []
+     * }
+     */
+    public function userRelease(Request $request)
+    {
+        $validator = Validator::make($request->all(),
+            [
+                'content' => 'required',
+                'type' => 'required',
+                'title' => 'required',
+            ],
+            [
+                'content.required' => '内容不能为空!',
+                'type.required' => 'type不能为空!',
+                'title.required' => '标题不能为空!'
+            ]
+        );
+        if ($validator->fails()) {
+            return $this->error(ErrorCode::CLIENT_WRONG_PARAMS, '传入参数不正确!', $validator->messages());
+        }
+        DB::beginTransaction();
+        $data = $request->input();
+        $tag = $data['tag'];
+        /*$tag[0]['name'] = 'asd';
+        $tag[0]['id'] = 0;
+        $tag[1]['id'] = 0;
+        $tag[1]['name'] = 'dfse';*/
+        $content['content'] = $data['content'];
+        $content['title'] = $data['title'];
+        $content['price'] = $data['price'];
+        $content['type']  = $data['type'];
+        $content['pic_url']  = $data['pic_url'];
+        $content['sort'] = 1;
+        $content['state'] = 0;
+        $user = UserInfoModel::find($this->getUserId());
+        $content['phone'] = $user->mobile;
+        $content['user_id'] = $user->id;
+        $create_res = MessagesInfoModel::create($content);
+        if($data['type'] == 1){
+            $out_trade_no = 'We'.date('YmdHis').rand(1000,9999);
+            $user->money -= $data['price'];
+            if($user->money<0){
+                $msg = '您的余额已不足,请先充值';
+                DB::rollback();
+                return $this->api(compact('msg'));
+            }
+            if(!$user->save()){
+                $msg = '购买失败';
+                DB::rollback();
+                return $this->api(compact('msg'));
+            }
+            $save['openid'] = $user->openid;
+            $save['out_trade_no'] = $out_trade_no;
+            $save['to_user'] = 0;
+            $save['msg_id'] = $create_res->id;
+            $save['user_id'] = $this->getUserId();
+            $save['price'] = $data['price'];
+            $save['type'] = 3;
+            $res = PaymentInfoModel::create($save);
+            if(!$res) {
+                $msg = '购买失败';
+                DB::rollback();
+                return $this->api(compact('msg'));
+            }
+        }
+        foreach($tag as $key=>$val) {
+            if($val['id'] == 0){
+                $save['name'] = $val['name'];
+                $save['sort'] = 0;
+                $res = MessagesTagModel::create($save);
+                $id = $res->id;
+            } else {
+                $id = $val['id'];
+            }
+            $relation['messages_id'] = $create_res->id;
+            $relation['tag_id'] = $id;
+            DB::table('messages_tag_relation')->insert($relation);
+        }
+        $msg = '添加成功';
+        DB::commit();
+        return $this->api(compact('msg'));
+    }
+
+
+    /**
+     * @api {get} /api/user/edit_favorite 添加/删除收藏(userEditFavorite)
+     * @apiDescription 添加/删除收藏(userEditFavorite)userEditFavorite
+     * @apiGroup User
+     * @apiPermission none
+     * @apiVersion 0.1.0
+     * @apiParam {int}  message_id  知识id
+     * @apiParam {int}  type  操作类型 1 添加 0 删除
+     * @apiSuccessExample {json} Success-Response:
+     * HTTP/1.1 200 OK
+     * {
+     * "status": true,
+     * "status_code": 0,
+     * "message": "",
+     * "data": {
+     *      "msg": "添加成功"
+     *    }
+     *}
+     * @apiErrorExample {json} Error-Response:
+     * HTTP/1.1 400 Bad Request
+     * {
+     *     "state": false,
+     *     "code": 1000,
+     *     "message": "传入参数不正确",
+     *     "data": null or []
+     * }
+     */
+    public function userEditFavorite(Request $request)
+    {
+        $validator = Validator::make($request->all(),
+            [
+                'messages_id' => 'required',
+                'type' => 'required',
+            ],
+            [
+                'messages_id.required' => '信息id不能为空!',
+                'type.required' => 'type不能为空!',
+            ]
+        );
+        if ($validator->fails()) {
+            return $this->error(ErrorCode::CLIENT_WRONG_PARAMS, '传入参数不正确!', $validator->messages());
+        }
+        $data = $request->input();
+        //dd($data);
+        $check = FavoriteModel::where([['user_id',$this->getUserId()],['messages_id',$data['messages_id']]])->first();
+        if($data['type'] == 1) {
+            if($check){
+                $msg = '已添加收藏,请勿重复操作';
+                return $this->api(compact('msg'));
+            }
+            $save['user_id'] = $this->getUserId();
+            $save['messages_id'] = $data['messages_id'];
+            $res = FavoriteModel::create($save);
+            if($res){
+                $msg = '添加成功';
+            } else {
+                $msg = '添加失败';
+            }
+            return $this->api(compact('msg'));
+        } else {
+            if(!$check){
+                $msg = '已移除收藏,请勿重复操作';
+                return $this->api(compact('msg'));
+            }
+            $favorite = FavoriteModel::find($check->id);
+            $res = $favorite->delete();
+            if($res){
+                $msg = '删除成功';
+            } else {
+                $msg = '删除失败';
+            }
+            return $this->api(compact('msg'));
+        }
+
+    }
+
+
+    /**
+     * @api {get} /api/user/favorite 添加/删除收藏(userFavorite)
+     * @apiDescription 添加/删除收藏(userFavorite)userFavorite
+     * @apiGroup User
+     * @apiPermission none
+     * @apiVersion 0.1.0
+     * @apiSuccessExample {json} Success-Response:
+     * HTTP/1.1 200 OK
+     * {
+     * "status": true,
+     * "status_code": 0,
+     * "message": "",
+     * "data": {
+     *       "messages": {
+     *              "id": 1,
+     *              "title": "爱我的",
+     *              "type": 0,
+     *          }
+     *    }
+     *}
+     * @apiErrorExample {json} Error-Response:
+     * HTTP/1.1 400 Bad Request
+     * {
+     *     "state": false,
+     *     "code": 1000,
+     *     "message": "传入参数不正确",
+     *     "data": null or []
+     * }
+     */
+
+    public function userFavorite(Request $request)
+    {
+        $data = FavoriteModel::where('user_id',$this->getUserId())->paginate(5);
+        $messages = array();
+        foreach ($data as $key=>$val){
+            $messages[] = MessagesInfoModel::where('id',$val['messages_id'])->select('id','title','type')->first();
+        }
+        return $this->api(compact('messages'));
+    }
+
+    /**
+     * @api {get} /api/user/my_message 我的发布(userMyMessage)
+     * @apiDescription 我的发布(userMyMessage)userMyMessage
+     * @apiGroup User
+     * @apiPermission none
+     * @apiVersion 0.1.0
+     * @apiParam {int}  state  类型 -1 全部 0 免费 1 悬赏 2 付费
+     * @apiSuccessExample {json} Success-Response:
+     * HTTP/1.1 200 OK
+     * {
+     * "status": true,
+     * "status_code": 0,
+     * "message": "",
+     * "data": {
+     *       "messages": {
+     *              "id": 1,
+     *              "title": "爱我的",
+     *              "type": 0,
+     *          }
+     *    }
+     *}
+     * @apiErrorExample {json} Error-Response:
+     * HTTP/1.1 400 Bad Request
+     * {
+     *     "state": false,
+     *     "code": 1000,
+     *     "message": "传入参数不正确",
+     *     "data": null or []
+     * }
+     */
+
+    public function userMyMessage(Request $request)
+    {
+        $validator = Validator::make($request->all(),
+            [
+                'state' => 'integer',
+            ],
+            [
+                'state.integer' => 'state参数错误!',
+            ]
+        );
+        if ($validator->fails()) {
+            return $this->error(ErrorCode::CLIENT_WRONG_PARAMS, '传入参数不正确!', $validator->messages());
+        }
+        $state = $request->input('state');
+        if(!empty($state)){
+            $messages = MessagesInfoModel::where([['user_id',$this->getUserId()],['type',$state]])->select('id','title','type')->paginate(5);
+        } else {
+            $messages = MessagesInfoModel::where([['user_id',$this->getUserId()]])->select('id','title','type')->paginate(5);
+        }
+        return $this->api(compact('messages'));
+    }
+
+    /**
+     * @api {get} /api/user/get_message 我的参与(userGetMessages)
+     * @apiDescription 我的参与(userGetMessages)userGetMessages
+     * @apiGroup User
+     * @apiPermission none
+     * @apiVersion 0.1.0
+     * @apiParam {int}  state  类型 -1 全部 0 免费 1 悬赏 2 付费
+     * @apiSuccessExample {json} Success-Response:
+     * HTTP/1.1 200 OK
+     * {
+     * "status": true,
+     * "status_code": 0,
+     * "message": "",
+     * "data": {
+     *       "messages": {
+     *              "id": 1,
+     *              "title": "爱我的",
+     *              "type": 0,
+     *          }
+     *    }
+     *}
+     * @apiErrorExample {json} Error-Response:
+     * HTTP/1.1 400 Bad Request
+     * {
+     *     "state": false,
+     *     "code": 1000,
+     *     "message": "传入参数不正确",
+     *     "data": null or []
+     * }
+     */
+
+    public function userGetMessages(Request $request)
+    {
+        $validator = Validator::make($request->all(),
+            [
+                'state' => 'integer',
+            ],
+            [
+                'state.integer' => 'state参数错误!',
+            ]
+        );
+        if ($validator->fails()) {
+            return $this->error(ErrorCode::CLIENT_WRONG_PARAMS, '传入参数不正确!', $validator->messages());
+        }
+        $state = $request->input('state');
+        if(!empty($state)){
+            $messages = MessagesFollowerModel::where([['user_id',$this->getUserId()]])->infos()->where('type',$state)->paginate(5);
+        } else {
+            $messages = MessagesFollowerModel::where([['user_id',$this->getUserId()]])->infos()->paginate(5);
+        }
+        return $this->api(compact('messages'));
+    }
+
+    /**
+     * @api {get} /api/user/message_detail 我的发布详情(userMessageDetail)
+     * @apiDescription 我的发布详情(userMessageDetail)userMessageDetail
+     * @apiGroup User
+     * @apiPermission none
+     * @apiVersion 0.1.0
+     * @apiParam {int}  id 信息id
+     * @apiSuccessExample {json} Success-Response:
+     * HTTP/1.1 200 OK
+     * {
+     * "status": true,
+     * "status_code": 0,
+     * "message": "",
+     *      "data": {
+     *          "messages": {
+     *              "id": 1,
+     *              "title": "爱我的",
+     *              "content": "爱我的",
+     *              "user_id": 1,
+     *              "price": 1,
+     *              "phone": "18228068397",
+     *              "comment": "瓦坎达入口",
+     *              "type": 1,
+     *              "sort": 1,
+     *              "deleted_at": null,
+     *              "created_at": "2018-07-12 17:06:23",
+     *              "updated_at": "2018-07-12 17:06:26",
+     *              "state": 0,
+     *              "pic_url": "",
+     *              "followers_num": 1,
+     *              "followers": [
+     *                  {
+     *                      "id": 5,
+     *                      "messages_id": 1,
+     *                      "user_id": 1,
+     *                      "username": "Richod",
+     *                      "mobile": "1111",
+     *                      "deleted_at": null,
+     *                      "created_at": "2018-07-17 09:21:18",
+     *                      "updated_at": "2018-07-17 09:21:18",
+     *                      "state": 0
+     *                      }
+     *                  ],
+     *              "income": ""
+     *            }
+     *      }
+     *}
+     * @apiErrorExample {json} Error-Response:
+     * HTTP/1.1 400 Bad Request
+     * {
+     *     "state": false,
+     *     "code": 1000,
+     *     "message": "传入参数不正确",
+     *     "data": null or []
+     * }
+     */
+
+    public function userMessageDetail(Request $request)
+    {
+        $id = $request->input('id');
+        $messages = MessagesInfoModel::find($id);
+        $messages->followers_num = MessagesFollowerModel::where([['messages_id',$messages->id]])->count();
+        $messages->followers = array();
+        if($messages->type == 1){
+            $followers = MessagesFollowerModel::where([['messages_id',$messages->id]])->get();
+            $messages->followers = $followers;
+            $messages->income = '';
+        }
+
+        if($messages->type == 2){
+            $followers = MessagesFollowerModel::where([['messages_id',$messages->id]])->get();
+            $messages->followers = $followers;
+            $messages->income = $messages->followers_num * $messages->price;
+        }
+
+        if($messages->type == 0) {
+            $messages->followers = '';
+            $messages->income = '';
+        }
+        return $this->api(compact('messages'));
+    }
+
+
+    /**
+     * @api {get} /api/user/complete_message 结束悬赏(userCompleteMessages)
+     * @apiDescription 结束悬赏(userCompleteMessages)userCompleteMessages
+     * @apiGroup User
+     * @apiPermission none
+     * @apiVersion 0.1.0
+     * @apiParam {int}  message_id  知识id
+     * @apiParam {int}  follower_id  悬赏者信息id
+     * @apiParam {int}  type  操作类型 1 添加 0 删除
+     * @apiSuccessExample {json} Success-Response:
+     * HTTP/1.1 200 OK
+     * {
+     * "status": true,
+     * "status_code": 0,
+     * "message": "",
+     * "data": {
+     *      "msg": "添加成功"
+     *    }
+     *}
+     * @apiErrorExample {json} Error-Response:
+     * HTTP/1.1 400 Bad Request
+     * {
+     *     "state": false,
+     *     "code": 1000,
+     *     "message": "传入参数不正确",
+     *     "data": null or []
+     * }
+     */
+
+    public function userCompleteMessages(Request $request)
+    {
+        $validator = Validator::make($request->all(),
+            [
+                'message_id' => 'require|integer',
+                'follower_id' => 'require|integer',
+            ],
+            [
+                'message_id.require|integer' => 'message_id参数错误!',
+                'follower_id.require|integer' => 'follower_id参数错误!',
+            ]
+        );
+        if ($validator->fails()) {
+            return $this->error(ErrorCode::CLIENT_WRONG_PARAMS, '传入参数不正确!', $validator->messages());
+        }
+        $followers_id = $request->input('follower_id');
+        $message_id = $request->input('message_id');
+        $messages_followers = MessagesFollowerModel::find($followers_id);
+        $messages = MessagesInfoModel::where([['id'=>$messages_followers->messages_id],['type',1],['state',0]])->first();
+        if(!$messages||$message_id!=$messages->id){
+            $msg = '该知识不存在,或者已完成';
+            return $this->api(compact('msg'));
+        }
+        $user = UserInfoModel::find($messages_followers->user_id);
+        $out_trade_no = 'We'.date('YmdHis').rand(1000,9999);
+        $user->money += $messages->price;
+
+        if(!$user->save()){
+            $msg = '确认失败';
+            return $this->api(compact('msg'));
+        }
+        $save['openid'] = $user->openid;
+        $save['out_trade_no'] = $out_trade_no;
+        $save['to_user'] = $messages_followers->user_id;
+        $save['user_id'] = 0;
+        $save['msg_id'] = $messages->id;
+        $save['price'] = $messages->price;
+        $save['type'] = 3;
+        $res = PaymentInfoModel::create($save);
+        if(!$res) {
+            $msg = '确认失败';
+        } else {
+            $msg = '确认成功';
+        }
+        $messages->state = 1;
+        $messages->save();
+        $messages_followers->state = 1;
+        $messages_followers->save();
+        return $this->api(compact('msg'));
+    }
+}

+ 44 - 0
app/Models/FavoriteModel.php

xqd
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: 思维定制
+ * Date: 2018/7/13
+ * Time: 17:52
+ */
+
+namespace App\Models;
+
+
+
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+class FavoriteModel extends BaseModel
+{
+    use SoftDeletes;
+    protected $dates = ['delete_at'];
+
+    /**
+     * 数据表名
+     *
+     * @var string
+     *
+     */
+    protected $table = 'favorite';
+    /**
+     * 主键
+     */
+    protected $primaryKey = 'id';
+
+    //分页
+    protected $perPage = PAGE_NUMS;
+
+    /**
+     * 可以被集体附值的表的字段
+     *
+     * @var string
+     */
+    protected $fillable = [
+        'messages_id',
+        'user_id'
+    ];
+}

+ 7 - 2
app/Models/MessagesFollowerModel.php

xqd xqd
@@ -19,7 +19,7 @@ class MessagesFollowerModel extends BaseModel
      * @var string
      *
      */
-    protected $table = 'messages_follower';
+    protected $table = 'messages_followers';
     /**
      * 主键
      */
@@ -38,7 +38,12 @@ class MessagesFollowerModel extends BaseModel
         'messages_id',
         'user_id',
         'username',
-        'mobile'
+        'mobile',
+        'state'
     ];
 
+    public function infos()
+    {
+        return $this->belongsTo('App\Models\MessagesInfoModel',  'messages_id', 'id');
+    }
 }

+ 2 - 1
app/Models/MessagesInfoModel.php

xqd
@@ -44,7 +44,8 @@ class MessagesInfoModel extends BaseModel
         'phone',
         'comment',
         'type',
-        'sort'
+        'sort',
+        'pic_url'
     ];
 
     public function tags()

+ 2 - 1
app/Models/PaymentInfoModel.php

xqd
@@ -41,7 +41,8 @@ class PaymentInfoModel extends BaseModel
         'openid',
         'out_trade_no',
         'price',
-        'type'
+        'type',
+        'msg_id'
     ];
 
 }

+ 34 - 0
database/migrations/2018_07_13_094813_create_table_favorite.php

xqd
@@ -0,0 +1,34 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class CreateTableFavorite extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('favorite', function (Blueprint $table) {
+            $table->increments('id');
+            $table->unsignedInteger('messages_id')->comment('消息ID');
+            $table->unsignedInteger('user_id')->comment('用户ID');
+            $table->softDeletes();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('favorite');
+    }
+}

+ 33 - 0
database/migrations/2018_07_16_032558_drop_cloumn_type_messages_followers.php

xqd
@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class DropCloumnTypeMessagesFollowers extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('messages_followers', function (Blueprint $table) {
+            //
+            $table->dropColumn('type');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('messages_followers', function (Blueprint $table) {
+            //
+        });
+    }
+}

+ 33 - 0
database/migrations/2018_07_16_091905_add_column_to_payment_touser.php

xqd
@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class AddColumnToPaymentTouser extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('payment_info', function (Blueprint $table) {
+            //
+            $table->unsignedInteger('to_user')->comment('去向');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('payment_info', function (Blueprint $table) {
+            //
+        });
+    }
+}

+ 33 - 0
database/migrations/2018_07_17_100158_add_pic_url_to_messages_info.php

xqd
@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class AddPicUrlToMessagesInfo extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('messages_info', function (Blueprint $table) {
+            //
+            $table->longText('pic_url')->comment('图片地址');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('messages_info', function (Blueprint $table) {
+            //
+        });
+    }
+}

+ 33 - 0
database/migrations/2018_07_18_061942_add_msg_id_to_payment_info.php

xqd
@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class AddMsgIdToPaymentInfo extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('payment_info', function (Blueprint $table) {
+            //
+            $table->unsignedInteger('msg_id')->comment('信息id');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('payment_info', function (Blueprint $table) {
+            //
+        });
+    }
+}

+ 12 - 1
routes/api.php

xqd
@@ -26,7 +26,18 @@ $api->version('v1', ['namespace' => 'App\Http\Controllers\Api\V1'], function ($a
         'uses' => 'LoginController@login',
     ]);
 
-    $api->get('/index_menu', 'IndexController@indexMenu');
+    $api->get('/index/menu', 'IndexController@indexMenu');
+    $api->get('/index/message', 'IndexController@indexMessage');
+    $api->get('/index/get_message', 'IndexController@indexGetMessage');
+    $api->get('index/tag', 'IndexController@indexTag');
+    $api->get('index/tag', 'IndexController@indexTag');
+    $api->post('/user/release', 'UserController@userRelease');
+    $api->get('/user/edit_favorite', 'UserController@userEditFavorite');
+    $api->get('/user/favorite', 'UserController@userFavorite');
+    $api->get('/user/my_message', 'UserController@userMyMessage');
+    $api->get('/user/get_message', 'UserController@userGetMessages');
+    $api->get('/user/message_detail', 'UserController@userMessageDetail');
+    $api->post('/attachment/upload', 'AttachmentController@upload');
 //    $api->post('auth/logout', [
 //        'as' => 'auth.logout',
 //        'uses' => 'AuthController@logout',