* @param type $uid * @param type $cpOrderId * @param bool function $deliverFunc 发货成功返回 true,否则返回false * @return {"err":0,"ret":obj,"msg":"错误信息"} * @deprecated since version 0 使用CheckAndDrawOrders */ static function CheckAndDrawOrder($uid, $cpOrderId, $deliverFunc) { if (!$uid || strlen($cpOrderId) != 19) { # 订单编号长19位 return Resp::err(1, "参数错误"); } $order = daoInst()->select()->from(self::orderTab) # 取订单数据 ->where('cpOrderId')->eq($cpOrderId) ->limit(1)->fetch(); if (!$order) { CLog::pay(' 订单不存在! ' . $cpOrderId); return Resp::err(2, "订单不存在"); } if (false === strpos($uid, $order->uid)) { # UID不符 return Resp::err(3, "UID不符"); } if ($order->channel != "imitate" # # 校验是否已支付的代码, -- imitate的不校验 && $order->status != 1) { # 订单状态 CLog::pay(' 订单尚未完成支付!'); return Resp::err(4, "订单尚未完成支付"); } if ($order->drawed_ts > 0) { # 定单已经发过货了 CLog::pay(' 订单重复请求发货!' . $cpOrderId); return Resp::err(5, "订单重复请求发货"); } if (!is_callable($deliverFunc)) { # 校验回调函数是否可执行 CLog::pay('发货回调函数不是可执行对象!' . $cpOrderId); return Resp::err(6, "发货函数不可调用!"); } $bOk = call_user_func($deliverFunc, $order); # 调用游戏发货逻辑, 要求游戏逻辑返回true/false if (!$bOk) { CLog::pay("订单发货失败: $cpOrderId"); return Resp::err(7, "游戏发货逻辑执行失败"); } $n = daoInst()->update(self::orderTab) # 更新订单状态 ->data(array('drawed_ts' => now())) ->where('cpOrderId')->eq($cpOrderId) ->exec(); if (!$n) { CLog::pay("数据库更新订单状态失败: $cpOrderId"); return Resp::err(8, "更新订单状态,数据库操作失败"); # 数据库操作失败 } CLog::pay("订单发货成功: $cpOrderId"); return Resp::ok(""); } /** * 查询已支付未发货订单 * @param string $uid 账号ID * @return array 订单编号数组 * @version 2020年1月2日 第一版, 增加查询订单接口.流程上变为先查询订单再调用校验发货方法. */ static function FindReadOrders($uid) { if (!$uid) { # uid不能为空 return Resp::err("1", "参数错误"); } $orders = daoInst()->select('cpOrderId')->from(pay_op::orderTab) # 取订单数据 ->where('uid')->eq($uid) ->andWhere('status')->eq(1) ->andWhere('drawed_ts')->le(0) ->limit(10)->fetchAll(); # 一次最多返10条 return $orders; } } // //$orders = json_decode(json_encode(array( // array('Id' => 3), // array('Id' => 2) // ))); //$arrOrderId = array(1, 2); //array_map(function($o)use(&$arrOrderId) { // $arrOrderId[] = $o->Id; //}, $orders); //var_dump($arrOrderId); //$n = daoInst()->update(pay_op::orderTab) # 更新订单状态 // ->data(array('drawed_ts' => now())) // ->where('Id')->in($arrOrderId) // ->exec(); //$uid = "0BB6B1D602621423EBA082F17A57712F"; //$orders = daoInst()->select('cpOrderId')->from(pay_op::orderTab) # 取订单数据 // ->where('uid')->eq($uid) // ->andWhere('status')->eq(1) // ->andWhere('drawed_ts')->le(0) // ->limit(10)->fetchAll(); # 一次最多返10条 // //var_dump($orders);