getConfigValue('service_num'); if (empty($service_num)) { $service_num = 0.6; } //商品金额 $goods_money = $goods_data['total_goods_money'];//商品总价 $goods_number = $goods_data['total_num'];//商品总数 $pack_price = $goods_data['pack_price'];//打包费 if ($order_type == 1){//堂食不算打包费 $order_money = $goods_money; }else{//打包 $order_money = bcadd($goods_money, $pack_price, 2);//订单金额 =(商品金额 + 打包费) } //预留优惠卷金额 $coupon_money = 0; //用户支付金额=订单金额 - 优惠卷金额 $pay_money = bcsub($order_money,$coupon_money,2); $service_money = bcdiv(bcmul($pay_money,$service_num,2),100,2);//交易支付手续费 //商家到账金额 = 订单金额-交易支付手续费 $shop_money = bcsub($order_money,$service_money,2); //信息入库 $order_info = [ 'order_sn' => CommonServer::creatServer()->createOrderNo('WDO'), 'order_type' => $order_type, 'm_id' => $m_id, 'shop_id' => $shop_id, 'order_money' => $order_money, 'pay_money' => $pay_money, 'goods_number' => $goods_number, 'table_number' => $table_number, 'diner_number' => $diner_number, 'note' => $note, 'service_num' => $service_num, 'service_money' => $service_money, 'pack_price' => $pack_price, 'shop_money' => $shop_money, ]; //主表信息入库 $order = Order::create($order_info); $order_id = $order->{'id'}; if (empty($order_id)){ DB::rollBack(); return ['code' => 0, 'msg' => '订单创建失败']; } //商品信息入库 $goods_total_money = 0;//商品总金额 foreach ($goods_data['goods_list'] as $goods){ if ($shop_id != $goods['shop_id']){ DB::rollBack(); return ['code' => 0, 'msg' => '商品与商家不符']; } $goods_info = [ 'm_id' => $m_id, 'shop_id' => $shop_id, 'order_id' => $order_id, 'goods_id' => $goods['goods_id'], 'goods_spec_list' => empty($goods['spec_list']) ? '' : $goods['spec_list'], 'goods_name' => $goods['goods_name'], 'goods_img' => $goods['goods_image'], 'goods_attr' => trim($goods['goods_attr'],','), 'goods_price' => $goods['price'], 'goods_number' => $goods['goods_number'], 'goods_money' => $goods['goods_money'], ]; //总商品金额 $goods_total_money = bcadd($goods_total_money,$goods_info['goods_money'],2); OrderItem::create($goods_info); } //删除购物车 $shopping = ShoppingCartServer::creatServer()->delShopping($m_id,$shop_id); if ($shopping['code'] == 0){ DB::rollBack(); return ['code' => 0, 'msg' => '下单失败']; } DB::commit(); return ['code' => 1, 'msg' => '成功', 'data' => ['order_id'=>$order_id]]; }catch (\Exception $e){ DB::rollBack(); return ['code'=>0,'msg'=>'下单出错'.$e->getMessage()]; } } /** * 支付回调 * @param $pay_type * @param $order_sn * @param $pay_code * @param $pay_money * @param $notify_info * @return bool */ function NotifyPay($pay_type,$order_sn, $pay_code, $pay_money, $notify_info) { $order_info = Order::where('order_sn', $order_sn)->where('order_status', 1)->first(); if (empty($order_info)) { ErrorRecord::create(['msg' => $order_sn . '订单支付状态错误', 'data' => serialize($notify_info)]); return false; } // $is_test = env('TEST_SERVE', false); $is_test=config('weixin.test_serve',false); if ($order_info->{'pay_money'} != $pay_money && !$is_test) { Order::where('id', $order_info->{'id'})->update(['pay_code' => $pay_code]); ErrorRecord::create(['msg' => $order_info->{'order_sn'} . '支付金额不匹配', 'data' => serialize($notify_info)]); return false; } $date = date('Y-m-d H:i:s'); $shop_id = $order_info->{'shop_id'}; //店铺订单序号生成 $key = $shop_id . '_number'; $total_count = RedisDataServer::creatServer()->getData($key); if (empty($total_count)){ $total_count = '1'; // 获取当前时间戳 $now = time(); // 获取今天结束的时间戳 $endOfDay = strtotime("tomorrow") - 1; // 计算剩余时间(秒) $secondsLeft = bcsub($endOfDay,$now,1); RedisDataServer::creatServer()->setData($key,$total_count,'str',$secondsLeft); } RedisDataServer::creatServer()->setIncr($key); //订单更新信息 $update['pay_type'] = $pay_type; $update['pay_time'] = $date; $update['pay_code'] = $pay_code; $update['number'] = $total_count; $update['order_status'] = 2; //更新订单信息 Order::where('id', $order_info->{'id'})->update($update); // 投递打印消息 JobServer::creatServer()->shopOrderPrintJob($order_info->{'id'},$order_info->{'shop_id'}); return true; } }