ep(1000); } return date('YmdHis').bin2hex(random_bytes(4)); } function pay_money_equals($left, $right) { return sprintf('%.2f', floatval($left)) === sprintf('%.2f', floatval($right)); } function pay_codepay_build_sign($data, $key) { ksort($data); reset($data); $sign = ''; foreach($data as $name => $value) { if($value === '' || $name == 'sign' || $name == 'sign_type') continue; if($sign !== '') $sign .= '&'; $sign .= $name.'='.$value; } return md5($sign.$key); } function pay_codepay_verify($data, $key) { if(empty($data['sign'])) return FALSE; return pay_codepay_build_sign($data, $key) === $data['sign']; } function pay_alipay_service($pay_alipay, $need_public_key = FALSE, $timeout = '3m') { global $kv_pay; $service = new PayAlipayService($need_public_key ? array_value($pay_alipay, 'pay_alipay_publickey') : FALSE, $timeout); $service->setAppid(array_value($pay_alipay, 'pay_alipay_appid')); $service->setNotifyUrl(pay_callback_base(is_array($kv_pay) ? $kv_pay : array()).url('paynotify')); $service->setRsaPrivateKey(array_value($pay_alipay, 'pay_alipay_privatekey')); return $service; } function pay_order_lock($paylog, $time) { if(empty($paylog)) return FALSE; $status = intval(array_value($paylog, 'status', 0)); if($status === 1) return TRUE; if($status === 3) return FALSE; if($status === 4) { $lock_timeout = intval(array_value($paylog, 'update_time', 0)); if($lock_timeout > 0 && $lock_timeout + 300 > $time) return 'processing'; $r = db_update('paylog', array('id' => $paylog['id'], 'status' => 4, 'update_time' => array('<=' => max(0, $time - 300))), array('update_time' => $time)); if($r === FALSE) return FALSE; if(intval($r) > 0) { $paylog['_origin_status'] = 0; $paylog['status'] = 4; return $paylog; } return 'processing'; } $origin_status = in_array($status, array(0, 2)) ? $status : 0; $r = db_update('paylog', array('id' => $paylog['id'], 'status' => array(0, 2)), array('status' => 4, 'update_time' => $time)); if($r === FALSE) return FALSE; if(intval($r) === 0) { $fresh = db_find_one('paylog', array('id' => $paylog['id'])); if(empty($fresh)) return FALSE; $fresh_status = intval(array_value($fresh, 'status', 0)); if($fresh_status === 1) return TRUE; if($fresh_status === 4) return 'processing'; return FALSE; } $paylog['_origin_status'] = $origin_status; $paylog['status'] = 4; return $paylog; } function pay_txn_begin() { global $db; if(empty($db) || !method_exists($db, 'connect_master')) return FALSE; $db->connect_master(); if(empty($db->wlink)) return FALSE; try { if(method_exists($db->wlink, 'inTransaction') && $db->wlink->inTransaction()) return 0; return $db->wlink->beginTransaction() ? 1 : FALSE; } catch(Exception $e) { return FALSE; } } function pay_txn_commit($state) { global $db; if($state !== 1) return TRUE; if(empty($db) || empty($db->wlink)) return FALSE; try { return $db->wlink->commit(); } catch(Exception $e) { return FALSE; } } function pay_txn_rollback($state) { global $db; if($state !== 1) return TRUE; if(empty($db) || empty($db->wlink)) return FALSE; try { if(method_exists($db->wlink, 'inTransaction') && !$db->wlink->inTransaction()) return TRUE; return $db->wlink->rollBack(); } catch(Exception $e) { return FALSE; } } function pay_order_complete($paylog, $time) { if(empty($paylog)) return FALSE; $locked = pay_order_lock($paylog, $time); if($locked === TRUE) return TRUE; if($locked === 'processing') return 'processing'; if($locked === FALSE) return FALSE; $origin_status = intval(array_value($locked, '_origin_status', 0)); $transaction_state = pay_txn_begin(); if($transaction_state === FALSE) { db_update('paylog', array('id' => $locked['id']), array('status' => $origin_status, 'update_time' => $time)); return FALSE; } try { $order_type = pay_order_type_resolve($locked); if($order_type == 'vip') { if(!function_exists('vip_open_direct')) { throw new Exception('vip_open_direct missing'); } $meta = pay_parse_order_data($locked); $buy_type = array_value($meta, 'buy_type', 'month'); $buy_num = max(1, intval(array_value($meta, 'buy_num', 1))); $r = vip_open_direct($locked['uid'], $buy_num, $buy_type, $locked['money'], FALSE); } else { $r = db_update('user', array('uid' => $locked['uid']), array($locked['credit_type'].'+' => $locked['credit'])); } if($r === FALSE) { throw new Exception('order business apply failed'); } $r = db_update('paylog', array('id' => $locked['id'], 'status' => 4), array('status' => 1, 'update_time' => $time)); if($r === FALSE || intval($r) === 0) { throw new Exception('paylog finish failed'); } if(pay_txn_commit($transaction_state) === FALSE) { throw new Exception('pay transaction commit failed'); } return TRUE; } catch(Exception $e) { pay_txn_rollback($transaction_state); db_update('paylog', array('id' => $locked['id']), array('status' => $origin_status, 'update_time' => $time)); error_log('pay_order_complete failed. order:'.array_value($locked, 'pay_order', '').' err:'.$e->getMessage()); return FALSE; } } function pay_order_reset($paylog, $time = 0) { if(empty($paylog)) return FALSE; $id = intval(array_value($paylog, 'id', 0)); $id <= 0 AND $id = intval(array_value($paylog, 'pay_id', 0)); if($id <= 0) return FALSE; $time = intval($time); $time <= 0 AND $time = time(); $fresh = db_find_one('paylog', array('id' => $id)); if(empty($fresh)) return FALSE; $status = intval(array_value($fresh, 'status', 0)); if($status === 4) return 'processing'; if($status === 3) return TRUE; if($status !== 1) { $r = db_update('paylog', array('id' => $id, 'status' => array(0, 2)), array('status' => 3, 'update_time' => $time)); if($r === FALSE) return FALSE; if(intval($r) > 0) return TRUE; $latest = db_find_one('paylog', array('id' => $id)); if(empty($latest)) return FALSE; $latest_status = intval(array_value($latest, 'status', 0)); if($latest_status === 3) return TRUE; if($latest_status === 4) return 'processing'; return FALSE; } if(pay_order_type_resolve($fresh) == 'vip') return FALSE; $locked = db_update('paylog', array('id' => $id, 'status' => 1), array('status' => 4, 'update_time' => $time)); if($locked === FALSE) return FALSE; if(intval($locked) === 0) { $latest = db_find_one('paylog', array('id' => $id)); if(empty($latest)) return FALSE; $latest_status = intval(array_value($latest, 'status', 0)); if($latest_status === 3) return TRUE; if($latest_status === 4) return 'processing'; return FALSE; } $transaction_state = pay_txn_begin(); if($transaction_state === FALSE) { db_update('paylog', array('id' => $id), array('status' => 1, 'update_time' => $time)); return FALSE; } try { $credit = intval(array_value($fresh, 'credit', 0)); $credit_type = array_value($fresh, 'credit_type', ''); in_array($credit_type, array('credits', 'golds', 'rmbs')) OR $credit_type = 'golds'; if($credit > 0) { $cond = array('uid' => intval($fresh['uid'])); $cond[$credit_type] = array('>=' => $credit); $r = db_update('user', $cond, array($credit_type.'-' => $credit)); if($r === FALSE || intval($r) === 0) { throw new Exception('credit_not_enough'); } } $r = db_update('paylog', array('id' => $id, 'status' => 4), array('status' => 3, 'update_time' => $time)); if($r === FALSE || intval($r) === 0) { throw new Exception('paylog_reset_failed'); } if(pay_txn_commit($transaction_state) === FALSE) { throw new Exception('txn_commit_failed'); } return TRUE; } catch(Exception $e) { pay_txn_rollback($transaction_state); db_update('paylog', array('id' => $id), array('status' => 1, 'update_time' => $time)); $message = $e->getMessage(); if($message == 'credit_not_enough') return 'credit_not_enough'; error_log('pay_order_reset failed. order:'.array_value($fresh, 'pay_order', '').' err:'.$message); return FALSE; } } function pay_d_alipay_doPay($pay_money = 0, $pay_alipay = array(), $paydata = array()) { global $kv_pay; $paydata = empty($paydata) ? $_GET : $paydata; $order_type = pay_order_type_resolve($paydata); ($order_type != 'vip' && $pay_money < $kv_pay['pay_other_setup']['pay_small']) AND message('money', lang('pay_small', array('money' => $kv_pay['pay_other_setup']['pay_small']))); empty($pay_alipay['pay_alipay_appid']) AND message(-1, '支付宝 APPID 不能为空'); empty($pay_alipay['pay_alipay_publickey']) AND message(-1, '支付宝公钥不能为空'); empty($pay_alipay['pay_alipay_privatekey']) AND message(-1, '支付宝私钥不能为空'); $aliPay = pay_alipay_service($pay_alipay, FALSE, '3m'); $aliPay->setTotalFee($pay_money); $aliPay->setOutTradeNo($paydata['pay_order']); $aliPay->setOrderName($paydata['uid'].' - '.pay_build_order_title($paydata)); $result = $aliPay->doPay(); $result = $result['alipay_trade_precreate_response']; $result['code'] == '40002' AND message(-1, $result['sub_msg']); $result['code'] == '40001' AND message(-1, $result['sub_msg']); db_insert('paylog', paylog_prepare_insert(array( 'uid' => $paydata['uid'], 'pay_order' => $result['out_trade_no'], 'money' => $paydata['money'], 'credit' => $paydata['credit'], 'credit_type' => $paydata['credit_type'], 'pay_type' => $paydata['pay_type'], 'create_time' => $paydata['create_time'], 'status' => 0, 'pay_url' => $result['qr_code'], ), $paydata)); $url = pay_url_append_query(url('my-buy'), 'log_order='.$result['out_trade_no']); header("Location:{$url}"); } if(!function_exists('pay_checkbox_multiple')) { function pay_checkbox_multiple($name, $arr, $checked = array()) { $s = ''; foreach($arr as $value => $text) { $ischecked = in_array($value, $checked); $add = $ischecked ? ' checked="checked"' : ''; $s .= ''; } return $s; } } function paylog__delete($id) { return db_delete('paylog', array('id' => $id)); } function pay_read_by_kami($kami) { return db_find_one('paykami', array('kami_cdkey' => $kami)); } ?>
Error[2]: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time, File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 189
File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 189, ini_set(session.name , bbs_sid)
File: /www/wwwroot/xiuno/tmp/index.inc.php, Line: 12, sess_start()
File: /www/wwwroot/xiuno/index.php, Line: 52, include(/www/wwwroot/xiuno/tmp/index.inc.php)
Error[2]: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time, File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 191
File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 191, ini_set(session.use_cookies , On)
File: /www/wwwroot/xiuno/tmp/index.inc.php, Line: 12, sess_start()
File: /www/wwwroot/xiuno/index.php, Line: 52, include(/www/wwwroot/xiuno/tmp/index.inc.php)
Error[2]: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time, File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 192
File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 192, ini_set(session.use_only_cookies , On)
File: /www/wwwroot/xiuno/tmp/index.inc.php, Line: 12, sess_start()
File: /www/wwwroot/xiuno/index.php, Line: 52, include(/www/wwwroot/xiuno/tmp/index.inc.php)
Error[2]: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time, File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 193
File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 193, ini_set(session.cookie_domain , )
File: /www/wwwroot/xiuno/tmp/index.inc.php, Line: 12, sess_start()
File: /www/wwwroot/xiuno/index.php, Line: 52, include(/www/wwwroot/xiuno/tmp/index.inc.php)
Error[2]: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time, File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 194
File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 194, ini_set(session.cookie_path , )
File: /www/wwwroot/xiuno/tmp/index.inc.php, Line: 12, sess_start()
File: /www/wwwroot/xiuno/index.php, Line: 52, include(/www/wwwroot/xiuno/tmp/index.inc.php)
Error[2]: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time, File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 195
File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 195, ini_set(session.cookie_secure , Off)
File: /www/wwwroot/xiuno/tmp/index.inc.php, Line: 12, sess_start()
File: /www/wwwroot/xiuno/index.php, Line: 52, include(/www/wwwroot/xiuno/tmp/index.inc.php)
Error[2]: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time, File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 196
File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 196, ini_set(session.cookie_lifetime , 8640000)
File: /www/wwwroot/xiuno/tmp/index.inc.php, Line: 12, sess_start()
File: /www/wwwroot/xiuno/index.php, Line: 52, include(/www/wwwroot/xiuno/tmp/index.inc.php)
Error[2]: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time, File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 197
File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 197, ini_set(session.cookie_httponly , On)
File: /www/wwwroot/xiuno/tmp/index.inc.php, Line: 12, sess_start()
File: /www/wwwroot/xiuno/index.php, Line: 52, include(/www/wwwroot/xiuno/tmp/index.inc.php)
Error[2]: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time, File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 199
File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 199, ini_set(session.gc_maxlifetime , 3600)
File: /www/wwwroot/xiuno/tmp/index.inc.php, Line: 12, sess_start()
File: /www/wwwroot/xiuno/index.php, Line: 52, include(/www/wwwroot/xiuno/tmp/index.inc.php)
Error[2]: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time, File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 200
File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 200, ini_set(session.gc_probability , 1)
File: /www/wwwroot/xiuno/tmp/index.inc.php, Line: 12, sess_start()
File: /www/wwwroot/xiuno/index.php, Line: 52, include(/www/wwwroot/xiuno/tmp/index.inc.php)
Error[2]: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time, File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 201
File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 201, ini_set(session.gc_divisor , 500)
File: /www/wwwroot/xiuno/tmp/index.inc.php, Line: 12, sess_start()
File: /www/wwwroot/xiuno/index.php, Line: 52, include(/www/wwwroot/xiuno/tmp/index.inc.php)
Error[2]: session_set_save_handler(): Cannot change save handler when headers already sent, File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 203
File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 203, session_set_save_handler(sess_open , sess_close , sess_read , sess_write , sess_destroy , sess_gc)
File: /www/wwwroot/xiuno/tmp/index.inc.php, Line: 12, sess_start()
File: /www/wwwroot/xiuno/index.php, Line: 52, include(/www/wwwroot/xiuno/tmp/index.inc.php)
Error[2]: session_start(): Cannot start session when headers already sent, File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 210
File: /www/wwwroot/xiuno/tmp/model_session.func.php, Line: 210, session_start()
File: /www/wwwroot/xiuno/tmp/index.inc.php, Line: 12, sess_start()
File: /www/wwwroot/xiuno/index.php, Line: 52, include(/www/wwwroot/xiuno/tmp/index.inc.php)

Fatal error: Uncaught Error: Call to undefined function runtime_init() in /www/wwwroot/xiuno/tmp/index.inc.php:46 Stack trace: #0 /www/wwwroot/xiuno/index.php(52): include() #1 {main} thrown in /www/wwwroot/xiuno/tmp/index.inc.php on line 46