PageRenderTime 44ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/u/require/userpay/userpay.php

https://bitbucket.org/johnroyer/phpwind8.7
PHP | 437 lines | 371 code | 43 blank | 23 comment | 95 complexity | ab3f159a791e2dda9be20f276d31eb42 MD5 | raw file
  1. <?php
  2. !defined('R_P') && exit('Forbidden');
  3. $db_menuinit .= ",'td_userinfomore' : 'menu_userinfomore'";
  4. require_once(R_P.'require/credit.php');
  5. $creditdb = array(
  6. 'money' => $winddb['money'],
  7. 'rvrc' => $userrvrc,
  8. 'credit' => $winddb['credit'],
  9. 'currency' => $winddb['currency']
  10. );
  11. $creditdb += (array)$credit->get($winduid,'CUSTOM');
  12. /*SEO*/
  13. bbsSeoSettings();
  14. S::gp(array('action'));
  15. require_once(R_P . 'require/showimg.php');
  16. list($faceurl) = showfacedesign($winddb['icon'], 1, 's');
  17. $pro_tab = 'userpay';
  18. if (empty($action)) {
  19. $orderdb = array();
  20. $query = $db->query("SELECT * FROM pw_clientorder WHERE uid=" . S::sqlEscape($winduid) . " ORDER BY date DESC LIMIT 5");
  21. while ($rt = $db->fetch_array($query)) {
  22. $rt['date'] = get_date($rt['date']);
  23. $orderdb[] = $rt;
  24. }
  25. require_once GetLang('logtype');
  26. $query = $db->query("SELECT * FROM pw_creditlog WHERE uid=". S::sqlEscape($winduid) . " ORDER BY id DESC LIMIT 5");
  27. while ($rt = $db->fetch_array($query)) {
  28. $rt['adddate'] = get_date($rt['adddate']);
  29. $rt['descrip'] = descriplog($rt['descrip']);
  30. $logdb[] = $rt;
  31. }
  32. !$db_creditpay && $db_creditpay = array();
  33. $paycredit = key($db_creditpay);
  34. $pay_link = "<span class=\"btn\"><span><button onClick=\"location.href='userpay.php?action=buy';\">馬上充值</button></span></span>";
  35. //* include_once pwCache::getPath(D_P.'data/bbscache/ol_config.php');
  36. pwCache::getData(D_P.'data/bbscache/ol_config.php');
  37. if (!$ol_onlinepay || empty($db_creditpay)) {
  38. $pay_link = "<div class=\"blockquote3\">支付功能尚未開啟</div>";
  39. }
  40. if (!$ol_payto && (!$ol_paypal || !$ol_paypalcode) && (!$ol_99bill || !$ol_99billcode) && (!$ol_tenpay || !$ol_tenpaycode)) {
  41. $pay_link = "<div class=\"blockquote3\">支付功能尚未開啟</div>";
  42. }
  43. require_once uTemplate::PrintEot('userpay');
  44. pwOutPut();
  45. } elseif ($action == 'buy') {
  46. S::gp(array('paycredit'));
  47. //* include_once pwCache::getPath(D_P.'data/bbscache/ol_config.php');
  48. pwCache::getData(D_P.'data/bbscache/ol_config.php');
  49. if (!$ol_onlinepay) {
  50. Showmsg($ol_whycolse);
  51. }
  52. if (!$ol_payto && (!$ol_paypal || !$ol_paypalcode) && (!$ol_99bill || !$ol_99billcode) && (!$ol_tenpay || !$ol_tenpaycode)) {
  53. Showmsg('olpay_seterror');
  54. }
  55. if (empty($db_creditpay)) {
  56. Showmsg('creditpay_empty');
  57. }
  58. $creditinfo = '';
  59. foreach ($db_creditpay as $key => $value) {
  60. $creditinfo .= "'$key' : ['$value[rmbrate]','$value[rmblest]','{$credit->cType[$key]}'],";
  61. }
  62. $creditinfo = '{'.rtrim($creditinfo,',').'}';
  63. require_once uTemplate::PrintEot('userpay');
  64. pwOutPut();
  65. } elseif ($action == 'pay') {
  66. //* include_once pwCache::getPath(D_P.'data/bbscache/ol_config.php');
  67. pwCache::getData(D_P.'data/bbscache/ol_config.php');
  68. if (!$ol_onlinepay) {
  69. Showmsg($ol_whycolse);
  70. }
  71. S::gp(array('number','method','paycredit'));
  72. if (!isset($db_creditpay[$paycredit])) {
  73. Showmsg('olpay_errortype');
  74. }
  75. $number = round($number,2);
  76. $paynum = max(0, $db_creditpay[$paycredit]['rmblest']);
  77. if ($number < $paynum) {
  78. Showmsg('olpay_numerror');
  79. }
  80. $creditName = $credit->cType[$paycredit];
  81. $order_no = ($method-1).str_pad($winduid,10, "0",STR_PAD_LEFT).get_date($timestamp,'YmdHis').num_rand(5);
  82. $db->update("INSERT INTO pw_clientorder SET " . S::sqlSingle(array(
  83. 'order_no' => $order_no,
  84. 'type' => 0,
  85. 'uid' => $winduid,
  86. 'paycredit' => $paycredit,
  87. 'price' => $number,
  88. 'number' => 1,
  89. 'date' => $timestamp,
  90. 'state' => 0
  91. )));
  92. if ($method == 1) {
  93. if (!$ol_paypal || !$ol_paypalcode) {
  94. Showmsg('olpay_paypalerror');
  95. }
  96. $url = "https://www.paypal.com/cgi-bin/webscr?";
  97. $para = array(
  98. 'cmd' => '_xclick',
  99. 'invoice' => $order_no,
  100. 'business' => $ol_paypal,
  101. 'item_name' => getLangInfo('olpay', "olpay_0_title", array('order_no' => $order_no)),
  102. 'item_number' => 'phpw*',
  103. 'amount' => $number,
  104. 'no_shipping' => 0,
  105. 'no_note' => 1,
  106. 'currency_code' => 'CNY',
  107. 'bn' => 'phpwind',
  108. 'charset' => $db_charset
  109. );
  110. foreach ($para as $key => $value) {
  111. $url .= $key."=".urlencode($value)."&";
  112. }
  113. ObHeader($url);
  114. } elseif ($method == 2) {
  115. if (!$ol_payto) {
  116. Showmsg('olpay_alipayerror');
  117. }
  118. require_once(R_P.'require/onlinepay.php');
  119. $olpay = new OnlinePay($ol_payto);
  120. ObHeader($olpay->alipayurl($order_no, $number, 0));
  121. } elseif ($method == 3) {//fix by noizy
  122. if (!$ol_99bill || !$ol_99billcode) {
  123. Showmsg('olpay_pay99error');
  124. }
  125. strlen($ol_99bill) == 11 && $ol_99bill .= '01';
  126. //require_once(R_P.'require/header.php');
  127. !$db_rmbrate && $db_rmbrate=10;
  128. $para = array(
  129. 'inputCharset' => ($db_charset == 'gbk' ? 2 : 1),
  130. 'pageUrl' => "{$db_bbsurl}/pay99bill.php",
  131. 'version' => 'v2.0',
  132. 'language' => 1,
  133. 'signType' => 1,
  134. 'merchantAcctId' => $ol_99bill,
  135. 'payerName' => $windid,
  136. 'orderId' => $order_no,
  137. 'orderAmount' => ($number*100),
  138. 'orderTime' => get_date($timestamp,'YmdHis'),
  139. 'productName' => getLangInfo('other','userpay_content'),
  140. 'productNum' => ($number*$db_rmbrate),
  141. 'payType' => '00',
  142. 'redoFlag' => 1
  143. );
  144. $signMsg = $inputMsg = '';
  145. foreach ($para as $key => $value) {
  146. $value = trim($value);
  147. if (strlen($value) > 0) {
  148. $signMsg .= "$key=$value&";
  149. $inputMsg .= "<input type=\"hidden\" name=\"$key\" value=\"$value\" />";
  150. }
  151. }
  152. $signMsg = strtoupper(md5($signMsg."key=$ol_99billcode"));
  153. require_once uTemplate::PrintEot('userpay');
  154. pwOutPut();
  155. } elseif ($method == 4) {
  156. if (!$ol_tenpay || !$ol_tenpaycode) {
  157. Showmsg('olpay_tenpayerror');
  158. }
  159. $strBillDate = get_date($timestamp,'Ymd');
  160. $strSpBillNo = substr($order_no,-10);
  161. $strTransactionId = $ol_tenpay . $strBillDate . $strSpBillNo;
  162. $db->update("UPDATE pw_clientorder SET order_no=".S::sqlEscape($strTransactionId)."WHERE order_no=".S::sqlEscape($order_no));
  163. // $url = "https://www.tenpay.com/cgi-bin/v1.0/pay_gate.cgi?";
  164. $url = "http://pay.phpwind.net/pay/create_payurl.php?";
  165. $para = array(
  166. 'cmdno' => '1',
  167. 'date' => $strBillDate,
  168. 'bargainor_id' => $ol_tenpay,
  169. 'transaction_id' => $strTransactionId,
  170. 'sp_billno' => $strSpBillNo,
  171. 'total_fee' => $number*100,
  172. 'bank_type' => 0,
  173. 'fee_type' => 1,
  174. 'return_url' => "{$db_bbsurl}/tenpay.php",
  175. 'attach' => 'my_magic_string',
  176. 'spbill_create_ip' => $onlineip
  177. );
  178. $arg = '';
  179. foreach ($para as $key => $value) {
  180. if ($value) {
  181. $url .= "$key=".urlencode($value)."&";
  182. $arg .= "$key=$value&";
  183. }
  184. }
  185. $strSign = strtoupper(md5($arg."key=$ol_tenpaycode"));
  186. $url .= "desc=".urlencode(getLangInfo('olpay', "olpay_0_title", array('order_no' => $strTransactionId)))."&sign=$strSign";
  187. ObHeader($url);
  188. }
  189. } elseif ($action == 'list') {
  190. S::gp(array('state'));
  191. $sqladd = "WHERE uid=" . S::sqlEscape($winduid) . ' AND type=0';
  192. if ($state == 1) {
  193. $sqladd .= " AND state<2";
  194. } elseif ($state == 2) {
  195. $sqladd .= " AND state=2";
  196. }
  197. (!is_numeric($page) || $page < 1) && $page = 1;
  198. $limit = S::sqlLimit(($page-1)*$db_perpage,$db_perpage);
  199. $rt = $db->get_one("SELECT COUNT(*) AS sum FROM pw_clientorder $sqladd");
  200. $pages = numofpage($rt['sum'],$page,ceil($rt['sum']/$db_perpage),"userpay.php?action=list&state=$state&");
  201. $query = $db->query("SELECT * FROM pw_clientorder $sqladd ORDER BY date DESC $limit");
  202. while ($rt = $db->fetch_array($query)) {
  203. !$rt['paycredit'] && $rt['paycredit'] = 'currency';
  204. $rt['date'] = get_date($rt['date']);
  205. $orderdb[] = $rt;
  206. }
  207. //require_once(R_P.'require/header.php');
  208. require_once uTemplate::PrintEot('userpay');
  209. pwOutPut();
  210. } elseif ($action == 'log') {
  211. S::gp(array('ctype','stime','etime','logtype','page'));
  212. $page = (int)$page;
  213. $sqladd = " uid=".S::sqlEscape($winduid);
  214. $urladd = '';
  215. if ($ctype) {
  216. $sqladd .= " AND ctype=".S::sqlEscape($ctype);
  217. $urladd .= "ctype=$ctype&";
  218. }
  219. if ($stime) {
  220. $stimeView = $stime;
  221. !is_numeric($stime) && $stime = PwStrtoTime($stime);
  222. $sqladd .= " AND adddate>".S::sqlEscape($stime);
  223. $urladd .= "stime=$stime&";
  224. }
  225. if ($etime) {
  226. $etimeView = $etime;
  227. !is_numeric($etime) && $etime = PwStrtoTime($etime);
  228. if ($etime == $stime) $etime = $etime + 86400;
  229. $sqladd .= " AND adddate<".S::sqlEscape($etime);
  230. $urladd .= "etime=$etime&";
  231. }
  232. if ($logtype) {
  233. $sqladd .= " AND logtype".(strpos($logtype,'_') !== false ? "=".S::sqlEscape($logtype) : " LIKE ".S::sqlEscape("$logtype%"));
  234. $urladd .= "logtype=$logtype&";
  235. }
  236. require_once(R_P.'require/forum.php');
  237. require_once GetLang('logtype');
  238. (!is_numeric($page) || $page<1) && $page = 1;
  239. $limit = S::sqlLimit(($page-1)*$db_perpage,$db_perpage);
  240. $rt = $db->get_one("SELECT COUNT(*) AS sum FROM pw_creditlog WHERE $sqladd");
  241. $pages = numofpage($rt['sum'],$page,ceil($rt['sum']/$db_perpage),"userpay.php?action=log&$urladd");
  242. $query = $db->query("SELECT * FROM pw_creditlog WHERE $sqladd ORDER BY id DESC $limit");
  243. while ($rt = $db->fetch_array($query)) {
  244. $rt['adddate'] = get_date($rt['adddate']);
  245. $rt['descrip'] = descriplog($rt['descrip']);
  246. $logdb[] = $rt;
  247. }
  248. //require_once(R_P.'require/header.php');
  249. require_once uTemplate::PrintEot('userpay');
  250. pwOutPut();
  251. } elseif ($action == 'virement') {
  252. $vm_credit = array();
  253. foreach ($db_creditpay as $key => $value) {
  254. if ($value['virement']) {
  255. $vm_credit[] = $key;
  256. }
  257. }
  258. empty($vm_credit) && Showmsg('virement_closed');
  259. if (empty($_POST['step'])) {
  260. $db_virelimit = (int) $db_virelimit;
  261. //require_once(R_P.'require/header.php');
  262. require_once uTemplate::PrintEot('userpay');
  263. pwOutPut();
  264. } else {
  265. PostCheck();
  266. S::gp(array('pwuser','pwpwd','vmcredit','paynum'),'P');
  267. if (!in_array($vmcredit,$vm_credit)) {
  268. Showmsg('undefined_action');
  269. }
  270. $userService = L::loadClass('UserService', 'user'); /* @var $userService PW_UserService */
  271. $touid = $userService->getUserIdByUserName($pwuser);
  272. if (!$touid) {
  273. $errorname = $pwuser;
  274. Showmsg('user_not_exists');
  275. }
  276. $paynum = (int)$paynum;
  277. if ($paynum <= 0) {
  278. Showmsg('illegal_nums');
  279. }
  280. if (!$pwpwd) {
  281. Showmsg('empty_password');
  282. }
  283. if ($db_virelimit && $paynum < $db_virelimit) {
  284. Showmsg('currency_limit');
  285. }
  286. /*
  287. $lockfile = D_P.'data/bbscache/lock_userpay.txt';
  288. $fp = fopen($lockfile,'wb+');
  289. flock($fp,LOCK_EX);
  290. */
  291. $rt = $userService->get($winduid);
  292. if (md5($pwpwd) != $rt['password']) {
  293. Showmsg('password_error');
  294. }
  295. if (procLock('userpay',$winduid)) {
  296. $tax = round($paynum * $db_virerate/100);
  297. $needpay = $paynum + $tax;
  298. if ($credit->get($winduid,$vmcredit) < $needpay) {
  299. procUnLock('userpay',$winduid);
  300. Showmsg('noenough_currency');
  301. }
  302. $credit->addLog('main_virefrom',array($vmcredit => -$needpay),array(
  303. 'uid' => $winduid,
  304. 'username' => $windid,
  305. 'ip' => $onlineip,
  306. 'toname' => stripslashes($pwuser)
  307. ));
  308. $credit->addLog('main_vireto',array($vmcredit => $paynum),array(
  309. 'uid' => $touid,
  310. 'username' => stripslashes($pwuser),
  311. 'ip' => $onlineip,
  312. 'fromname' => $windid
  313. ));
  314. $credit->set($winduid,$vmcredit,-$needpay,false);
  315. $credit->set($touid,$vmcredit,$paynum,false);
  316. $credit->runsql();
  317. //fclose($fp);
  318. M::sendNotice(
  319. array($pwuser),
  320. array(
  321. 'title' => getLangInfo('writemsg','vire_title'),
  322. 'content' => getLangInfo('writemsg','vire_content',array(
  323. 'windid' => $windid,
  324. 'paynum' => $paynum,
  325. 'cname' => $credit->cType[$vmcredit]
  326. )),
  327. )
  328. );
  329. procUnLock('userpay',$winduid);
  330. refreshto('userpay.php?action=virement',getLangInfo('msg','virement_success'));
  331. } else {
  332. Showmsg('virement_lock');
  333. }
  334. }
  335. } elseif ($action == 'change') {
  336. require_once(R_P.'require/credit.php');
  337. $rt = $db->get_one("SELECT db_value FROM pw_config WHERE db_name='jf_A'");
  338. $jf_A = $rt['db_value'] ? unserialize($rt['db_value']) : array();
  339. if (empty($_POST['step'])) {
  340. $creditdb = $credit->get($winduid,'CUSTOM');
  341. $jf = array();
  342. foreach ($jf_A as $key => $value) {
  343. if ($value[2]) {
  344. list($j_1,$j_2) = explode('_',$key);
  345. $jf[$key] = array($credit->cType[$j_1],$credit->cType[$j_2],$value[0],$value[1]);
  346. }
  347. }
  348. !$jf && Showmsg('jfchange_empty');
  349. require_once uTemplate::PrintEot('userpay');
  350. pwOutPut();
  351. } else {
  352. PostCheck();
  353. S::gp(array('type','change'));
  354. if (!$jf_A[$type] || !$jf_A[$type][2]) {
  355. Showmsg('bk_credit_type_error');
  356. }
  357. $change = (int)$change;
  358. if (!is_numeric($change) || $change <= 0) Showmsg('bk_credit_fillin_error');
  359. $change%$jf_A[$type][0] != 0 && Showmsg('change_error');
  360. list($sell,$buy) = explode('_',$type);
  361. $credit1 = $change;
  362. $credit2 = intval($change/$jf_A[$type][0]*$jf_A[$type][1]);
  363. /*
  364. $db->query("LOCK TABLES pw_memberdata WRITE,pw_membercredit WRITE");
  365. $lockfile = D_P.'data/bbscache/lock_profile.txt';
  366. $fp = fopen($lockfile,'wb+');
  367. flock($fp,LOCK_EX);
  368. */
  369. if (procLock('credit_change',$winduid)) {
  370. if ($credit1 > $credit->get($winduid,$sell)) {
  371. procUnLock('credit_change',$winduid);
  372. Showmsg('bk_credit_change_error');
  373. }
  374. $credit->addLog('main_changereduce',array($sell => -$credit1),array(
  375. 'uid' => $winduid,
  376. 'username' => $windid,
  377. 'ip' => $onlineip,
  378. 'tocname' => $credit->cType[$buy]
  379. ));
  380. $credit->addLog('main_changeadd',array($buy => $credit2),array(
  381. 'uid' => $winduid,
  382. 'username' => $windid,
  383. 'ip' => $onlineip,
  384. 'fromcname' => $credit->cType[$sell]
  385. ));
  386. $credit->sets($winduid,array($sell => -$credit1, $buy => $credit2));
  387. procUnLock('credit_change',$winduid);
  388. //fclose($fp);
  389. //$db->query("UNLOCK TABLES");
  390. }
  391. refreshto('userpay.php?action=change','bank_creditsuccess',1,true);
  392. }
  393. }
  394. ?>