Commit 0b26760f by LiuJunYi

api

parent 756ac1fa
......@@ -29,7 +29,7 @@ class Comment extends Base
$p = input('post.p/d', 1);
$page = input('post.p/d', 8);
$comment = CommentModel::with('user')
->where(['pid' => input('post.pid'), 'status' => config('user_comment_status.pass')])
->where(['pid' => input('post.pid'), 'status' => config('comment_status.pass')])
->page($p, $page)
->select();
if (!$comment) {
......@@ -61,7 +61,7 @@ class Comment extends Base
$order = OrderModel::get([
'uid' => $this->userinfo[0],
'id' => input('post.order_id'),
'is_comment' => ['in', [config('user_comment_status.audit'), config('user_comment_status.no_pass')]]
'is_comment' => ['in', [config('comment_status.no'), config('comment_status.no_pass')]]
]);
//检验是否重复写入
if (!$order) {
......@@ -75,8 +75,7 @@ class Comment extends Base
'pid' => $order->pid,
'uid' => $this->userinfo[0],
]);
$order->is_comment = config('user_comment_status.examine');
$order->is_comment = config('comment_status.to_examine');
$order->save();
//查询订单
return ['code' => 0, 'msg' => '评论成功'];
......
......@@ -55,7 +55,7 @@ class Order extends Base
//检验该活动是否有效期
if (time() > strtotime($project->sign_endtime)) {
//活动过期
return ['code' => 1, 'msg' => '活动已过期'];
return ['code' => 1, 'msg' => '活动已截止报名'];
}
//生成订单
try {
......@@ -70,10 +70,14 @@ class Order extends Base
$order->uid = $this->userinfo[0];
$order->pid = $project['id'];
$order->title = $project['title'];
//查看是否为会员
$user = UserModel::get($this->userinfo[0]);
//活动总价
$price = $project['is_vip'] ? $project['price'] : $project['vip_price'];
$price = $user['is_vip'] ? $project['price'] : $project['vip_price'];
$order->total_fee = $price * 100 * input('post.sign_limits') / 100;
$order->status = config('order_status.noPay');
//TODO::支付状态应该是noPay,测试换成pay
$order->status = config('order_status.pay');
// $order->status = config('order_status.no_pay');
$order->extras = [
'nickname' => input('post.nickname'),
'phone' => input('post.phone'),
......@@ -90,38 +94,44 @@ class Order extends Base
$data['order_id'] = intval($order->id);
$data['total_fee'] = doubleval($order->total_fee);
//生成订单
//TODO::关闭支付接口
// 更新订单号-防止签名失败
$order->out_trade_no = (new \WxPayConfig())->GetMerchantId() . time() . $order->id;
// $order->out_trade_no = (new \WxPayConfig())->GetMerchantId() . time() . $order->id;
// $input = new \WxPayUnifiedOrder();
// $input->SetBody($order->title);
// $input->SetAttach($order->id);
// $input->SetOut_trade_no($order->out_trade_no);
// $input->SetTotal_fee(floatval($order->total_fee) * 100); // 单位为分
// $input->SetTime_start(date("YmdHis"));
// $input->SetTime_expire(date("YmdHis", time() + 600));
// //$input->SetGoods_tag("wx-xcx");
// $input->SetNotify_url(config('wx_pay.notify_url'));
// $input->SetTrade_type("JSAPI");
// $input->SetOpenid($this->userinfo[1]);
// $unifiedOrder = \WxPayApi::unifiedOrder($input);
// if ($unifiedOrder["return_code"] == 'FAIL') {
// return ['code' => 1, 'msg' => $unifiedOrder['return_msg']];
// }
// // 保存 prepay_id 用于发送模版消息
// $order->prepay_id = $unifiedOrder['prepay_id'];
// $order->save();
// $jsApiParameters = $this->GetJsApiParameters($unifiedOrder);
// if ($jsApiParameters) {
// return ['code' => 0, 'msg' => '支付参数', 'data' => $data, 'result' => json_decode($jsApiParameters)];
// } else {
// throw new \Exception('订单签名失败');
// }
$input = new \WxPayUnifiedOrder();
$input->SetBody($order->title);
$input->SetAttach($order->id);
$input->SetOut_trade_no($order->out_trade_no);
$input->SetTotal_fee(floatval($order->total_fee) * 100); // 单位为分
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
// $input->SetGoods_tag("wx-xcx");
$input->SetNotify_url(config('wx_pay.notify_url'));
$input->SetTrade_type("JSAPI");
$input->SetOpenid($this->userinfo[1]);
$unifiedOrder = \WxPayApi::unifiedOrder($input);
if ($unifiedOrder["return_code"] == 'FAIL') {
return ['code' => 1, 'msg' => $unifiedOrder['return_msg']];
}
// 保存 prepay_id 用于发送模版消息
$order->prepay_id = $unifiedOrder['prepay_id'];
$order->save();
$jsApiParameters = $this->GetJsApiParameters($unifiedOrder);
if ($jsApiParameters) {
return ['code' => 0, 'msg' => '支付参数', 'data' => $data, 'result' => json_decode($jsApiParameters)];
} else {
throw new \Exception('订单签名失败');
}
Db::commit();
} catch (\Exception $e) {
Db::rollback();
return ['code' => 1, 'msg' => $e->getMessage()];
}
//TODO::删除伪成功
return ['code' => 0, 'msg' => '报名成功'];
}
/**
......@@ -140,19 +150,22 @@ class Order extends Base
$res = $validate->check(input('post.'));
if (!$res) return ['code' => 1, 'msg' => $validate->getError()];
//生成订单
try {
//开始事务
Db::startTrans();
$year = intval(input('post.year'));
//生成订单入库
$order = new OrderModel();
$order->type = config('order_type.vip');
$order->uid = $this->userinfo[0];
$order->title = config('vip.title');
$order->title = config('wx_pay.vip_title');
//活动总价
$order->total_fee = config('vip.price') * 100 * $year / 100;
$order->total_fee = config('wx_pay.vip_price') * 100 * $year / 100;
//查看vip有效期
$user = UserModel::get($this->userinfo);
$user = UserModel::get($this->userinfo[0]);
if ($user->is_vip == 1) {
if ($user->vip_endtime > time()) {//累加
if (strtotime($user->vip_endtime) > time()) {//累加
$vip_endtime = strtotime("{$user->vip_endtime} +{$year} year");
} else {
$vip_endtime = strtotime("+{$year} year");
......@@ -161,11 +174,13 @@ class Order extends Base
$vip_endtime = strtotime("+{$year} year");
}
$vip_endtime = date('Y-m-d H:i:s', $vip_endtime);
$order->status = config('order_status.noPay');
//TODO::支付状态应该是noPay,测试换成pay
$order->status = config('order_status.pay');
// $order->status = config('order_status.no_pay');
$order->extras = [
'year' => $year,
'vip_endtime' => $vip_endtime,
'price' => config('vip.price'),
'price' => config('wx_pay.vip_price'),
'remark' => input('post.remark'),
];
if (!$order->save()) {
......@@ -174,38 +189,50 @@ class Order extends Base
$data['order_id'] = intval($order->id);
$data['total_fee'] = doubleval($order->total_fee);
//生成订单
// 更新订单号-防止签名失败
$order->out_trade_no = (new \WxPayConfig())->GetMerchantId() . time() . $order->id;
//TODO::关闭支付接口
// // 更新订单号-防止签名失败
// $order->out_trade_no = (new \WxPayConfig())->GetMerchantId() . time() . $order->id;
//
// $input = new \WxPayUnifiedOrder();
// $input->SetBody($order->title);
// $input->SetAttach($order->id);
// $input->SetOut_trade_no($order->out_trade_no);
// $input->SetTotal_fee(floatval($order->total_fee) * 100); // 单位为分
// $input->SetTime_start(date("YmdHis"));
// $input->SetTime_expire(date("YmdHis", time() + 600));
// // $input->SetGoods_tag("wx-xcx");
// $input->SetNotify_url(config('wx_pay.notify_url'));
// $input->SetTrade_type("JSAPI");
// $input->SetOpenid($this->userinfo[1]);
// $unifiedOrder = \WxPayApi::unifiedOrder($input);
// if ($unifiedOrder["return_code"] == 'FAIL') {
// return ['code' => 1, 'msg' => $unifiedOrder['return_msg']];
// }
// // 保存 prepay_id 用于发送模版消息
// $order->prepay_id = $unifiedOrder['prepay_id'];
// $order->save();
// $jsApiParameters = $this->GetJsApiParameters($unifiedOrder);
// if ($jsApiParameters) {
// return ['code' => 0, 'msg' => '支付参数', 'data' => $data, 'result' => json_decode($jsApiParameters)];
// } else {
// throw new \Exception('订单签名失败');
// }
//TODO::删除测试代码 --------------------开始
$input = new \WxPayUnifiedOrder();
$input->SetBody($order->title);
$input->SetAttach($order->id);
$input->SetOut_trade_no($order->out_trade_no);
$input->SetTotal_fee(floatval($order->total_fee) * 100); // 单位为分
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
// $input->SetGoods_tag("wx-xcx");
$input->SetNotify_url(config('wx_pay.notify_url'));
$input->SetTrade_type("JSAPI");
$input->SetOpenid($this->userinfo[1]);
$unifiedOrder = \WxPayApi::unifiedOrder($input);
if ($unifiedOrder["return_code"] == 'FAIL') {
return ['code' => 1, 'msg' => $unifiedOrder['return_msg']];
}
// 保存 prepay_id 用于发送模版消息
$order->prepay_id = $unifiedOrder['prepay_id'];
$order->save();
$jsApiParameters = $this->GetJsApiParameters($unifiedOrder);
if ($jsApiParameters) {
return ['code' => 0, 'msg' => '支付参数', 'data' => $data, 'result' => json_decode($jsApiParameters)];
} else {
throw new \Exception('订单签名失败');
}
$user = UserModel::get($this->userinfo[0]);
$user->is_vip = 1;
$user->vip_endtime = $vip_endtime;
$user->save();
//----------------------------------------结束
Db::commit();
} catch (\Exception $e) {
Db::rollback();
return ['code' => 1, 'msg' => $e->getMessage()];
}
//TODO::删除伪成功
return ['code' => 0, 'msg' => '开通成功'];
}
/**
......@@ -264,7 +291,7 @@ class Order extends Base
$order->status = config("order_status.pay");
$order->trade_status = 'SUCCESS';
$order->save();
if ($order->type == confih('order_type.vip')) {
if ($order->type == config('order_type.vip')) {
//给user表加数据
$user = UserModel::get($this->userinfo[0]);
$user->is_vip = 1;
......@@ -315,7 +342,7 @@ class Order extends Base
*/
public function getVipPrice()
{
return ['code' => 1, 'msg' => 'success', 'price' => number_format(config('vip.price'), 2)];
return ['code' => 1, 'msg' => 'success', 'price' => number_format(config('wx_pay.vip_price'), 2)];
}
/**
......@@ -330,13 +357,17 @@ class Order extends Base
$p = input('post.p/d', 1);
$page = input('post.page/d', 8);
$status = input('post.status/d', 1);
$order = OrderModel::where('status', $status)
$order = OrderModel::with('project')
->where('status', $status)
->where('uid', $this->userinfo[0])
->where('type', 1)
->page($p, $page)
->select();
$order = $order ? collection($order)->toArray() : [];
if (!$order) return ['code' => 1, 'msg' => '没有更多'];
$order = collection($order);
if ($order->isEmpty()) {
return ['code' => 1, 'msg' => '没有更多'];
}
$order->visible(['id', 'pid', 'title', 'total_fee', 'project.poster', 'created_at', 'status', 'is_refund', 'is_comment'])->append(['status_text'])->toArray();
return ['code' => 0, 'msg' => 'success', 'data' => $order];
}
......@@ -353,10 +384,10 @@ class Order extends Base
->where('uid', $this->userinfo[0])
->where('type', config('order_type.project'))
->where('status', config('order_status.pay'))
->where('is_refund', config('order_is_refund.no_refund'))
->where('is_refund','in', [config('refund_status.no'), config('refund_status.no_pass')])
->find();
if (!$order) return ['code' => 1, 'msg' => '订单错误'];
$order->is_refund = config('order_is_refund.refund');
$order->is_refund = config('refund_status.to_examine');
$order->save();
//提交退款表
RefundModel::create([
......
......@@ -3,6 +3,7 @@
namespace app\api\controller;
use app\common\model\User as UserModel;
use app\admin\controller\Upload;
class User extends Base
{
......@@ -160,4 +161,70 @@ class User extends Base
$user['hidephone'] = substr_replace($user['phone'], '****', 3, 4);
return ['code' => 0, 'msg' => 'success', 'data' => $user];
}
/**
* 更新用户
* @url /api/User/update
* @param nickname 姓名
* @param sex 性别
* @return json
*/
public function update()
{
//用户ID
$uid = $this->userinfo[0];
$user = UserModel::get($uid);
//可选更新
if (input('post.nickname')) $user->nickname = input('post.nickname');
if (input('post.gender')) $user->gender = input('post.gender');
$user->save();
return ['code' => 0, 'msg' => '更新成功'];
}
/**
* 用户收藏列表
* @url /api/User/userCollections
* @param p 当前页
* @param page 一页显示几条
* @return json
*/
public function userCollections()
{
$uid = $this->userinfo[0];
$p = input('post.p/d', 1);
$page = input('post.page/d', 8);
$list = collection(UserModel::get($uid)->project()->page($p, $page)->select());
if ($list->isEmpty()) {
return ['code' => 1, 'msg' => '没有更多'];
}
$list = $list->visible(['title', 'night_num', 'price', 'vip_price', 'poster',])->append(['sign_endtime_str']);
return ['code'=>0,'msg'=>'success','data'=>$list];
}
/**
* 更新头像
* @url /api/User/uploadAvatar
* @param avatar 头像资源
* @return json
*/
public function uploadAvatar()
{
$file = request()->file('avatar');
$upload = new Upload();
$result = $upload->sava($file);
if ($result['error'] == 1) {
return ['code' => 1, 'msg' => $result['msg']];
}
$url = $result['result']['url'];
//上传头像
$user = UserModel::get($this->userinfo[0]);
$user->avatar = $url;
$user->save();
return ['code' => 0, 'msg' => '更新成功', 'avatar_url' => $user->avatar];
}
}
\ No newline at end of file
......@@ -9,32 +9,109 @@
namespace app\common\model;
use app\common\model\BaseModel;
use think\Collection;
use traits\model\SoftDelete;
use app\common\model\Project as ProjectModel;
use app\common\model\User as UserModel;
class Order extends BaseModel
{
use SoftDelete;
// 设置当前模型对应的完整数据表名称
protected $table = 'mr_user_orders';
//获取订单商品
public function project(){
return $this->belongsTo('Project','pid','id');
public function project()
{
return $this->belongsTo('Project', 'pid', 'id');
}
//获取下单用户信息
public function userInfo(){
return $this->belongsTo('User','uid','id');
public function userInfo()
{
return $this->belongsTo('User', 'uid', 'id');
}
//处理订单状态
public function getStatusNameAttr($value,$data){
public function getStatusNameAttr($value, $data)
{
$statusNameArr = array(
'0'=>['color'=>'#cc2e2e','name'=>'待付款'],
'1'=>['color'=>'#c33eff','name'=>'进行中'],
'2'=>['color'=>'#68dff0','name'=>'待评价'],
'3'=>['color'=>'#4acc2e','name'=>'已完成']
'0' => ['color' => '#cc2e2e', 'name' => '待付款'],
'1' => ['color' => '#c33eff', 'name' => '进行中'],
'2' => ['color' => '#68dff0', 'name' => '待评价'],
'3' => ['color' => '#4acc2e', 'name' => '已完成']
);
return $statusNameArr[$data['status']];
// 0-未付款,1-进行中,2-待评价,3-已完成
}
//extras转化成数组
public function getExtrasAttr($value)
{
return json_decode($value, true);
}
//转化成json
public function setExtrasAttr($value)
{
return json_encode($value);
}
//检验家庭组限制->已上锁
public static function getGroupNumberByProject($pid, $sign_limits)
{
//获取家庭组限制
$project = ProjectModel::get($pid);
$order = self::lock(true)
->where(['status' => config('order_status.no_pay'), 'created_at' => ['> time', date('Y-m-d H:i:s', time() - 300)]])
->whereOr('status' , 'in', [config('order_status.pay'), config('order_status.wait_comment'), config('order_status.complete')])
->select();
$count = 0;
if ($order) {
foreach ($order as $k => $v) {
if($v['type']==config('order_type.project')){
$count += $v['extras']['sign_limits'];
}
}
}
if ($count + $sign_limits > $project['sign_limits']) {
return true;
}
return false;
}
//订单状态
public function getStatusTextAttr($value,$data)
{
$str = '';
if($data['status'] == config('order_status.pay')){
//进行中
if($data['is_refund'] == config('refund_status.no')){
$str = '申请退款';
}elseif($data['is_refund'] == config('refund_status.to_examine')){
$str = '退款申请中';
}elseif($data['is_refund'] == config('refund_status.no_pass')){
$str = '退款失败';
}
}elseif($data['status'] == config('order_status.wait_comment')){
//待评价
if($data['is_comment'] == config('comment_status.no')){
$str = '待评价';
}elseif($data['is_comment'] == config('comment_status.to_examine')){
$str = '评价审核中';
}elseif($data['is_comment'] == config('comment_status.no_pass')){
$str = '评价失败';
}
}elseif($data['status'] == config('order_status.complete')){
//待评价
if($data['is_comment'] == config('comment_status.pass')){
$str = '已完成';
}
if($data['is_refund'] == config('refund_status.pass')){
$str = '已退款';
}
}
return $str;
}
}
......@@ -29,7 +29,7 @@ $config = [
// 注册的根命名空间
'root_namespace' => [],
// 扩展函数文件
'extra_file_list' => [APP_PATH.'helper.php', THINK_PATH.'helper'.EXT],
'extra_file_list' => [APP_PATH . 'helper.php', THINK_PATH . 'helper' . EXT],
// 默认输出类型
'default_return_type' => 'html',
// 默认AJAX 数据返回格式,可选json xml ...
......@@ -141,8 +141,8 @@ $config = [
// 视图输出字符串内容替换
'view_replace_str' => [],
// 默认跳转页面对应的模板文件
'dispatch_success_tmpl' => ROOT_PATH.'/public/dispatch_jump.html',
'dispatch_error_tmpl' => ROOT_PATH.'/public/dispatch_jump.html',
'dispatch_success_tmpl' => ROOT_PATH . '/public/dispatch_jump.html',
'dispatch_error_tmpl' => ROOT_PATH . '/public/dispatch_jump.html',
// +----------------------------------------------------------------------
// | 异常及错误设置
......@@ -239,8 +239,8 @@ $config = [
// 访问错误
'http_exception_template' => [
404 => ROOT_PATH.'/public/404.html',
500 => ROOT_PATH.'/public/500.html',
404 => ROOT_PATH . '/public/404.html',
500 => ROOT_PATH . '/public/500.html',
],
'app_name' => '美行者亲子游',
......@@ -272,7 +272,60 @@ $config = [
'secretKey' => 'FuiGofChZbYMxC3MKeCj28E-dwU8Ji-wLgByczjG',
'domain' => 'http://pezwu2vm9.bkt.clouddn.com',
'bucket' => 'meixingzhe',
]
],
// +----------------------------------------------------------------------
// | 退款状态
// +----------------------------------------------------------------------
'refund_status' => [
'no' => 0, //无
'to_examine' => 1, //审核
'no_pass' => 2, //驳回
'pass' => 3 //通过
],
// +----------------------------------------------------------------------
// | 评论状态
// +----------------------------------------------------------------------
'comment_status' => [
'no' => 0, //无
'to_examine' => 1, //审核
'no_pass' => 2, //驳回
'pass' => 3 //通过
],
// +----------------------------------------------------------------------
// | 下单类型
// +----------------------------------------------------------------------
'order_type' => [
'project' => 1,
'vip' => 2
],
// +----------------------------------------------------------------------
// | 下单状态
// +----------------------------------------------------------------------
'order_status' => [
'no_pay' => 0, //待付款
'pay' => 1, //进行中(已支付)
'wait_comment' => 2, //等评论
'complete' => 3 //已完成
],
// +----------------------------------------------------------------------
// | 微信支付
// +----------------------------------------------------------------------
'wx_pay' => [
'notify_url' => '域名/api/Order/callback',
'vip_title' => '美行者会员VIP',
'vip_price' => 49.00
],
];
return $config;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment