$mina_appid, "mina_appSecret" => $mina_appSecret, ); } function bizwx_fetchMinaOpenidCore($subSystem) { $GPC = input_param_handle(false); $ajaxdata = input_getPostObj(); $minaCode = isset($ajaxdata["minaCode"]) ? $ajaxdata["minaCode"] : $GPC["minaCode"]; if (empty($minaCode)) { throw new GeneralException("没有传递必要的minaCode参数", "没有传递必要的minaCode参数"); } $wxParams = bizwx_fetchWxParams($subSystem); $mina_appid = $wxParams["mina_appid"]; $mina_appSecret = $wxParams["mina_appSecret"]; $url = "https://api.weixin.qq.com/sns/jscode2session?appid=" . $mina_appid . "&secret=" . $mina_appSecret . "&js_code=" . $minaCode . "&grant_type=authorization_code"; $res = http_get($url); eeglobal_log_handler('wxm_login', 'debug', "url=>$url getresult=>$res"); $resObj = @json_decode($res, true); if (empty($resObj) || empty($resObj['openid'])) { throw new GeneralException("", "结果数据不正常=>" . $res); } $resObj["wxmina_appid"] = $mina_appid; return $resObj; } function bizwx_fetchMinaOpenid($subSystem) { $resObj = bizwx_fetchMinaOpenidCore($subSystem); $wxmina_appid = $resObj["wxmina_appid"]; /***UPSERT小程序用户记录**start***/ $sqlTemp = ""; $sqlParam = array(); $sqlParam[":nowtime"] = time(); $sqlParam[":subsystem"] = intval($subSystem); $sqlParam[":wxmina_appid"] = $wxmina_appid; $sqlParam[":wxmina_openid"] = trim($resObj['openid']); $sqlParam[":weixin_unionid111"] = empty(trim($resObj['unionid'])) ? '------' : trim($resObj['unionid']); $sqlParam[":weixin_unionid222"] = empty(trim($resObj['unionid'])) ? '' : trim($resObj['unionid']); $sqlParam[":weixin_sessionkey"] = trim($resObj['session_key']); $sqlParam[":salt"] = random(8); $sqlCommon = " and subsystem=:subsystem and (( `wxmina_appid`=:wxmina_appid and `wxmina_openid`=:wxmina_openid) or ifnull(weixin_unionid,'')=:weixin_unionid111) "; $sqlTemp .= " set @handle_id=0; "; $sqlTemp .= " select @handle_id:=id from base_user where 1=1 {$sqlCommon} limit 1;"; $sqlTemp .= " insert into base_user ( `createtime`,`subsystem`,`wxmina_appid`,`wxmina_openid`, `weixin_unionid`,`weixin_sessionkey`, `salt` )"; $sqlTemp .= " select :nowtime ,:subsystem ,:wxmina_appid ,:wxmina_openid ,:weixin_unionid222, :weixin_sessionkey, :salt from dual where ifnull(@handle_id,0)=0;"; $sqlTemp .= " update base_user SET `updatetime`=:nowtime, `wxmina_appid`=:wxmina_appid, `wxmina_openid`=:wxmina_openid, `weixin_unionid`=:weixin_unionid222, `weixin_sessionkey`=:weixin_sessionkey, `salt`=:salt "; $sqlTemp .= " where ifnull(@handle_id,0)<>0 {$sqlCommon};"; $sqlTemp .= " select * from base_user where 1=1 {$sqlCommon};"; $dataset = pdo_query3($sqlTemp, $sqlParam); /***UPSERT小程序用户记录**finish***/ $baseUser = $dataset[4][0]; if (empty($baseUser)) { throw new GeneralException("", "异常"); } $baseUser["FOREND_TOKEN"] = base_buildForendToken($baseUser); return $baseUser; } function bizbase_paySuccess($payBizCatalog, $payBizId, $needQuery = false, $handleMode = "") { //$actionMode 调用模式,用以判定是否为带锁进入模式,以避免内部死锁 eeglobal_log_handler("bizbase_paySuccess", "debug", "支付成功后处理 payBizCatalog-payBizId=>{$payBizCatalog}-{$payBizId} "); switch (trim($payBizCatalog)) { case "0": //商家侧:次数购买业务 $bizInfo = pdo_fetch("select * from biz_trader_numaccount where id=" . intval($payBizId)); if (empty($bizInfo)) { throw new GeneralException("", "对应的业务支付记录不存在!"); } if (intval($bizInfo["deleted"]) != 0) { throw new GeneralException("", "对应的业务支付记录已删除!"); } if (intval($bizInfo["type"]) != 0) { throw new GeneralException("", "对应的业务支付记录不是支付记录!"); } if (intval($bizInfo["biz_catalog"]) != 0) { throw new GeneralException("", "对应的业务支付记录不是次数支付记录!"); } if (intval($bizInfo["status"]) == 1) { return true; } //已支付 if ($needQuery == true) { require_once WEB_PHY_ROOT . "/base/wxsrv.php"; $wxmina_appid = $bizInfo["wxmina_appid"]; $wxmina_openid = $bizInfo["wxmina_openid"]; //$out_trade_no = $bizInfo["biz_idtag"]; $out_trade_no = !isset($bizInfo["weixin_outtradeno"]) || empty($bizInfo["weixin_outtradeno"]) ? $bizInfo["biz_idtag"] : $bizInfo["weixin_outtradeno"]; $backdata = weixin_orderqueryV3($wxmina_appid, $out_trade_no, null); if ($backdata["trade_state"] == "SUCCESS") { } else { throw new GeneralException("NoPaySuccess", $backdata["trade_state"] . "-" . $backdata["trade_state_desc"]); } } $sqlParam = array(); $sqlParam[":nowtime"] = time(); $sqlParam[":bizid"] = $bizInfo["id"]; $sqlParam[":biz_traderid"] = $bizInfo["biz_traderid"]; $sqlParam[":paymoney"] = $bizInfo["paymoney"]; $sqlParam[":money"] = $bizInfo["money"]; $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 次数支付成功 \n"; $sqlTemp = ""; $sqlTemp .= " update biz_trader_numaccount set updatetime=:nowtime,`status`=1 "; //已支付 $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;"; $sqlTemp .= " set @handle_id=0; "; $sqlTemp .= " select @handle_id:=id from biz_trader_account where `type`=0 and `biz_catalog`=0 and `biz_id`=:bizid limit 1;"; $sqlTemp .= " insert into biz_trader_account ( `biz_traderid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )"; $sqlTemp .= " select :biz_traderid , :nowtime , 0 , :paymoney, 1, 0 , :bizid, :bizremark from dual where ifnull(@handle_id,0)=0;"; $sqlTemp .= " set @handle_id=0; "; $sqlTemp .= " select @handle_id:=id from biz_trader_account where `type`=1 and `biz_catalog`=0 and `biz_id`=:bizid limit 1;"; $sqlTemp .= " insert into biz_trader_account ( `biz_traderid`, `createtime`,`type`, `money`, `status`,`biz_catalog`,`biz_id`, remark )"; $sqlTemp .= " select :biz_traderid , :nowtime , 1 , :money, 1, 0 , :bizid, :bizremark from dual where ifnull(@handle_id,0)=0;"; $dataset = pdo_query3($sqlTemp, $sqlParam); return true; break; case "1": //商家侧:【废弃】订单支付业务 $bizInfo = pdo_fetch("select * from biz_trader_account where id=" . intval($payBizId)); if (empty($bizInfo)) { throw new GeneralException("", "对应的业务支付记录不存在!"); } if (intval($bizInfo["deleted"]) != 0) { throw new GeneralException("", "对应的业务支付记录已删除!"); } if (intval($bizInfo["type"]) != 0) { throw new GeneralException("", "对应的业务支付记录不是支付记录!"); } if (!(intval($bizInfo["biz_catalog"]) == 1 || intval($bizInfo["biz_catalog"]) == 4)) { throw new GeneralException("", "对应的业务支付记录不是订单支付业务!"); } if (intval($bizInfo["status"]) == 1) { return true; } //已支付 $workInfo = pdo_fetch("select tdwk.* ,btr.biz_traderid, btr.feetotal as pay_feetotal ,btr.plat_fetchmoney,btr.sharer_fetchmoney,btr.salary as wker_salary ,dwk.id as doed_workerid from biz_todowork tdwk inner join biz_trader_recruit btr on btr.id=tdwk.biz_recruitid inner join biz_worker dwk on dwk.id=tdwk.biz_workerid where tdwk.id=" . intval($bizInfo["biz_id"])); if (empty($workInfo)) { throw new GeneralException("", "对应的订单记录不存在或没有关联招聘或没有工人记录信息!"); } if (intval($workInfo["status"] == 5)) { return true; } //已结算 if (!(intval($workInfo["status"]) == 4 || intval($workInfo["status"]) == -5)) { throw new GeneralException("", "此订单不是待结算/拒绝支付状态,请核查!"); } if ($needQuery == true) { require_once WEB_PHY_ROOT . "/base/wxsrv.php"; $wxmina_appid = $bizInfo["wxmina_appid"]; $wxmina_openid = $bizInfo["wxmina_openid"]; $out_trade_no = $bizInfo["biz_idtag"]; $backdata = weixin_orderqueryV3($wxmina_appid, $out_trade_no, null); if ($backdata["trade_state"] == "SUCCESS") { } else { throw new GeneralException("NoPaySuccess", $backdata["trade_state"] . "-" . $backdata["trade_state_desc"]); } } $payfeeTotal = round(floatval($workInfo["pay_feetotal"]), 2); $platerMoney = round(floatval($workInfo["plat_fetchmoney"]), 2); $sharerMoney = round(floatval($workInfo["sharer_fetchmoney"]), 2); $workerMoney = round(floatval($workInfo["wker_salary"]), 2); $sqlParam = array(); $sqlParam[":nowtime"] = time(); $sqlParam[":bizid"] = $bizInfo["id"]; $sqlParam[":wkid"] = $workInfo["id"]; $sqlParam[":biz_traderid"] = $bizInfo["biz_traderid"]; $sqlParam[":biz_roletype"] = $bizInfo["biz_roletype"]; $sqlParam[":biz_userid"] = $bizInfo["biz_userid"]; $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 订单支付结算 \n"; $sqlParam[":bizremark22"] = "[" . date("Y-m-d H:i:s", time()) . "] 订单结算," . $bizInfo["remark"] . " \n"; $sqlTemp = ""; $sqlTemp .= " update biz_trader_account set updatetime=:nowtime,`status`=1 "; //已支付 $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;"; $sqlTemp .= " set @handle_id=0; "; $sqlTemp .= " select @handle_id:=id from biz_todowork where id=:wkid limit 1;"; $sqlTemp .= " update biz_todowork set updatetime=:nowtime,`status`=5 "; //已结算 $sqlTemp .= " ,settled_time=:nowtime,settled_mode=:biz_roletype,settled_userid=:biz_userid"; $sqlTemp .= " ,remark=concat(:bizremark22,ifnull(remark,'')) where id=:wkid;"; //---------------------------------------------------- $sqlParam[":payfeeTotal"] = $payfeeTotal; //订单总费用 $sqlParam[":biz_catalog1"] = intval($bizInfo["biz_catalog"] == 4) ? 7 : 6; //6-订单整体支出;7-平台代支付订单 $sqlTemp .= " insert into biz_trader_account ( `biz_traderid`, `createtime`,`type`, `money`, `status`, `biz_catalog`, `biz_id`, `biz_roletype`, `biz_userid`, remark )"; $sqlTemp .= " select :biz_traderid , :nowtime , 1 , :payfeeTotal, 1, :biz_catalog1 , :bizid, :biz_roletype, :biz_userid, :bizremark from dual where ifnull(@handle_id,0)>0;"; $share_workerid = intval($workInfo["share_workerid"]); if ($share_workerid > 0) { $platerMoney = $platerMoney - $sharerMoney; } $sqlParam[":platerMoney"] = $platerMoney; //平台分成 $sqlTemp .= " insert into biz_trader_account ( deleted, `biz_traderid`, `createtime`,`type`, `money`, `status`, `biz_catalog`, `biz_id`, `biz_roletype`, `biz_userid`, remark )"; $sqlTemp .= " select 9, :biz_traderid , :nowtime , 1 , :platerMoney, 1, 1 , :bizid, :biz_roletype, :biz_userid, :bizremark from dual where ifnull(@handle_id,0)>0;"; if ($share_workerid > 0) { //分享佣金 $sqlParam[":sharerMoney"] = $sharerMoney; $sqlParam[":share_workerid"] = $share_workerid; $sqlTemp .= " insert into biz_trader_account ( deleted, `biz_traderid`, `createtime`,`type`, `money`, `status`, `biz_catalog`, `biz_id`, `biz_roletype`, `biz_userid`, remark )"; $sqlTemp .= " select 9, :biz_traderid , :nowtime , 1 , :sharerMoney, 1, 2 , :bizid, :biz_roletype, :biz_userid, :bizremark from dual where ifnull(@handle_id,0)>0;"; $sqlTemp .= " insert into biz_worker_account ( `biz_workerid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )"; $sqlTemp .= " select :share_workerid , :nowtime , 0 , :sharerMoney, 1, 1 , :bizid, :bizremark from dual where ifnull(@handle_id,0)>0;"; } $sqlParam[":workerMoney"] = $workerMoney; //工人工资 $sqlParam[":doed_workerid"] = intval($workInfo["doed_workerid"]); $sqlTemp .= " insert into biz_trader_account ( deleted, `biz_traderid`, `createtime`,`type`, `money`, `status`, `biz_catalog`, `biz_id`, `biz_roletype`, `biz_userid`, remark )"; $sqlTemp .= " select 9, :biz_traderid , :nowtime , 1 , :workerMoney, 1, 3 , :bizid, :biz_roletype, :biz_userid, :bizremark from dual where ifnull(@handle_id,0)>0;"; $sqlTemp .= " insert into biz_worker_account ( `biz_workerid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )"; $sqlTemp .= " select :doed_workerid , :nowtime , 0 , :workerMoney, 1, 0 , :bizid, :bizremark from dual where ifnull(@handle_id,0)>0;"; $dataset = pdo_query3($sqlTemp, $sqlParam); return true; break; case "11": //商家侧:订单支付业务 NewNew $bizInfo = pdo_fetch("select * from biz_trader_account where id=" . intval($payBizId)); if (empty($bizInfo)) { throw new GeneralException("", "对应的业务支付记录不存在!"); } if (intval($bizInfo["deleted"]) != 0) { throw new GeneralException("", "对应的业务支付记录已删除!"); } if (intval($bizInfo["type"]) != 0) { throw new GeneralException("", "对应的业务支付记录不是支付记录!"); } if (!(intval($bizInfo["biz_catalog"]) == 1)) { throw new GeneralException("", "对应的业务支付记录不是订单支付业务!"); } if (intval($bizInfo["status"]) == 1) { return true; } //已支付 if ($needQuery == true) { require_once WEB_PHY_ROOT . "/base/wxsrv.php"; $wxmina_appid = $bizInfo["wxmina_appid"]; $wxmina_openid = $bizInfo["wxmina_openid"]; //$out_trade_no = $bizInfo["biz_idtag"]; $out_trade_no = !isset($bizInfo["weixin_outtradeno"]) || empty($bizInfo["weixin_outtradeno"]) ? $bizInfo["biz_idtag"] : $bizInfo["weixin_outtradeno"]; $backdata = weixin_orderqueryV3($wxmina_appid, $out_trade_no, null); if ($backdata["trade_state"] == "SUCCESS") { } else { throw new GeneralException("NoPaySuccess", $backdata["trade_state"] . "-" . $backdata["trade_state_desc"]); } } //**********确保支付成功后正常入账*************** $sqlParam = array(); $sqlParam[":nowtime"] = time(); $sqlParam[":accid"] = $bizInfo["id"]; $sqlParam[":accremark1"] = "[" . date("Y-m-d H:i:s", time()) . "] 工单费用差额已支付入账 \n"; $sqlTemp = ""; $sqlTemp .= " update biz_trader_account set updatetime=:nowtime,`status`=1 "; //已支付 $sqlTemp .= " ,remark=concat(:accremark1,ifnull(remark,'')) where id=:accid;"; $dataset = pdo_query3($sqlTemp, $sqlParam); //**********预提取相关信息并构建参数集对象*************** $workInfo = pdo_fetch("select tdwk.* ,btr.begin_datetime as btr_begin_datetime,btr.finish_datetime as btr_finish_datetime ,btr.settle_catalog as btr_settle_catalog ,btr.biz_traderid, btr.feetotal as pay_feetotal ,btr.plat_fetchmoney,btr.sharer_fetchmoney,btr.salary as wker_salary,btr.urgent_level ,dwk.id as doed_workerid from biz_todowork tdwk left join biz_trader_recruit btr on btr.id=tdwk.biz_recruitid left join biz_worker dwk on dwk.id=tdwk.biz_workerid where tdwk.id=" . intval($bizInfo["biz_id"])); if (empty($workInfo)) { throw new GeneralException("", "对应的订单记录不存在!"); } $payfeeTotal = round(floatval($workInfo["pay_feetotal"]), 2); $planDotime = intval($workInfo["todo_begindate"]); $workDateStart = intval($workInfo["btr_begin_datetime"]); $workDateFinish = $workDateStart; if (intval($workInfo["btr_settle_catalog"]) <= 0//普通招聘的多日招聘 && intval($workInfo["btr_begin_datetime"]) < intval($workInfo["btr_finish_datetime"])) { $workDateFinish = intval($workInfo["btr_finish_datetime"]); } if (intval($workInfo["btr_settle_catalog"]) > 0) { $workDateStart = strtotime(date("Y-m-d", $planDotime)); $workDateFinish = strtotime(date("Y-m-d 23:59:59", $planDotime)); } $nowSettleCatalog = intval($workInfo["btr_settle_catalog"]); $plandoDateStart = strtotime(date("Y-m-d", $planDotime)); $plandoDateFinish = strtotime(date("Y-m-d 23:59:59", $planDotime)); $bizArgs = array( "handleMode" => $handleMode, "bizInfo" => $bizInfo, "workInfo" => $workInfo, "payfeeTotal" => $payfeeTotal, "workDateStart" => $workDateStart, "workDateFinish" => $workDateFinish, "plandoDateStart" => $plandoDateStart, "plandoDateFinish" => $plandoDateFinish, ); if ($handleMode == "manhandle") { //加锁模式的余额支付模式,不用再研判了 bizbase_enrollPassHandleCore($bizArgs); } else { //支付完成回调模式下,需加锁即可 $recruitId = intval($workInfo["biz_recruitid"]); $backdata = bizbase_recruitWorkLock($recruitId, $planDotime, $bizArgs, function ($recruitId, $planDotime, $bizArgs, $mainRemain, $dateRemain, $restRemain, $pickDateList, $mainRemain2, $dateRemain2) { $handleMode = $bizArgs["handleMode"]; $bizInfo = $bizArgs["bizInfo"]; $workInfo = $bizArgs["workInfo"]; $denyMsg = ""; if ($mainRemain2 <= 0) { $denyMsg .= "此招聘已录满,已不能再录用"; } if ($dateRemain2 <= 0) { $denyMsg .= "此招聘报名日期已录满,已不能再录用"; } if (empty($denyMsg)) { bizbase_enrollPassHandleCore($bizArgs); } else { $sqlParam = array(); $sqlParam[":nowtime"] = time(); $sqlParam[":accid"] = $bizInfo["id"]; $sqlParam[":bizid"] = $bizInfo["biz_id"]; $sqlParam[":accremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 工单费用支付成功后但已未能录用:{$denyMsg} \n"; $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 未能录用,返还押金:{$denyMsg} \n"; $sqlTemp = ""; if (1 != $workInfo['urgent_level']) { $sqlTemp .= " update biz_trader_account set updatetime=:nowtime "; $sqlTemp .= " ,remark=concat(:accremark,ifnull(remark,'')) where id=:accid;"; $sqlTemp .= " update biz_todowork set updatetime=:nowtime,`status`=-4 "; //被动取消 $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;"; //退还押金 $sqlTemp .= " insert into biz_worker_account ( `biz_workerid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )"; $sqlTemp .= " select biz_workerid , :nowtime , 0 , enroll_premoney, 1, 7 , id, :bizremark "; $sqlTemp .= " from biz_todowork where id=:bizid;"; } $dataset = pdo_query3($sqlTemp, $sqlParam); } }); } return true; break; case "2": //商家侧:微信支付充值 $bizInfo = pdo_fetch("select * from biz_trader_account where id=" . intval($payBizId)); if (empty($bizInfo)) { throw new GeneralException("", "对应的业务支付记录不存在!"); } if (intval($bizInfo["deleted"]) != 0) { throw new GeneralException("", "对应的业务支付记录已删除!"); } if (intval($bizInfo["type"]) != 0) { throw new GeneralException("", "对应的业务支付记录不是支付记录!"); } if (intval($bizInfo["biz_catalog"]) != 2) { throw new GeneralException("", "对应的业务支付记录不是微信支付充值!"); } if (intval($bizInfo["status"]) == 1) { return true; } //已支付 if ($needQuery == true) { require_once WEB_PHY_ROOT . "/base/wxsrv.php"; $wxmina_appid = $bizInfo["wxmina_appid"]; $wxmina_openid = $bizInfo["wxmina_openid"]; $out_trade_no = !isset($bizInfo["weixin_outtradeno"]) || empty($bizInfo["weixin_outtradeno"]) ? $bizInfo["biz_idtag"] : $bizInfo["weixin_outtradeno"]; //$out_trade_no = $bizInfo["biz_idtag"]; $backdata = weixin_orderqueryV3($wxmina_appid, $out_trade_no, null); if ($backdata["trade_state"] == "SUCCESS") { } else { throw new GeneralException("NoPaySuccess", $backdata["trade_state"] . "-" . $backdata["trade_state_desc"]); } } $sqlParam = array(); $sqlParam[":nowtime"] = time(); $sqlParam[":bizid"] = $bizInfo["id"]; $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 微信支付充值成功 \n"; $sqlTemp = ""; $sqlTemp .= " update biz_trader_account set updatetime=:nowtime,`status`=1 "; //已支付 $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;"; $dataset = pdo_query3($sqlTemp, $sqlParam); return true; break; case "3": //会员侧:营销活动支付 $bizInfo = pdo_fetch("select * from biz_worker_account where id=" . intval($payBizId)); if (empty($bizInfo)) { throw new GeneralException("", "对应的业务支付记录不存在!"); } if (intval($bizInfo["deleted"]) != 0) { throw new GeneralException("", "对应的业务支付记录已删除!"); } if (intval($bizInfo["type"]) != 0) { throw new GeneralException("", "对应的业务支付记录不是支付记录!"); } if (intval($bizInfo["biz_catalog"]) != 2) { throw new GeneralException("", "对应的业务支付记录不是营销活动支付记录!"); } if (intval($bizInfo["status"]) == 1) { return true; } //已支付 if ($needQuery == true) { require_once WEB_PHY_ROOT . "/base/wxsrv.php"; $wxmina_appid = $bizInfo["wxmina_appid"]; $wxmina_openid = $bizInfo["wxmina_openid"]; $out_trade_no = !isset($bizInfo["weixin_outtradeno"]) || empty($bizInfo["weixin_outtradeno"]) ? $bizInfo["biz_idtag"] : $bizInfo["weixin_outtradeno"]; //$out_trade_no = $bizInfo["biz_idtag"]; $backdata = weixin_orderqueryV3($wxmina_appid, $out_trade_no, null); if ($backdata["trade_state"] == "SUCCESS") { } else { throw new GeneralException("NoPaySuccess", $backdata["trade_state"] . "-" . $backdata["trade_state_desc"]); } } $sqlParam = array(); $sqlParam[":nowtime"] = time(); $sqlParam[":bizid"] = $bizInfo["id"]; $sqlParam[":bmaoid"] = $bizInfo["biz_id"]; $sqlParam[":biz_workerid"] = $bizInfo["biz_workerid"]; $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 营销活动支付成功 \n"; $sqlTemp = ""; $sqlTemp .= " update biz_worker_account set updatetime=:nowtime,`status`=1 "; //已支付 $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;"; $sqlTemp .= " update biz_market_activity_order set updatetime=:nowtime,`status`=1 "; //已支付 $sqlTemp .= " ,payid=:bizid, paytime=:nowtime "; $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bmaoid and `status`=0;"; $sqlTemp .= " select @price:=price from biz_market_activity_order where id=:bmaoid;"; $sqlTemp .= " set @handle_id=0; "; $sqlTemp .= " select @handle_id:=id from biz_worker_account where biz_workerid=:biz_workerid and `type`=1 and `biz_catalog`=1 and `biz_id`=:bmaoid and `status`=1 limit 1;"; $sqlTemp .= " insert into biz_worker_account ( `biz_workerid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )"; //$sqlTemp .= " select :biz_workerid , :nowtime , 1 , @price, 1, 1 , :bmaoid, :bizremark from dual where ifnull(@handle_id,0)=0;"; $sqlTemp .= " select :biz_workerid , :nowtime , 1 , @price, 1, 10 , :bmaoid, :bizremark from dual where ifnull(@handle_id,0)=0;"; $dataset = pdo_query3($sqlTemp, $sqlParam); return true; break; case "4": //会员侧:微信支付充值 $bizInfo = pdo_fetch("select * from biz_worker_account where id=" . intval($payBizId)); if (empty($bizInfo)) { throw new GeneralException("", "对应的业务支付记录不存在!"); } if (intval($bizInfo["deleted"]) != 0) { throw new GeneralException("", "对应的业务支付记录已删除!"); } if (intval($bizInfo["type"]) != 0) { throw new GeneralException("", "对应的业务支付记录不是支付记录!"); } if (intval($bizInfo["biz_catalog"]) != 3) { throw new GeneralException("", "对应的业务支付记录不是微信支付充值!"); } if (intval($bizInfo["status"]) == 1) { return true; } //已支付 if ($needQuery == true) { require_once WEB_PHY_ROOT . "/base/wxsrv.php"; $wxmina_appid = $bizInfo["wxmina_appid"]; $wxmina_openid = $bizInfo["wxmina_openid"]; //$out_trade_no = $bizInfo["biz_idtag"]; $out_trade_no = !isset($bizInfo["weixin_outtradeno"]) || empty($bizInfo["weixin_outtradeno"]) ? $bizInfo["biz_idtag"] : $bizInfo["weixin_outtradeno"]; $backdata = weixin_orderqueryV3($wxmina_appid, $out_trade_no, null); if ($backdata["trade_state"] == "SUCCESS") { } else { throw new GeneralException("NoPaySuccess", $backdata["trade_state"] . "-" . $backdata["trade_state_desc"]); } } $sqlParam = array(); $sqlParam[":nowtime"] = time(); $sqlParam[":bizid"] = $bizInfo["id"]; $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 微信支付充值成功 \n"; $sqlTemp = ""; $sqlTemp .= " update biz_worker_account set updatetime=:nowtime,`status`=1 "; //已支付 $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;"; $dataset = pdo_query3($sqlTemp, $sqlParam); return true; break; case "5": //会员侧:会员报名支付押金 $bizInfo = pdo_fetch("select * from biz_worker_account where id=" . intval($payBizId)); if (empty($bizInfo)) { throw new GeneralException("", "对应的业务支付记录不存在!"); } if (intval($bizInfo["deleted"]) != 0) { throw new GeneralException("", "对应的业务支付记录已删除!"); } if (intval($bizInfo["type"]) != 0) { throw new GeneralException("", "对应的业务支付记录不是支付记录!"); } if (intval($bizInfo["biz_catalog"]) != 4) { throw new GeneralException("", "对应的业务支付记录不是会员报名支付押金!"); } if (intval($bizInfo["status"]) == 1) { return true; } //已支付 if ($needQuery == true) { require_once WEB_PHY_ROOT . "/base/wxsrv.php"; $wxmina_appid = $bizInfo["wxmina_appid"]; $wxmina_openid = $bizInfo["wxmina_openid"]; $out_trade_no = !isset($bizInfo["weixin_outtradeno"]) || empty($bizInfo["weixin_outtradeno"]) ? $bizInfo["biz_idtag"] : $bizInfo["weixin_outtradeno"]; $backdata = weixin_orderqueryV3($wxmina_appid, $out_trade_no, null); if ($backdata["trade_state"] == "SUCCESS") { } else { throw new GeneralException("NoPaySuccess", $backdata["trade_state"] . "-" . $backdata["trade_state_desc"]); } } if ($handleMode == "singleEnroll") { //加锁模式的余额支付模式,不用再研判了 $sqlParam = array(); $sqlParam[":nowtime"] = time(); $sqlParam[":accid"] = $bizInfo["id"]; $sqlParam[":bizid"] = $bizInfo["biz_id"]; $sqlParam[":biz_workerid"] = $bizInfo["biz_workerid"]; $sqlParam[":accremark1"] = "[" . date("Y-m-d H:i:s", time()) . "] 会员报名押金已支付成功 \n"; $sqlParam[":accremark2"] = "[" . date("Y-m-d H:i:s", time()) . "] 会员报名押金已冻结成功 \n"; $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 会员报名押金已支付并冻结成功,待录用 \n"; $sqlTemp = ""; $sqlTemp .= " update biz_worker_account set updatetime=:nowtime,`status`=1 "; //已支付 $sqlTemp .= " ,remark=concat(:accremark1,ifnull(remark,'')) where id=:accid;"; $sqlTemp .= " select @price:=ifnull(enroll_premoney,0) from biz_todowork where id=:bizid;"; $sqlTemp .= " set @handle_id=0; "; $sqlTemp .= " select @handle_id:=id from biz_worker_account where biz_workerid=:biz_workerid and `type`=1 and `biz_catalog`=2 and `biz_id`=:bizid and `status`=1 limit 1;"; $sqlTemp .= " insert into biz_worker_account ( `biz_workerid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )"; $sqlTemp .= " select :biz_workerid , :nowtime , 1 , @price, 1, 2 , :bizid, :accremark2 from dual where ifnull(@handle_id,0)=0;"; $sqlTemp .= " update biz_todowork set updatetime=:nowtime,`status`=1 "; //押金已支付冻结待录用 $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;"; $sqlTemp .= " insert into biz_message_queue( createtime, biz_catalog, biz_id)"; $sqlTemp .= " select :nowtime, 1, :bizid from dual where 1=1;"; $dataset = pdo_query3($sqlTemp, $sqlParam); } else { //支付完成回调模式下,需加锁研判招聘是否还可报名(状态有效/是否已录满/报满) $sqlParam = array(); $sqlParam[":nowtime"] = time(); $sqlParam[":accid"] = $bizInfo["id"]; $sqlParam[":bizid"] = $bizInfo["biz_id"]; $sqlParam[":accremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 会员报名押金已支付成功 \n"; $sqlTemp = ""; $sqlTemp .= " update biz_worker_account set updatetime=:nowtime,`status`=1 "; //已支付 $sqlTemp .= " ,remark=concat(:accremark,ifnull(remark,'')) where id=:accid;"; $sqlTemp .= " select * from biz_todowork where id=:bizid;"; $dataset = pdo_query3($sqlTemp, $sqlParam); //先保证支付的正常入账 $tdwkInfo = $dataset[count($dataset) - 1][0]; if (empty($tdwkInfo)) { throw new GeneralException("", "会员报名押金支付处理异常"); } $recruitId = intval($tdwkInfo["biz_recruitid"]); $recruitInfo = pdo_fetch("select * from biz_trader_recruit where id=" . intval($recruitId)); if (empty($recruitInfo)) { throw new GeneralException("", "没有定位到招聘记录信息,请核查!"); } $planDotime = intval($tdwkInfo["todo_begindate"]); $bizWorker = pdo_fetch("select wk.*,bu.id as buid,bu.mobile,bu.subsystem from biz_worker wk left join base_user bu on bu.id=wk.base_userid where wk.id=:wkid limit 1;", array(":wkid" => $bizInfo["biz_workerid"])); if (empty($bizWorker)) { throw new GeneralException("", "没有定位到会员记录信息,请核查!"); } $bizArgs = array("handleMode" => $handleMode, "bizInfo" => $bizInfo, "recruitInfo" => $recruitInfo, "bizWorker" => $bizWorker); $backdata = bizbase_recruitWorkLock($recruitId, $planDotime, $bizArgs, function ($recruitId, $planDotime, $bizArgs, $mainRemain, $dateRemain, $restRemain, $pickDateList, $mainRemain2, $dateRemain2) { $handleMode = $bizArgs["handleMode"]; $bizInfo = $bizArgs["bizInfo"]; $recruitInfo = $bizArgs["recruitInfo"]; $bizWorker = $bizArgs["bizWorker"]; $denyMsg = ""; if ($mainRemain2 <= 0) { $denyMsg .= "此招聘已录满,已不能再报名"; } if ($mainRemain <= 0) { $denyMsg .= "此招聘已报满,暂时不能报名"; } if ($dateRemain2 <= 0) { $denyMsg .= "此招聘报名日期已录满,已不能再报名"; } if ($dateRemain <= 0) { $denyMsg .= "此招聘报名日期已报满,暂时不能报名"; } try { bizbase_todoWorkEnrollVerify($handleMode, $bizWorker, $recruitInfo, $planDotime); } catch (Throwable $e) { $denyMsg .= $e->getMessage(); } if (empty($denyMsg)) { $sqlParam = array(); $sqlParam[":nowtime"] = time(); $sqlParam[":bizid"] = $bizInfo["biz_id"]; $sqlParam[":biz_workerid"] = $bizInfo["biz_workerid"]; $sqlParam[":accremark2"] = "[" . date("Y-m-d H:i:s", time()) . "] 会员报名押金已冻结成功 \n"; $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 会员报名押金已支付并冻结成功,待录用 \n"; $sqlTemp = ""; $sqlTemp .= " select @price:=ifnull(enroll_premoney,0) from biz_todowork where id=:bizid;"; $sqlTemp .= " set @handle_id=0; "; $sqlTemp .= " select @handle_id:=id from biz_worker_account where biz_workerid=:biz_workerid and `type`=1 and `biz_catalog`=2 and `biz_id`=:bizid and `status`=1 limit 1;"; $sqlTemp .= " insert into biz_worker_account ( `biz_workerid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )"; $sqlTemp .= " select :biz_workerid , :nowtime , 1 , @price, 1, 2 , :bizid, :accremark2 from dual where ifnull(@handle_id,0)=0;"; $sqlTemp .= " update biz_todowork set updatetime=:nowtime,`status`=1 "; //押金已支付冻结待录用 $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;"; $sqlTemp .= " insert into biz_message_queue( createtime, biz_catalog, biz_id)"; $sqlTemp .= " select :nowtime, 1, :bizid from dual where 1=1;"; $dataset = pdo_query3($sqlTemp, $sqlParam); } else { $sqlParam = array(); $sqlParam[":nowtime"] = time(); $sqlParam[":accid"] = $bizInfo["id"]; $sqlParam[":bizid"] = $bizInfo["biz_id"]; $sqlParam[":accremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 押金支付成功后但已不能再报名:{$denyMsg} \n"; $sqlParam[":bizremark"] = $sqlParam[":accremark"]; $sqlTemp = ""; $sqlTemp .= " update biz_worker_account set updatetime=:nowtime "; $sqlTemp .= " ,remark=concat(:accremark,ifnull(remark,'')) where id=:accid;"; $sqlTemp .= " update biz_todowork set updatetime=:nowtime,`status`=0 "; $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;"; $dataset = pdo_query3($sqlTemp, $sqlParam); } }); } return true; break; default:throw new GeneralException("", "不支持的payBizCatalog!"); } } function bizbase_enrollPassHandleCore($bizArgs) { $bizInfo = $bizArgs["bizInfo"]; $workInfo = $bizArgs["workInfo"]; $sqlParam = array(); $sqlParam[":nowtime"] = time(); $sqlParam[":bizid"] = $bizInfo["biz_id"]; $sqlParam[":biz_traderid"] = $bizInfo["biz_traderid"]; $sqlParam[":biz_workerid"] = $workInfo["biz_workerid"]; $sqlParam[":feetotal"] = $bizArgs["payfeeTotal"]; $sqlParam[":workDateStart"] = $bizArgs["workDateStart"]; $sqlParam[":workDateFinish"] = $bizArgs["workDateFinish"]; $sqlParam[":plandoDateStart"] = $bizArgs["plandoDateStart"]; $sqlParam[":plandoDateFinish"] = $bizArgs["plandoDateFinish"]; $sqlParam[":accremark2"] = "[" . date("Y-m-d H:i:s", time()) . "] 工单费用已冻结成功 \n"; $sqlParam[":bizremark"] = "[" . date("Y-m-d H:i:s", time()) . "] 报名已录用,工单费用已支付并冻结成功 \n"; $sqlParam[":cancel_remark"] = "[" . date("Y-m-d H:i:s", time()) . "] 已被其他商家及时录取,本待录用申请被取消,押金退还 \n"; $sqlTemp = ""; $sqlTemp .= " set @handle_id=0; "; $sqlTemp .= " select @handle_id:=id from biz_trader_account where biz_traderid=:biz_traderid and `type`=1 and `biz_catalog`=8 and `biz_id`=:bizid and `status`=1 limit 1;"; $sqlTemp .= " insert into biz_trader_account ( `biz_traderid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )"; $sqlTemp .= " select :biz_traderid , :nowtime , 1 , :feetotal, 1, 8 , :bizid, :accremark2 from dual where ifnull(@handle_id,0)=0;"; $sqlTemp .= " update biz_todowork set updatetime=:nowtime,`status`=2 "; //工单费用已支付并冻结成功 录用成功 $sqlTemp .= " ,remark=concat(:bizremark,ifnull(remark,'')) where id=:bizid;"; if (1 != $workInfo['urgent_level']) { //同天其他工单取消处理 $sqlTemp .= " insert into biz_worker_account ( `biz_workerid`, `createtime`,`type`, `money`, `status`, `biz_catalog`,`biz_id`, remark )"; $sqlTemp .= " select tdwk.biz_workerid , :nowtime , 0 , tdwk.enroll_premoney, 1, 7 , tdwk.id, :cancel_remark "; $sqlTemp .= " from biz_todowork tdwk"; $sqlTemp .= " left join biz_trader_recruit btr on btr.id=tdwk.biz_recruitid "; //大条件:同会员,待录用态,非本单 //时间冲突:它单工作日期(多天的开始日期)与当单冲突检测 // 它单工作日期(多天的开始日期)与当单工作时间段的冲突检测 // 它单为多天模式下其时间跨度涵盖当单的时间冲突检测 $sqlTempKKK = " where tdwk.id<>:bizid and tdwk.biz_workerid=:biz_workerid and tdwk.`status`=1 and( (tdwk.todo_begindate>=:plandoDateStart and tdwk.todo_begindate<=:plandoDateFinish) or(tdwk.todo_begindate>=:workDateStart and tdwk.todo_begindate<=:workDateFinish) or( btr.settle_catalog<=0 and btr.finish_datetime>btr.begin_datetime and ( (btr.begin_datetime>=:workDateStart and btr.begin_datetime<=:workDateFinish) or(btr.begin_datetime<=:workDateStart and btr.finish_datetime>=:workDateFinish) or(btr.finish_datetime>=:workDateStart and btr.finish_datetime<=:workDateFinish) )) ) "; $sqlTemp .= $sqlTempKKK . ";"; $sqlTemp .= " update biz_todowork tdwk"; $sqlTemp .= " left join biz_trader_recruit btr on btr.id=tdwk.biz_recruitid "; $sqlTemp .= " set tdwk.updatetime=:nowtime, tdwk.`status`=-4, tdwk.`teamstatus`=-4 "; //-4 被动取消 $sqlTemp .= " , tdwk.remark=concat(:cancel_remark,ifnull(tdwk.remark,'')), tdwk.teamremark=concat(:cancel_remark,ifnull(tdwk.teamremark,'')) "; $sqlTemp .= $sqlTempKKK . ";"; } //录用后消息通知 $sqlTemp .= " insert into biz_message_queue( createtime, biz_catalog, biz_id)"; $sqlTemp .= " select :nowtime, 0, :bizid from dual where 1=1;"; //var_dump($sqlTemp);exit; $dataset = pdo_query3($sqlTemp, $sqlParam); } /***************** 可核查账号是否处于黑名单/停用状态;若是则可选抛出异常或返回false; 正常情况则返回$bizWorkerServicer实体记录信息,用于后续逻辑处理 另外,若已过停用截至日期,则自动重置回非停用状态! bizbase_verifyWorkerAccount("biz_worker/biz_servicer",$bizWorkerServicer,false/true); */ function bizbase_verifyUserAccount($bizWorkerTrader, $throwException, $errMsg) { //核查账号是否有效,非停用/非黑名单 if ($bizWorkerTrader["subsystem"] == SUBSYS_LABOUR_MINA) { $tablename = "biz_worker"; } if ($bizWorkerTrader["subsystem"] == SUBSYS_CAPITAL_MINA) { $tablename = "biz_trader"; } switch (intval($bizWorkerTrader["hanging"])) { case 1: //"警告" break; case 2: //"停用一周" case 3: //"停用两周" if ((time() - intval($bizWorkerTrader["hanging_endtime"])) <= 0) { //还处于停用期 if ($throwException) { throw new GeneralException("", " {$errMsg} 账号还处于停用期,停用截至日期:" . date("Y-m-d H:i:s", intval($bizWorkerTrader["hanging_endtime"]))); } return false; } else { //已过停用截至日期,则重置一下状态 if ($tablename != "biz_worker" && $tablename != "biz_trader") { throw new GeneralException("", "输出的tablename参数不正确!"); } pdo_query("update {$tablename} set updatetime=:nowtime, hanging=0, hangopt_remak=concat(:hangopt_remak,ifnull(hangopt_remak,'')) where id=:id;", array( ":nowtime" => time(), ":hangopt_remak" => "[" . date("Y-m-d H:i:s", time()) . "] 已过停用截至日期,重置状态;\n", ":id" => intval($bizWorkerTrader["id"]), )); } break; case 4: //"拉入黑名单" if ($throwException) { throw new GeneralException("", " {$errMsg} 账号处于黑名单状态!"); } return false; break; } // if (intval($bizWorkerTrader["blocked"])>0){ // if ($throwException) throw new GeneralException("", " {$errMsg} 账号处于黑名单状态!"); // else return false; // } return $bizWorkerTrader; } function bizbase_pasttimeTips($time) { $diff = time() - intval($time); if ($diff < 0) { throw new GeneralException("", "时间超前了啊"); } $datetime1 = new \DateTime(date("Y-m-d H:i:s", $time)); $datetime2 = new \DateTime(date("Y-m-d H:i:s", time())); $interval = $datetime1->diff($datetime2); $timeTips['y'] = intval($interval->format('%Y')); if ($timeTips['y'] > 0) { return $timeTips['y'] . "年前"; } $timeTips['m'] = intval($interval->format('%m')); if ($timeTips['m'] > 0) { return $timeTips['m'] . "月前"; } $timeTips['d'] = intval($interval->format('%d')); if ($timeTips['d'] > 0) { return $timeTips['d'] . "天前"; } $timeTips['h'] = intval($interval->format('%H')); if ($timeTips['h'] > 0) { return $timeTips['h'] . "小时前"; } $timeTips['i'] = intval($interval->format('%i')); if ($timeTips['i'] > 0) { return $timeTips['i'] . "分钟前"; } else { return "刚才"; } $timeTips['s'] = intval($interval->format('%s')); $timeTips['a'] = intval($interval->format('%a')); return $timeTips; } /**********************LBS相关逻辑**************************************/ function bizbase_lbsEntityHandle($fromSubSystem, $handleMode, $ajaxdata, $GPC) { switch ($handleMode) { case "fetchAddressByLocation": $coordtype = isset($ajaxdata["coordtype"]) ? $ajaxdata["coordtype"] : $GPC["coordtype"]; if (empty(trim($coordtype))) { $coordtype = ""; } $lat = isset($ajaxdata["lat"]) ? $ajaxdata["lat"] : $GPC["lat"]; if (empty(trim($lat))) { throw new GeneralException("", "没有传递lat参数 !"); } $lng = isset($ajaxdata["lng"]) ? $ajaxdata["lng"] : $GPC["lng"]; if (empty(trim($lng))) { throw new GeneralException("", "没有传递lng参数 !"); } $backdata = basebaidumap_fetchplace($lat, $lng, $coordtype); $backdata = $backdata["addressComponent"]; return $backdata; break; default: throw new GeneralException("", "不支持的handleMode!"); } }