/** * 用于接收 p++ 支付结果的回调地址 * @author zhengqian@dajiayao.cc */ public function payCallBack() { $input = file_get_contents("php://input"); \Log::info(sprintf("input: %s", $input)); $objPayResult = json_decode($input); $payment = Payment::where('payment_number', $objPayResult->id)->first(); if (!$payment) { \Log::info(sprintf("the payment_number : %s not found in db", $objPayResult->id)); return; } //写入支付日志 $paymentLog = PaymentLog::where('payment_id', $payment->id)->first(); if (!$paymentLog) { return; } $order = $payment->order; $paymentLog->respond_data = $input; $paymentLog->save(); if ($objPayResult->paid == true) { //修改订单状态 $order->payment_serial_number = $payment->serial_number; $order->payment_id = $payment->id; $order->payment_status = Order::PAY_STATUS_YES; $order->status = Order::STATUS_TO_DELIVER; $order->save(); //支付状态 $payment->status = Payment::PAYMENT_STATUS_SUCCESS; $payment->save(); //佣金状态 $commission = OrderCommission::where('order_id', $order->id)->first(); if (!$commission) { return; } $commission->status = OrderCommission::STATUS_CONFIRMED; $commission->save(); //seller commission $sellerCommission = SellerCommission::firstOrNew(['order_id' => $order->id, 'seller_id' => $order->shop->seller_id, 'amount' => $commission->amount]); $sellerCommission->status = SellerCommission::STATUS_CONFIRMED; $sellerCommission->save(); //将销售额存入redis $orderItems = $order->orderItems; foreach ($orderItems as $orderItem) { $quantity = $orderItem->quantity; $this->redis->incrby("dajiayao:mall:item:sellcount:" . $orderItem->item_id, $quantity); $wxUser = $orderItem->order->buyer->wxUser; $header = $wxUser->headimgurl; if ($order->is_anonymous == 1 or !$header) { continue; } $this->redis->sadd("dajiayao:mall:item:buyers:" . $orderItem->item_id, json_encode(['name' => $wxUser->nickname, 'avatar' => $header])); } //微信消息推送 $this->buyerService->sendNewOrderMsg($order); $this->sellerService->sendPaidMsg($order); } elseif ($objPayResult->paid == false) { //支付状态 $payment->status = Payment::PAYMENT_STATUS_FAIL; $payment->save(); } else { return; } return "success"; }