/** * 付款成功通知 * @param $order * @return bool */ public function sendPaidMsg($order) { $seller = $order->shop->seller; if (!$seller->wxUser) { return false; } $wxUser = Buyer::find($order->buyer_id)->wxUser; $this->_newOrderData['touser'] = $seller->wxUser->openId; $this->_newOrderData['template_id'] = Config::get('weixin.template_id.new_order_to_seller'); $this->_newOrderData['url'] = 'http://www.yayao.mobi'; //TODO $this->_newOrderData['data']['keyword1']['value'] = '¥' . $order->amount_tendered; // get order_items $itemsStr = ''; $orderItems = $order->orderItems; foreach ($orderItems as $oi) { $itemsStr .= $oi->name . ' x' . $oi->quantity . ' '; } $this->_newOrderData['data']['keyword2']['value'] = $itemsStr; // 商品名称 $this->_newOrderData['data']['keyword3']['value'] = $order->order_number; // 订单号 $this->_newOrderData['data']['keyword4']['value'] = $wxUser->nickname; $commission = 0; $commissionService = new CommissionService(); $sellerCommission = $commissionService->getSellerCommissionByOrder($seller->id, $order->id); if ($sellerCommission) { $commission = $sellerCommission->amount; } $this->_newOrderData['data']['remark']['value'] = "佣金:¥" . $commission . '。该张订单完成后,店铺提成可以在我的佣金页申请提现。'; $this->_sendTplMsg($this->_newOrderData); return true; }
/** * 重新支付 * @return string * @author zhengqian@dajiayao.cc */ public function rePay() { $buyerId = $this->buyerId; $wxUser = Buyer::find($buyerId)->wxUser; if (!$wxUser) { return RestHelp::encodeResult(24000, "user illegality"); } $inputData = $this->inputData->all(); $validator = Validator::make($inputData, ['orderNumber' => 'required']); if ($validator->fails()) { return RestHelp::parametersIllegal($validator->messages()->first()); } $objOrder = Order::where('order_number', $inputData['orderNumber'])->first(); $objShop = Shop::find($objOrder->shop_id); if (!$objShop) { return RestHelp::encodeResult(21000, sprintf("shop short id %s not found in db", $objOrder->shop_id)); } //查找价格 $itemTotal = $objOrder->item_total; $grandTotal = $objOrder->grand_total; $payment = new Payment(); $payment->serial_number = OrderHelper::getPaymentSerialNumber(1); $payment->payment_number = ''; $payment->order_id = $objOrder->id; $payment->order_number = $inputData['orderNumber']; $payment->buyer_id = $buyerId; $payment->amount = $itemTotal; $payment->channel = Payment::PAYMENT_CHANNEL_PXX; $payment->type = Payment::PAYMENT_TYPE_WX; $payment->status = Order::PAY_STATUS_NO; $payment->save(); $subject = ''; //32 $body = ''; //128 foreach ($objOrder->orderItems as $orderItem) { $subject .= $orderItem->items->title . "*" . $orderItem->items->spec . "*" . $orderItem->quantity . ","; $body .= $orderItem->items->title . $orderItem->items->spec . $orderItem->quantity; } try { \Pingpp\Pingpp::setApiKey('sk_live_3dKEivmziedjzitFhaHL7gYF'); $ch = \Pingpp\Charge::create(array('order_no' => $payment->serial_number, 'app' => array('id' => 'app_XTOW5SXTWLGCGKef'), 'channel' => 'wx_pub', 'amount' => $grandTotal * 100, 'client_ip' => $this->inputData->ip(), 'currency' => 'cny', 'subject' => mb_substr($subject, 0, 32), 'body' => mb_substr($body, 0, 128), 'extra' => array('open_id' => $wxUser->openid))); } catch (\Exception $e) { return RestHelp::encodeResult(22003, $e->getMessage(), ['orderNum' => $inputData['orderNumber']]); } //写入paytmentLOg $paymentLog = new PaymentLog(); $paymentLog->payment_id = $payment->id; $paymentLog->channel = Payment::PAYMENT_CHANNEL_PXX; $paymentLog->request_data = $ch; $paymentLog->respond_data = ''; $paymentLog->save(); //保存支付流水号 $payment->payment_number = json_decode($ch)->id; $payment->save(); return RestHelp::success(['orderNumber' => $inputData['orderNumber'], 'paymentNumber' => $payment->serial_number, 'charge' => json_decode($ch, true)]); }
/** * 取消订单,通知买家 * @param $order * @return bool * TODO */ public function sendCancelOrderMsg($order) { $wxUser = Buyer::find($order->buyer_id)->wxUser; $this->_cancelOrderData['touser'] = $wxUser->openid; $this->_cancelOrderData['template_id'] = Config::get('weixin.template_id.cancel_order'); $this->_cancelOrderData['url'] = 'http://www.yayao.mobi'; //TODO $this->_cancelOrderData['data']['orderProductPrice'] = $order->amount_tendered; // 订单金额 // get order_items $itemsStr = ''; $orderItems = $order->orderItems; foreach ($orderItems as $oi) { $itemsStr .= $oi->name . ' x' . $oi->quantity; } $this->_cancelOrderData['data']['orderProductName'] = $itemsStr; // 商品详情 $this->_cancelOrderData['data']['orderAddress'] = $order->receiver_full_address; // 收货信息 $this->_cancelOrderData['data']['orderName'] = $order->order_number; // 订单号 $this->_sendTplMsg($this->_cancelOrderData); return true; }
/** * 核实订单,库存 * @return string * @author zhengqian@dajiayao.cc */ public function check() { $inputData = $this->inputData->only('items', 'shopShortId'); $items = $inputData['items']; if (!is_array($items)) { return RestHelp::encodeResult(22000, 'item must be array'); } $arrRet = array(); $postageFlag = 0; $totalPrice = 0; $objShop = Shop::getShopByShort($inputData['shopShortId']); if (!$objShop) { return RestHelp::encodeResult(21000, "shop not found"); } $shelfItems = $objShop->getItemsOnShelf(); $resultFlag = true; $warning = ''; foreach ($items as $k => $item) { $arrRet[$k]['result'] = true; $arrRet[$k]['id'] = $item['id']; $objItem = Item::find($item['id']); if ($objItem->sale_status == Item::SALE_STATUS_NO) { $arrRet[$k]['result'] = false; $resultFlag = false; $warning = sprintf("%s 已停售", $objItem->name); break; } if ($objItem->shelf_status == Item::SHELF_STATUS_NO or !array_key_exists($objItem->id, $shelfItems)) { $arrRet[$k]['result'] = false; $resultFlag = false; $warning = sprintf("%s 已下架", $objItem->name); break; } if ($objItem->stock < $item['count']) { $arrRet[$k]['result'] = false; $resultFlag = false; $warning = sprintf("%s 库存不够", $objItem->name); break; } if ($objItem->postage_type == Item::POSTAGE_TYPE_BUYER) { $postageFlag++; } $totalPrice += $objItem->price * $item['count']; } $postage = $postageFlag ? $this->settingService->getSettingByKey(Setting::KEY_ORDER_POSTAGE)->value : 0; $grandTotal = $totalPrice + $postage; //检查合法后将价格,总价放入DB,后期用于检查 if ($resultFlag) { $user = Buyer::find($this->buyerId)->wxUser; WxUserKv::setValue($user->id, WxUserKv::BUYER_CHECK_PRICE, $grandTotal); } return RestHelp::success(['result' => $resultFlag, 'postage' => $postage, 'grandTotal' => $grandTotal, 'warning' => $warning, 'detail' => $arrRet]); }
/** * 订单详情 * @author Hanxiang * @param $number 订单号 * @return view */ public function detail($number) { $order = Order::where('order_number', $number)->first(); if (count($order) == 0) { abort(404); } // Buyer Info $buyer = Buyer::find($order->buyer_id); if (count($buyer) == 0) { $buyer = new \stdClass(); //TODO $wxUser = new \stdClass(); //TODO } else { $wxUser = $buyer->wxUser; } $total = 0; $quantity = 0; $orderItems = OrderItem::where('order_id', $order->id)->get(); foreach ($orderItems as $oi) { $total += $oi->item_total; $quantity += $oi->quantity; $supplier = Item::find($oi->item_id)->supplier; $oi->supplier = $supplier; } $order->totalPrice = $total; $order->totalQuantity = $quantity; $expresses = Express::where('status', 1)->orderBy('sort')->get(); $express = Express::find($order->express_id); if (count($express) == 0) { $express = new \stdClass(); $express->name = ''; } $order->expressObj = $express; $commission = $order->commission; if (!$commission) { $commission = new \stdClass(); $commission->amount = 0; $order->commission = $commission; } return view('admin.orders.detail')->with('order', $order)->with('buyer', $buyer)->with('wxUser', $wxUser)->with('orderItems', $orderItems)->with('expresses', $expresses); }