Pay.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. use app\common\library\AopClient;
  5. use app\common\library\Common;
  6. use app\common\model\Config;
  7. use app\common\model\User;
  8. use think\Db;
  9. use think\Request;
  10. use app\common\model\Order;
  11. /**
  12. * 支付成功回调
  13. */
  14. class Pay extends Api
  15. {
  16. /**
  17. * 微信支付--商品支付成功回调订单
  18. */
  19. public function pay_order(){
  20. $payXml = file_get_contents("php://input");
  21. //将xml格式转化为json格式
  22. $jsonXml = json_encode(simplexml_load_string($payXml, 'SimpleXMLElement', LIBXML_NOCDATA));
  23. //将json格式转成数组格式 $result['out_trade_no']
  24. $result = json_decode($jsonXml, true);
  25. if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') {
  26. $order = Order::where('status',0)->where('order_no',$result['out_trade_no'])->find();
  27. if ($order){
  28. Db::startTrans();
  29. try {
  30. $da['pay_time'] = time();
  31. $da['status'] = 1;
  32. $da['paid'] = 1;
  33. $da['return_success_info'] = json_encode($result,true);
  34. Order::where('id',$order['id'])->update($da);
  35. Common::order_status($order['id'],'微信支付成功');
  36. Db::commit();
  37. $arr = array(
  38. 'return_code' => 'SUCCESS',
  39. 'return_msg' => 'OK',
  40. );
  41. return $this->arrayToXml($arr);
  42. }catch (Exception $e) {
  43. Db::rollback();
  44. file_put_contents("order_pay_error.txt", file_get_contents("php://input") . "\n" . json_encode($result) . "\n" . "\n", FILE_APPEND);
  45. }
  46. }
  47. }
  48. }
  49. /**
  50. * 微信支付--加班费支付成功回调订单
  51. */
  52. public function overtime_pay_order(){
  53. $payXml = file_get_contents("php://input");
  54. //将xml格式转化为json格式
  55. $jsonXml = json_encode(simplexml_load_string($payXml, 'SimpleXMLElement', LIBXML_NOCDATA));
  56. //将json格式转成数组格式 $result['out_trade_no']
  57. $result = json_decode($jsonXml, true);
  58. if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') {
  59. $order = Order::where('overtime_pay_status',1)->where('overtime_pay_order_no',$result['out_trade_no'])->find();
  60. if ($order){
  61. Db::startTrans();
  62. try {
  63. $da['overtime_pay_time'] = time();
  64. $da['overtime_pay_status'] = 2;
  65. $da['overtime_return_success_info'] = json_encode($result,true);
  66. Order::where('id',$order['id'])->update($da);
  67. Common::order_status($order['id'],'微信支付加班费成功');
  68. Db::commit();
  69. $arr = array(
  70. 'return_code' => 'SUCCESS',
  71. 'return_msg' => 'OK',
  72. );
  73. return $this->arrayToXml($arr);
  74. }catch (Exception $e) {
  75. Db::rollback();
  76. file_put_contents("order_pay_error.txt", file_get_contents("php://input") . "\n" . json_encode($result) . "\n" . "\n", FILE_APPEND);
  77. }
  78. }
  79. }
  80. }
  81. /**
  82. * 支付宝支付--商品支付成功回调订单
  83. */
  84. public function alipay_order(){
  85. $result = input('post.');
  86. if ($result['trade_status'] == 'TRADE_SUCCESS' || $result['trade_status'] == 'TRADE_FINISHED') {
  87. $order = Order::where('status',0)->where('order_no',$result['out_trade_no'])->find();
  88. if ($order){
  89. Db::startTrans();
  90. try {
  91. $da['pay_time'] = time();
  92. $da['status'] = 1;
  93. $da['paid'] = 1;
  94. $da['return_success_info'] = json_encode($result,true);
  95. Order::where('id',$order['id'])->update($da);
  96. Common::order_status($order['id'],'支付宝支付成功');
  97. Db::commit();
  98. echo 'success';
  99. }catch (Exception $e) {
  100. Db::rollback();
  101. file_put_contents("order_alipay_error.txt", file_get_contents("php://input") . "\n" . json_encode($result) . "\n" . "\n", FILE_APPEND);
  102. }
  103. }
  104. }
  105. }
  106. /**
  107. * 支付宝支付--商品支付成功回调订单
  108. */
  109. public function overtime_alipay_order(){
  110. $result = input('post.');
  111. if ($result['trade_status'] == 'TRADE_SUCCESS' || $result['trade_status'] == 'TRADE_FINISHED') {
  112. $order = Order::where('overtime_pay_status',1)->where('overtime_pay_order_no',$result['out_trade_no'])->find();
  113. if ($order){
  114. Db::startTrans();
  115. try {
  116. $da['overtime_pay_time'] = time();
  117. $da['overtime_pay_status'] = 2;
  118. $da['overtime_return_success_info'] = json_encode($result,true);
  119. Order::where('id',$order['id'])->update($da);
  120. Common::order_status($order['id'],'支付宝支付加班费成功');
  121. Db::commit();
  122. echo 'success';
  123. }catch (Exception $e) {
  124. Db::rollback();
  125. file_put_contents("order_alipay_error.txt", file_get_contents("php://input") . "\n" . json_encode($result) . "\n" . "\n", FILE_APPEND);
  126. }
  127. }
  128. }
  129. }
  130. /**
  131. * 数组转xml
  132. * @ApiInternal
  133. */
  134. public function arrayToXml($arr)
  135. {
  136. $xml = "<xml>";
  137. foreach ($arr as $key => $val) {
  138. if (is_numeric($val)) {
  139. $xml .= "<" . $key . ">" . $val . "</" . $key . ">";
  140. } else
  141. $xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";
  142. }
  143. $xml .= "</xml>";
  144. return $xml;
  145. }
  146. }