/phpcms/modules/pay/respond.php

https://github.com/hxzyzz/ddc · PHP · 122 lines · 91 code · 8 blank · 23 comment · 16 complexity · dc9837528d8c52b7a792b8d5422d8bc7 MD5 · raw file

  1. <?php
  2. defined('IN_PHPCMS') or exit('No permission resources.');
  3. class respond {
  4. private $pay_db, $account_db,$member_db;
  5. function __construct() {
  6. pc_base::load_app_func('global');
  7. }
  8. /**
  9. * return_url getÐÎʽÏìÓ¦
  10. */
  11. public function respond_get() {
  12. if ($_GET['code']){
  13. $payment = $this->get_by_code($_GET['code']);
  14. if(!$payment) showmessage(L('payment_failed'));
  15. $cfg = unserialize_config($payment['config']);
  16. $pay_name = ucwords($payment['pay_code']);
  17. pc_base::load_app_class('pay_factory','',0);
  18. $payment_handler = new pay_factory($pay_name, $cfg);
  19. $return_data = $payment_handler->receive();
  20. if($return_data) {
  21. if($return_data['order_status'] == 0) {
  22. $this->update_member_amount_by_sn($return_data['order_id']);
  23. }
  24. $this->update_recode_status_by_sn($return_data['order_id'],$return_data['order_status']);
  25. showmessage(L('pay_success'),APP_PATH.'index.php?m=pay&c=deposit');
  26. } else {
  27. showmessage(L('pay_failed'),APP_PATH.'index.php?m=pay&c=deposit');
  28. }
  29. } else {
  30. showmessage(L('pay_success'));
  31. }
  32. }
  33. /**
  34. * ·þÎñÆ÷¶Ë POSTÐÎʽÏìÓ¦
  35. */
  36. public function respond_post() {
  37. $_POST['code'] = $_POST['code'] ? $_POST['code'] : $_GET['code'];
  38. if ($_POST['code']){
  39. $payment = $this->get_by_code($_POST['code']);
  40. if(!$payment) error_log(date('m-d H:i:s',SYS_TIME).'| POST: payment is null |'."\r\n", 3, CACHE_PATH.'pay_error_log.php');;
  41. $cfg = unserialize_config($payment['config']);
  42. $pay_name = ucwords($payment['pay_code']);
  43. pc_base::load_app_class('pay_factory','',0);
  44. $payment_handler = new pay_factory($pay_name, $cfg);
  45. $return_data = $payment_handler->notify();
  46. if($return_data) {
  47. if($return_data['order_status'] == 0) {
  48. $this->update_member_amount_by_sn($return_data['order_id']);
  49. }
  50. $this->update_recode_status_by_sn($return_data['order_id'],$return_data['order_status']);
  51. $result = TRUE;
  52. } else {
  53. $result = FALSE;
  54. }
  55. $payment_handler->response($result);
  56. }
  57. }
  58. /**
  59. * ¸üж©µ¥×´Ì¬
  60. * @param unknown_type $trade_sn ¶©µ¥ID
  61. * @param unknown_type $status ¶©µ¥×´Ì¬
  62. */
  63. private function update_recode_status_by_sn($trade_sn,$status) {
  64. $trade_sn = trim($trade_sn);
  65. $status = trim(intval($status));
  66. $data = array();
  67. $this->account_db = pc_base::load_model('pay_account_model');
  68. $status = return_status($status);
  69. $data = array('status'=>$status);
  70. return $this->account_db->update($data,array('trade_sn'=>$trade_sn));
  71. }
  72. /**
  73. * ¸üÐÂÓû§ÕË»§Óà¶î
  74. * @param unknown_type $trade_sn
  75. */
  76. private function update_member_amount_by_sn($trade_sn) {
  77. $data = $userinfo = array();
  78. $this->member_db = pc_base::load_model('member_model');
  79. $orderinfo = $this->get_userinfo_by_sn($trade_sn);
  80. $userinfo = $this->member_db->get_one(array('userid'=>$orderinfo['userid']));
  81. if($orderinfo){
  82. $money = floatval($orderinfo['money']);
  83. $amount = $userinfo['amount'] + $money;
  84. $data = array('amount'=>$amount);
  85. return $this->member_db->update($data,array('userid'=>$orderinfo['userid']));
  86. } else {
  87. error_log(date('m-d H:i:s',SYS_TIME).'| POST: rechange failed! trade_sn:'.$$trade_sn.' |'."\r\n", 3, CACHE_PATH.'pay_error_log.php');
  88. return false;
  89. }
  90. }
  91. /**
  92. * ͨ¹ý¶©µ¥IDץȡÓû§ÐÅÏ¢
  93. * @param unknown_type $trade_sn
  94. */
  95. private function get_userinfo_by_sn($trade_sn) {
  96. $trade_sn = trim($trade_sn);
  97. $this->account_db = pc_base::load_model('pay_account_model');
  98. $result = $this->account_db->get_one(array('trade_sn'=>$trade_sn));
  99. $status_arr = array('succ','failed','error','timeout','cancel');
  100. return ($result && !in_array($result['status'],$status_arr)) ? $result : false;
  101. }
  102. /**
  103. * ͨ¹ýÖ§¸¶´úÂë»ñȡ֧¸¶ÐÅÏ¢
  104. * @param unknown_type $code
  105. */
  106. private function get_by_code($code) {
  107. $result = array();
  108. $code = trim($code);
  109. $this->pay_db = pc_base::load_model('pay_payment_model');
  110. $result = $this->pay_db->get_one(array('pay_code'=>$code));
  111. return $result;
  112. }
  113. }
  114. ?>