payment.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. <?php
  2. /**
  3. * 支付回调
  4. *
  5. *
  6. *
  7. *
  8. * by 33hao.com 好商城V3 运营版
  9. */
  10. //use Shopnc\Tpl;
  11. defined('InShopNC') or exit('Access Invalid!');
  12. class paymentControl extends mobileHomeControl{
  13. private $payment_code;
  14. public function __construct() {
  15. parent::__construct();
  16. $this->payment_code = $_GET['payment_code'];
  17. }
  18. public function returnopenidOp(){
  19. $payment_api = $this->_get_payment_api();
  20. if($this->payment_code != 'wxpay'){
  21. output_error('支付参数异常');
  22. die;
  23. }
  24. $payment_api->getopenid();
  25. }
  26. /**
  27. * 支付回调
  28. */
  29. public function returnOp()
  30. {
  31. unset($_GET['act']);
  32. unset($_GET['op']);
  33. unset($_GET['payment_code']);
  34. $payment_api = $this->_get_payment_api();
  35. $payment_config = $this->_get_payment_config();
  36. $callback_info = $payment_api->getReturnInfo($payment_config);
  37. if($callback_info)
  38. {
  39. //验证成功
  40. $result = $this->_update_order($callback_info['out_trade_no'], $callback_info['trade_no']);
  41. if($result['state']) {
  42. Tpl::output('result', 'success');
  43. Tpl::output('message', '支付成功');
  44. } else {
  45. Tpl::output('result', 'fail');
  46. Tpl::output('message', '支付失败');
  47. }
  48. } else {
  49. //验证失败
  50. Tpl::output('result', 'fail');
  51. Tpl::output('message', '支付失败');
  52. }
  53. Tpl::showpage('payment_message');
  54. }
  55. /**
  56. * 支付提醒
  57. */
  58. public function notifyOp()
  59. {
  60. // 恢复框架编码的post值
  61. $_POST['notify_data'] = html_entity_decode($_POST['notify_data']);
  62. $payment_api = $this->_get_payment_api();
  63. $payment_config = $this->_get_payment_config();
  64. $callback_info = $payment_api->getNotifyInfo($payment_config);
  65. if($callback_info) {
  66. //验证成功
  67. $result = $this->_update_order($callback_info['out_trade_no'], $callback_info['trade_no']);
  68. if($result['state']) {
  69. if($this->payment_code == 'wxpay'){
  70. echo $callback_info['returnXml'];
  71. die;
  72. }else{
  73. echo 'success';die;
  74. }
  75. }
  76. }
  77. //验证失败
  78. if($this->payment_code == 'wxpay'){
  79. echo '<xml><return_code><!--[CDATA[FAIL]]--></return_code></xml>';
  80. die;
  81. }else{
  82. echo "fail";die;
  83. }
  84. }
  85. /**
  86. * 获取支付接口实例
  87. */
  88. private function _get_payment_api() {
  89. $inc_file = BASE_PATH.DS.'api'.DS.'payment'.DS.$this->payment_code.DS.$this->payment_code.'.php';
  90. if(is_file($inc_file)) {
  91. require($inc_file);
  92. }
  93. $payment_api = new $this->payment_code();
  94. return $payment_api;
  95. }
  96. /**
  97. * 获取支付接口信息
  98. */
  99. private function _get_payment_config() {
  100. $model_mb_payment = Model('mb_payment');
  101. //读取接口配置信息
  102. $condition = array();
  103. $condition['payment_code'] = $this->payment_code;
  104. $payment_info = $model_mb_payment->getMbPaymentOpenInfo($condition);
  105. return $payment_info['payment_config'];
  106. }
  107. /**
  108. * 更新订单状态
  109. */
  110. private function _update_order($out_trade_no, $trade_no)
  111. {
  112. $model_order = Model('order');
  113. $logic_payment = Logic('payment');
  114. $tmp = explode('|', $out_trade_no);
  115. $out_trade_no = $tmp[0];
  116. if (!empty($tmp[1])) {
  117. $order_type = $tmp[1];
  118. } else {
  119. $order_pay_info = Model('order')->getOrderPayInfo(array('pay_sn'=> $out_trade_no));
  120. if(empty($order_pay_info)){
  121. $order_type = 'v';
  122. } else {
  123. $order_type = 'r';
  124. }
  125. }
  126. if ($order_type == 'r') {
  127. $result = $logic_payment->getRealOrderInfo($out_trade_no);
  128. if (intval($result['data']['api_pay_state'])) {
  129. return array('state'=>true);
  130. }
  131. $order_list = $result['data']['order_list'];
  132. $result = $logic_payment->updateRealOrder($out_trade_no, $this->payment_code, $order_list, $trade_no);
  133. } elseif ($order_type == 'v') {
  134. $result = $logic_payment->getVrOrderInfo($out_trade_no);
  135. if ($result['data']['order_state'] != ORDER_STATE_NEW) {
  136. return array('state'=>true);
  137. }
  138. $result = $logic_payment->updateVrOrder($out_trade_no, $this->payment_code, $result['data'], $trade_no);
  139. }
  140. return $result;
  141. }
  142. /**
  143. * 支付回调
  144. */
  145. public function wxpayreturnOp()
  146. {
  147. unset($_GET['act']);
  148. unset($_GET['op']);
  149. unset($_GET['payment_code']);
  150. $result_code= $_GET['result_code'] ;
  151. $out_trade_no=$_GET['out_trade_no'] ;
  152. $transaction_id=$_GET['transaction_id'] ;
  153. if($result_code == "FAIL"){
  154. Tpl::output('result', 'fail');
  155. Tpl::output('message', '支付失败');
  156. }
  157. else {
  158. //验证成功
  159. $result = $this->_update_order($out_trade_no, $transaction_id);
  160. if ($result['state']) {
  161. Tpl::output('result', 'success');
  162. Tpl::output('message', '支付成功');
  163. } else {
  164. Tpl::output('result', 'fail');
  165. Tpl::output('message', '支付失败');
  166. }
  167. }
  168. Tpl::showpage('payment_message');
  169. }
  170. /**
  171. * 微信支付提醒
  172. */
  173. public function wxpaynotifyOp()
  174. {
  175. // 恢复框架编码的post值
  176. $result_code= $_GET['result_code'] ;
  177. $out_trade_no=$_GET['out_trade_no'] ;
  178. $transaction_id=$_GET['transaction_id'] ;
  179. if($result_code!= "FAIL") {
  180. //验证成功
  181. $result = $this->_update_order($out_trade_no, $transaction_id);
  182. if($result['state']) {
  183. echo 'success';die;
  184. }
  185. }
  186. //验证失败
  187. echo "fail";die;
  188. }
  189. }