$mysql_conf['host'], 'port' => $mysql_conf['port'], 'user' => $mysql_conf['user'], 'passwd' => $mysql_conf['passwd'], 'dbname' => DBNAME_PREFIX . $mysql_conf['instance_id'] )); return $conn; } private function insertNewOrder($conn, $nowtime, $item_list) { $ret = $conn->execScript('INSERT INTO orderinfo(accountid, orderid, itemid, coin, status, '. ' confirmtime, create_time, modify_time, item_list)' . 'VALUES(:accountid, :orderid, :itemid, :coin, :status,' . ' :confirmtime, :create_time, :modify_time, :item_list);', array( ':accountid' => $_REQUEST['account_id'], ':orderid' => $_REQUEST['orderid'], ':coin' => $_REQUEST['amount'], ':itemid' => $_REQUEST['itemid'], ':status' => 1, ':confirmtime' => $nowtime, ':create_time' => $nowtime, ':modify_time' => $nowtime, ':item_list' => json_encode($item_list) )); if (!$ret) { echo json_encode(array( 'errcode' => 2, 'errmsg'=> '服务器内部错误' )); die(); } } private function updateOrder($conn, $item_list) { $ret = $conn->execScript('UPDATE orderinfo SET status=1, item_list=:item_list WHERE orderid=:orderid'. array( ':orderid' => $_REQUEST['orderid'], ':item_list' => json_encode($item_list) )); if (!$ret) { echo json_encode(array( 'errcode' => 2, 'errmsg'=> '服务器内部错误' )); die(); } } private function updateUserTable($conn, $amount) { $ret = $conn->execScript('UPDATE user SET recharge_times_total=recharge_times_total + 1, ' . ' sum_coin=sum_coin + :amount WHERE accountid=:accountid;', array( ':accountid' => $_REQUEST['account_id'], ':amount' => $amount )); } private function addToBuyHis($conn, $nowtime) { $dayseconds = phpcommon\getdayseconds($nowtime); $conn->execScript('INSERT INTO buy_his(accountid, itemid, sum_times, today_times, ' . ' last_buy_time, create_time, modify_time)' . 'VALUES(:accountid, :itemid, 1, 1, ' . ' :last_buy_time, :create_time, :modify_time)' . 'ON DUPLICATE KEY UPDATE sum_times=sum_times + 1, ' . ' modify_time=:modify_time, last_buy_time=:last_buy_time,' . ' today_times=' . " CASE WHEN last_buy_time < $dayseconds THEN 1 ELSE today_times + 1 END;", array( ':accountid' => $_REQUEST['account_id'], ':itemid' => $_REQUEST['itemid'], ':last_buy_time' => $nowtime, ':create_time' => $nowtime, ':modify_time' => $nowtime, )); } public function payNotify() { $params = array( 'account_id' => $_REQUEST['account_id'], 'orderid' => $_REQUEST['orderid'], 'itemid' => $_REQUEST['itemid'], 'itemnum' => $_REQUEST['itemnum'], 'amount' => $_REQUEST['amount'] ); $sign = phpcommon\md5Sign($params, 'fc38349c5d084e920925e614c420be9f', $_REQUEST['timestamp']); if ($sign != $_REQUEST['sign']) { error_log('game2004api payNotify sign error:' + json_encode($_REQUEST)); echo json_encode(array( 'errcode' => 1, 'errmsg'=> '签名校验失败' )); die(); } $addreward = new classes\AddReward(); $item_list = $addreward->addReward($_REQUEST['itemid'], $_REQUEST['itemnum'], $_REQUEST['account_id']); foreach ($item_list as &$value) { $value['itemnum'] = (float)$value['itemnum']; } error_log(json_encode($item_list)); $nowtime = time(); $conn = $this->getMysql($_REQUEST['account_id']); $row = $conn->execQueryOne('SELECT orderid, status FROM orderinfo WHERE orderid=:orderid;', array( ':orderid' => $_REQUEST['orderid'] )); if (!$row) { $this->insertNewOrder($conn, $nowtime, $item_list); } else { if ($row['status'] == 1) { echo json_encode(array( 'errcode' => 0, 'errmsg'=> '' )); die(); } $this->updateOrder($conn, $item_list); } $this->updateUserTable($conn, $_REQUEST['amount']); $this->addToBuyHis($conn, $nowtime); echo json_encode(array( 'errcode' => 0, 'errmsg'=> '' )); } }