|
|
@ -3,10 +3,14 @@ |
|
|
namespace App\Http\Controllers\Api; |
|
|
namespace App\Http\Controllers\Api; |
|
|
|
|
|
|
|
|
use App\Http\Controllers\Controller; |
|
|
use App\Http\Controllers\Controller; |
|
|
|
|
|
use App\Models\Agent; |
|
|
use App\Models\AgentProduct; |
|
|
use App\Models\AgentProduct; |
|
|
use App\Models\Coupon; |
|
|
use App\Models\Coupon; |
|
|
|
|
|
use App\Models\Product; |
|
|
|
|
|
use App\Models\User; |
|
|
use App\Models\UserMoneyLog; |
|
|
use App\Models\UserMoneyLog; |
|
|
use App\Models\Order; |
|
|
use App\Models\Order; |
|
|
|
|
|
use EasyWeChat\Factory; |
|
|
use Illuminate\Http\Request; |
|
|
use Illuminate\Http\Request; |
|
|
use Illuminate\Support\Facades\DB; |
|
|
use Illuminate\Support\Facades\DB; |
|
|
|
|
|
|
|
|
@ -54,12 +58,14 @@ class OrderController extends Controller |
|
|
$timeout_ids[] = $v['id']; |
|
|
$timeout_ids[] = $v['id']; |
|
|
$v['status'] = -1; |
|
|
$v['status'] = -1; |
|
|
$v['status_text'] = '已取消'; |
|
|
$v['status_text'] = '已取消'; |
|
|
|
|
|
//TODO 加回库存,未考虑到几天/几个月后再打开订单列表页的情况
|
|
|
|
|
|
Product::query()->find($v['product_id'])->update(['stock' => $v['num']]); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
//超时订单设置为已取消
|
|
|
|
|
|
Order::query()->whereIn('id', $timeout_ids)->update(['status' => -1]); |
|
|
|
|
|
|
|
|
//超时订单设置为已取消 TODO 测试阶段暂时注释
|
|
|
|
|
|
// Order::query()->whereIn('id', $timeout_ids)->update(['status' => -1]);
|
|
|
|
|
|
|
|
|
return $this->success($order_list); |
|
|
return $this->success($order_list); |
|
|
} |
|
|
} |
|
|
@ -157,6 +163,41 @@ class OrderController extends Controller |
|
|
return $this->success(); |
|
|
return $this->success(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//申请退款
|
|
|
|
|
|
public function refund(Request $request) |
|
|
|
|
|
{ |
|
|
|
|
|
$formData = $request->only(['id', 'desc', 'pictures']); |
|
|
|
|
|
|
|
|
|
|
|
$request->validate([ |
|
|
|
|
|
'id' => 'required|integer', |
|
|
|
|
|
'desc' => 'required|string', |
|
|
|
|
|
'pictures' => 'nullable|array', |
|
|
|
|
|
], [ |
|
|
|
|
|
'*.required' => '内容输入不完整', |
|
|
|
|
|
'pictures.array' => '图片必须是数组', |
|
|
|
|
|
]); |
|
|
|
|
|
|
|
|
|
|
|
//去掉图片地址前的域名
|
|
|
|
|
|
$host = env('APP_URL'); |
|
|
|
|
|
foreach ($formData['pictures'] as &$v) { |
|
|
|
|
|
$v = str_replace($host, '', $v); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//TODO 需要后台处理
|
|
|
|
|
|
$order = Order::find($formData['id']); |
|
|
|
|
|
if (!in_array($order->status, [1, 2, 3])) { |
|
|
|
|
|
return $this->error('当前订单状态不允许退款'); |
|
|
|
|
|
} |
|
|
|
|
|
$order->status = 6; |
|
|
|
|
|
$order->refund_info = [ |
|
|
|
|
|
'desc' => strip_tags($formData['desc']), |
|
|
|
|
|
'pictures' => $formData['pictures'] ?? [], |
|
|
|
|
|
]; |
|
|
|
|
|
$order->save(); |
|
|
|
|
|
|
|
|
|
|
|
return $this->success(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
//获取应付金额
|
|
|
//获取应付金额
|
|
|
public function getPrice(Request $request) |
|
|
public function getPrice(Request $request) |
|
|
{ |
|
|
{ |
|
|
@ -174,13 +215,53 @@ class OrderController extends Controller |
|
|
return $this->success(['price' => $final_price]); |
|
|
return $this->success(['price' => $final_price]); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//订单支付
|
|
|
|
|
|
public function pay() |
|
|
|
|
|
{ |
|
|
|
|
|
$id = (int)request()->input('id'); |
|
|
|
|
|
|
|
|
|
|
|
//订单信息
|
|
|
|
|
|
$order = Order::find($id); |
|
|
|
|
|
if (!$order) { |
|
|
|
|
|
return $this->error('订单不存在'); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//用户openid
|
|
|
|
|
|
$openid = User::query()->find($this->user_id)->value('openid'); |
|
|
|
|
|
|
|
|
|
|
|
//代理商信息
|
|
|
|
|
|
$agent = Agent::find($this->agent_id); |
|
|
|
|
|
|
|
|
|
|
|
$config = config('wechat.payment.default'); |
|
|
|
|
|
$config = array_merge($config, [ |
|
|
|
|
|
'app_id' => $agent->appid, |
|
|
|
|
|
'mch_id' => $agent->mchid, |
|
|
|
|
|
'key' => $agent->mchkey, |
|
|
|
|
|
]); |
|
|
|
|
|
|
|
|
|
|
|
$app = Factory::payment($config); |
|
|
|
|
|
$result = $app->order->unify([ |
|
|
|
|
|
'body' => $order->title, |
|
|
|
|
|
'out_trade_no' => $order->order_no, |
|
|
|
|
|
'total_fee' => $order->price, //TODO 需要区分定金和全款
|
|
|
|
|
|
// 'notify_url' => 'https://pay.weixin.qq.com/wxpay/pay.action', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
|
|
|
|
|
|
'trade_type' => 'JSAPI', |
|
|
|
|
|
'openid' => $openid, |
|
|
|
|
|
]); |
|
|
|
|
|
|
|
|
|
|
|
$jssdk = $app->jssdk; |
|
|
|
|
|
$config = $jssdk->bridgeConfig($result['prepay_id'], false); // 返回数组
|
|
|
|
|
|
|
|
|
|
|
|
return $this->success($config); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
//订单详情
|
|
|
//订单详情
|
|
|
public function show() |
|
|
public function show() |
|
|
{ |
|
|
{ |
|
|
$id = (int)request()->input('id'); |
|
|
$id = (int)request()->input('id'); |
|
|
|
|
|
|
|
|
$fields = ['id', 'order_no', 'agent_product_id', 'num', 'price', 'title', |
|
|
|
|
|
'picture', 'status', 'pay_type', 'coupon_id', 'paid_at', 'created_at']; |
|
|
|
|
|
|
|
|
$fields = ['id', 'order_no', 'agent_product_id', 'num', 'price', 'title', 'picture', |
|
|
|
|
|
'status', 'pay_type', 'coupon_id', 'paid_money', 'paid_at', 'refund_info', 'created_at']; |
|
|
$order = Order::query() |
|
|
$order = Order::query() |
|
|
->where('user_id', $this->user_id) |
|
|
->where('user_id', $this->user_id) |
|
|
->find($id, $fields); |
|
|
->find($id, $fields); |
|
|
|