PageRenderTime 24ms CodeModel.GetById 34ms RepoModel.GetById 1ms app.codeStats 0ms

/alipay.php

https://bitbucket.org/johnroyer/phpwind8.7
PHP | 132 lines | 120 code | 11 blank | 1 comment | 46 complexity | 0612ae63ca0bf237d2b30898cd41f639 MD5 | raw file
  1. <?php
  2. require_once('global.php');
  3. require_once(R_P.'require/posthost.php');
  4. //* include_once pwCache::getPath(D_P.'data/bbscache/ol_config.php');
  5. pwCache::getData(D_P.'data/bbscache/ol_config.php');
  6. S::gp(array('action','out_trade_no','trade_status','buyer_email','notify_id','extra_common_param'));
  7. $ret_url = $extra_common_param ? getExtra($extra_common_param) : 'userpay.php';
  8. !empty($_POST) && $_GET = $_POST;
  9. $isPwPay = false;
  10. if ($action || empty($ol_alipaykey) || empty($ol_alipaypartnerID)) {
  11. $ol_alipaypartnerID = '2088301270630891';
  12. $isPwPay = true;
  13. }
  14. $veryfy_result2 = PostHost("http://notify.alipay.com/trade/notify_query.do","notify_id=$notify_id&partner=" . $ol_alipaypartnerID, 'POST');
  15. if ($isPwPay) {
  16. $url = '';
  17. foreach ($_GET as $key => $value) {
  18. if ($key <> 'action' && $value) {
  19. $url .= "$key=".urlencode($value)."&";
  20. }
  21. }
  22. $veryfy_result1 = PostHost("http://pay.phpwind.net/pay/alipay_notify.php", $url, 'POST');
  23. } else {
  24. ksort($_GET);
  25. reset($_GET);
  26. $arg = '';
  27. foreach ($_GET as $key => $value) {
  28. if ($value && !in_array($key, array('action','sign','sign_type'))) {
  29. $value = str_replace('&#41;',')',$value);
  30. $arg .= "$key=$value&";
  31. }
  32. }
  33. $veryfy_result1 = ($_GET['sign'] == md5(substr($arg,0,-1).$ol_alipaykey)) ? 'true' : 'false';
  34. }
  35. if (!eregi("true$",$veryfy_result1) || !eregi("true$",$veryfy_result2)) {
  36. paymsg($ret_url,'alipay_failure','fail');
  37. }
  38. if (empty($action)) {
  39. if (!$ol_onlinepay) {
  40. Showmsg($ol_whycolse);
  41. }
  42. if (!$ol_payto) {
  43. Showmsg('olpay_seterror');
  44. }
  45. if (procLock('alipay',$winduid)) {
  46. $rt = $db->get_one('SELECT c.*,m.username,m.groupid,m.groups FROM pw_clientorder c LEFT JOIN pw_members m USING(uid) WHERE order_no=' . S::sqlEscape($out_trade_no));
  47. if (empty($rt)) {
  48. procUnLock('alipay',$winduid);
  49. paymsg($ret_url,'alipay_ordersfailure');
  50. }
  51. $fee = $rt['number'] * $rt['price'];
  52. if ($fee != $_GET['total_fee'] || $_GET['seller_email'] != $ol_payto) {
  53. procUnLock('alipay',$winduid);
  54. paymsg($ret_url,'alipay_failure');
  55. }
  56. if ($trade_status == 'TRADE_FINISHED' || $trade_status == 'TRADE_SUCCESS') {
  57. if ($rt['state'] == 2) {
  58. procUnLock('alipay',$winduid);
  59. paymsg($ret_url,'alipay_orderssuccess');
  60. }
  61. if (file_exists(R_P."require/olpay/pay_{$rt[type]}.php")) {
  62. require_once S::escapePath(R_P."require/olpay/pay_{$rt[type]}.php");
  63. }
  64. $db->update("UPDATE pw_clientorder SET payemail=" . S::sqlEscape($buyer_email) . ",state=2 WHERE order_no=" . S::sqlEscape($out_trade_no));
  65. procUnLock('alipay',$winduid);
  66. paymsg($ret_url,'alipay_orderssuccess');
  67. } else {
  68. procUnLock('alipay',$winduid);
  69. paymsg($ret_url,'alipay_topayfailure');
  70. }
  71. } else {
  72. Showmsg('proclock');
  73. }
  74. } elseif ($action == 'trade') {
  75. $rt = $db->get_one("SELECT tid,ifpay FROM pw_tradeorder WHERE order_no=".S::sqlEscape($out_trade_no));
  76. if (empty($rt) || $rt['ifpay'] == '3') {
  77. paymsg('index.php','alipay_ordersfailure');
  78. }
  79. switch ($trade_status) {
  80. case 'WAIT_SELLER_SEND_GOODS':
  81. $db->update("UPDATE pw_tradeorder SET ifpay='1',tradedate=".S::sqlEscape($timestamp).",payment='2' WHERE order_no=".S::sqlEscape($out_trade_no));
  82. break;
  83. case 'WAIT_BUYER_CONFIRM_GOODS':
  84. $db->update("UPDATE pw_tradeorder SET ifpay='2',tradedate=".S::sqlEscape($timestamp)." WHERE order_no=".S::sqlEscape($out_trade_no));
  85. break;
  86. case 'TRADE_FINISHED':
  87. $db->update("UPDATE pw_tradeorder SET ifpay='3',tradedate=".S::sqlEscape($timestamp)." WHERE order_no=".S::sqlEscape($out_trade_no));
  88. $db->update("UPDATE pw_trade SET salenum=salenum+1 WHERE tid=".S::sqlEscape($rt['tid']));
  89. break;
  90. default:
  91. $db->update("UPDATE pw_tradeorder SET ifpay='4',tradedate=".S::sqlEscape($timestamp)." WHERE order_no=".S::sqlEscape($out_trade_no));
  92. }
  93. paymsg('index.php','operate_success');
  94. } elseif ($action == 'pcalipay') {//團購、活動
  95. list($pcmid) = explode('_',$out_trade_no);
  96. $rt = $db->get_one("SELECT tid,ifpay FROM pw_pcmember WHERE pcmid=".S::sqlEscape($pcmid));
  97. if (empty($rt) || $rt['ifpay'] == '1') {
  98. paymsg("read.php?tid=$rt[tid]",'pcalipay_success');
  99. }
  100. if ($trade_status == 'WAIT_SELLER_SEND_GOODS') {
  101. $db->update("UPDATE pw_pcmember SET ifpay=1 WHERE pcmid=".S::sqlEscape($pcmid));
  102. }
  103. paymsg("read.php?tid=$rt[tid]",'pcalipay_success');
  104. }
  105. function paymsg($url,$msg,$notify = 'success') {
  106. if (empty($_POST)) {
  107. refreshto($url,$msg);
  108. }
  109. exit($notify);
  110. }
  111. function getExtra($extra) {
  112. $return = '';
  113. $extra && $extra = explode('.',$extra);
  114. if(S::isArray($extra)) {
  115. foreach ($extra as $v) {
  116. is_numeric($v) && $return .= chr($v);
  117. }
  118. }
  119. return $return;
  120. }
  121. ?>