request->param('pay_type'); $platform = $this->request->param('platform'); //验签 $pay = \addons\epay\library\Service::checkNotify($pay_type); if (!$pay) { echo '签名错误'; return; } $data = $pay->verify(); $pay_fee = $pay_type == 'alipay' ? $data['total_amount'] : $data['total_fee'] / 100; $out_trade_no = $data['out_trade_no']; //你可以在此编写订单逻辑 $order = Order::where('order_no', $out_trade_no)->find(); if (!$order || $order->status != \app\common\constant\order\Status::STATUS_UNPAID) { // 订单不存在,或者订单已支付 return $pay->success()->send(); } Db::transaction(function () use ($order, $data, $pay_type, $platform, $pay_fee) { $notify = [ 'orderid' => $data['out_trade_no'], 'transaction_id' => $pay_type == 'alipay' ? $data['trade_no'] : $data['transaction_id'], 'notify_time' => date('Y-m-d H:i:s', strtotime($data['time_end'])), 'buyer_email' => $pay_type == 'alipay' ? $data['buyer_logon_id'] : $data['openid'], 'pay_type_json' => json_encode($data->all()), 'pay_fee' => $pay_fee, 'pay_type' => $pay_type // 支付方式 ]; $order->paySuccess($order, $notify); }); return $pay->success()->send(); } /** * 拉起支付 */ public function handle() { $orderNo = $this->request->post('order_no'); $pay_type = $this->request->post('pay_type'); $platform = request()->header('platform'); $order = Order::where([ 'order_no'=>$orderNo, 'status'=>'unpaid' ])->find(); if (!$order) { throw new Exception("订单不存在"); } if (!$pay_type || !in_array($pay_type, ['wechat', 'douyin', 'alipay', 'balance'])) { throw new Exception("支付类型不能为空"); } $result = PayService::submitOrder($order['real_price'],$order['order_no'],$pay_type,$order); $this->success("操作成功",$result); } // 余额支付 public function balancePay ($order, $type, $method) { $order = Db::transaction(function () use ($order, $type, $method) { $total_fee = $order->total_fee; // 扣除余额 $user = User::info(); if (is_null($user)) { // 没有登录,请登录 $this->error(__('Please login first'), null, 401); } User::moneyReduce($user->id, $total_fee, 'balance_pay', $order->id, [ 'order_id' => $order->id, 'order_sn' => $order->order_sn, ]); // 支付后流程 $notify = [ 'order_sn' => $order['order_sn'], 'transaction_id' => '', 'notify_time' => date('Y-m-d H:i:s'), 'buyer_email' => $user->id, 'pay_fee' => $order->total_fee, 'pay_type' => 'balance' // 支付方式 ]; $notify['pay_type_json'] = json_encode($notify); $order->paySuccess($order, $notify); return $order; }); $this->success('支付成功', $order); } }