getAutoCheckList(); if(!$coin_release_checkItems){ echo date('Y-m-d H:i:s').':has no need auto check items'.PHP_EOL; exit; } foreach($coin_release_checkItems as $coin_release_check){ $from = ''; $member = CoinReleaseMember::findOne($coin_release_check->mid); if ($member) { $coin_publish_rule = CoinPublishRule::findOne($member->rule_id); if ($coin_publish_rule) { $coin_publish = CoinPublish::findOne($coin_publish_rule->pid); if ($coin_publish) { $from = $coin_publish->address; } } } if (empty($from)) { echo date('Y-m-d H:i:s').':获取提币地址失败!'.PHP_EOL; $coin_release_check->memo = '获取提币地址失败'; $coin_release_check->status = CoinReleaseCheck::STATUS_AUTO_FAILD; //自动审核失败 $coin_release_check->save(); continue; } if(!$coin_publish->auto_check){ echo date('Y-m-d H:i:s').':publish_id['.$coin_publish->id.']未设置自动审核功能'.PHP_EOL; continue; } $auto_check_limit = $coin_publish->auto_check_limit; if($auto_check_limit * 1e8 < $coin_release_check->amount){ echo date('Y-m-d H:i:s').':check_id['.$coin_release_check->id.'],coin['.$coin_release_check->coin.'],amount['.$coin_release_check->amount/1e8.']提币额度大于自动审核额度,不能自动审核'.PHP_EOL; continue; } $res = CoinReleaseCheck::updateAll(['status' => CoinReleaseCheck::STATUS_AUTO_CHECKING], 'id=:id', [':id' => $coin_release_check->id]); if($res){ //开启事务 $trans = CoinReleaseCheck::getDb()->beginTransaction(); $isBlockFalse = false; try { $coin_release_check->check_first_uid = 1; $coin_release_check->check_first_status = 2; $coin_release_check->check_second_uid = 1; $coin_release_check->check_second_status = 2; $coin_release_check->status = CoinReleaseCheck::STATUS_PADDING; //区块链转币 if (strtoupper($coin_release_check->coin) == 'BTY') { $isToken = false; } else { $isToken = true; } $walletpasswd = Yii::$app->redis->get('wallet_passwd'); $node_params = Yii::$app->params['chain_parallel']['secondary']; Chain33Business::unLockWallet($walletpasswd, $node_params); $result = Chain33Business::tradeToken( (int)$coin_release_check->amount, '', 1000, $isToken, trim($coin_release_check->to_address), $coin_release_check->coin, $node_params ); if (is_array($result)) { $isBlockFalse = true; //区块链报错 throw new \Exception($result['msg']); } $coin_release_check->txhash = $result; $coin_release_check->memo = '自动审核成功!'; $coin_release_check->save(); $trans->commit(); echo date('Y-m-d H:i:s').':check_id['.$coin_release_check->id.'],coin['.$coin_release_check->coin.'],amount['.$coin_release_check->amount/1e8.']提币成功'.PHP_EOL; } catch (\Exception $exception) { $trans->rollBack(); echo date('Y-m-d H:i:s').':'.$exception->getMessage().PHP_EOL; if($isBlockFalse){ CoinReleaseCheck::updateAll(['status' => CoinReleaseCheck::STATUS_AUTO_EXCEPTION,'memo' => $exception->getMessage()], 'id=:id', [':id' => $coin_release_check->id]); }else{ CoinReleaseCheck::updateAll(['memo' => $exception->getMessage()], 'id=:id', [':id' => $coin_release_check->id]); } } }else{ echo date('Y-m-d H:i:s').':数据库异常,无法自动审核!'.PHP_EOL; } } } private function getAutoCheckList() { return CoinReleaseCheck::find()->where(['status' => 0,'check_first_status' => 1])->all(); } public function actionConfirmHash() { $coin_release_checkItems = $this->getConfirmList(); if(!$coin_release_checkItems){ echo date('Y-m-d H:i:s').':has no need confirm hash items'.PHP_EOL; exit; } foreach($coin_release_checkItems as $coin_release_check){ $coin_release_list = CoinReleaseList::findOne($coin_release_check->list_id); if ($coin_release_list) { $result = Chain33Business::getTxByHashs([$coin_release_check->txhash]); if ($result['code'] == 0) { $result = $result['result']['txs'][0]['receipt']['ty'] ?? 0; if ($result == 1) { //转账失败 echo date('Y-m-d H:i:s').':check_id['.$coin_release_check->id.'],coin['.$coin_release_check->coin.'],amount['.$coin_release_check->amount/1e8.']转账失败'.PHP_EOL; $coin_release_list->status = 2; $coin_release_check->status = 3; $trans = CoinReleaseCheck::getDb()->beginTransaction(); try { if ($coin_release_check->save() && $coin_release_list->save()) { //退换资产 $coin_release_member = CoinReleaseMember::findOne($coin_release_list->mid); if ($coin_release_member) { $coin_release_member->release += $coin_release_list->amount; $coin_release_member->output -= $coin_release_list->amount; if ($coin_release_member->save()) { $trans->commit(); } } } $trans->rollBack(); } catch (\Exception $exception) { echo date('Y-m-d H:i:s').':'.$exception->getMessage().PHP_EOL; } } elseif ($result == 2) { //转账成功 echo date('Y-m-d H:i:s').':check_id['.$coin_release_check->id.'],coin['.$coin_release_check->coin.'],amount['.$coin_release_check->amount/1e8.']转账成功'.PHP_EOL; $coin_release_list->status = 1; $coin_release_check->status = 4; $trans = CoinReleaseCheck::getDb()->beginTransaction(); try { if ($coin_release_check->save() && $coin_release_list->save()) { $trans->commit(); } $trans->rollBack(); } catch (\Exception $exception) { echo date('Y-m-d H:i:s').':'.$exception->getMessage().PHP_EOL; } } } } } } private function getConfirmList() { return CoinReleaseCheck::find()->where(['status' => 1,'check_first_status' => 2])->all(); } }