config = config('pay.ali'); } /** * 处理支付宝后台通知的接口 * * @param Request $request * @return \Symfony\Component\HttpFoundation\Response 返回支付宝的成功响应 */ public function payNotify(Request $request) { $alipay = Pay::alipay($this->config); // TODO: 加入轮询接口以配合后台通知修改订单状态 // 后台异步通知接口可能因网络问题而未能接收 // 使用轮询检查订单状态,如果支付成功则停止轮询 try { $data = $alipay->verify(); // 验签操作 // 验证 app_id // 可判断 total_amount 是否为该订单的实际金额 if ($data->get('app_id') == $this->config['app_id']) { // 支付成功 if ($data->get('trade_status') == 'TRADE_SUCCESS') { // 更新订单信息 $order = Order::query()->where('no', $data->get('out_trade_no'))->firstOrFail(); $order->paid_at = $data->get('notify_time'); // 支付时间 $order->pay_no = $data->get('trade_no'); // 支付交易号 $order->pay_amount = $data->get('receipt_amount'); // 实际支付金额 $order->status = OrderStatusEnum::PAID; // 更新订单状态为已支付 $order->pay_type = OrderPayTypeEnum::ALI; // 支付类型 $order->save(); // 保存订单信息 } } // 记录支付宝通知日志 Log::debug('Alipay notify', $data->all()); } catch (\Exception $e) { // 记录异常日志 Log::debug('Alipay notify', $e->getMessage()); } // 返回支付宝的成功响应 return $alipay->success(); } /** * 处理前台跳转的接口 * * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View 返回支付结果视图 */ public function payReturn() { // 获取最新的 9 个产品 $latestProducts = Product::query()->latest()->take(9)->get(); $order = null; try { // 验证支付数据 $data = Pay::alipay($this->config)->verify(); // 根据订单号查询订单 $order = Order::query()->where('no', $data->get('out_trade_no'))->firstOrFail(); } catch (\Exception $e) { // 处理异常(可以记录日志或返回错误视图) } // 返回支付结果视图,并传递订单和最新产品数据 return view('user.payments.result', compact('order', 'latestProducts')); } }