예제 #1
0
 /**
  * 付款成功通知
  * @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;
 }
예제 #2
0
 /**
  * 重新支付
  * @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)]);
 }
예제 #3
0
 /**
  * 取消订单,通知买家
  * @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;
 }
예제 #4
0
 /**
  * 核实订单,库存
  * @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]);
 }
예제 #5
0
 /**
  * 订单详情
  * @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);
 }