RecharOrder.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <?php
  2. namespace app\admin\model;
  3. use addons\epay\library\Service;
  4. use think\Db;
  5. use think\Model;
  6. class RecharOrder extends Model
  7. {
  8. // 表名
  9. protected $name = 'rechar_order';
  10. // 自动写入时间戳字段
  11. protected $autoWriteTimestamp = 'int';
  12. // 定义时间戳字段名
  13. protected $createTime = 'createtime';
  14. protected $updateTime = 'updatetime';
  15. protected $deleteTime = false;
  16. // 追加属性
  17. protected $append = [
  18. 'status_text',
  19. 'pay_type_text',
  20. 'platform_text',
  21. 'paytime_text'
  22. ];
  23. public function old_refund($params = [])
  24. {
  25. $result = [
  26. 'status' => 1,
  27. 'msg' => '',
  28. 'data' => [],
  29. ];
  30. try {
  31. $order = isset($params['order']) ? $params['order'] : [];
  32. $table = isset($params['table']) ? $params['table'] : '';
  33. $tableId = isset($params['table_id']) ? $params['table_id'] : 0;
  34. $refund_price = isset($params['refund_price']) ? $params['refund_price'] : 0.00;
  35. $remark = isset($params['remark']) ? $params['remark'] : '';
  36. // 生成退款单
  37. $refund_data = [
  38. 'out_refund_no'=> createUniqueNo('R',$tableId),
  39. 'pay_fee' => $order['pay_fee'],
  40. 'refund_price' => $refund_price,
  41. 'pay_type' => $order['pay_type'],
  42. 'status' => 0,
  43. 'createtime' => time(),
  44. 'updatetime' => time(),
  45. 'table' => $table,
  46. 'table_id' => $tableId,
  47. ];
  48. $refund_log_id = Db::name('order_refund_log')->insertGetId($refund_data);
  49. if (in_array($order['pay_type'],[1,2])) {
  50. // 微信|支付宝退款
  51. // 退款数据
  52. $order_data = [
  53. 'out_trade_no' => $order['pay_out_trade_no']
  54. ];
  55. if ($order['pay_type'] == 1) {//微信
  56. $total_fee = $order['pay_fee'] * 100;
  57. $refund_fee = $refund_price * 100;
  58. $order_data = array_merge($order_data, [
  59. 'out_refund_no' => $refund_data['out_refund_no'],
  60. 'total_fee' => $total_fee,
  61. 'refund_fee' => $refund_fee,
  62. 'refund_desc' => $remark,
  63. ]);
  64. } elseif ($order['pay_type'] == 2) {//支付宝
  65. $order_data = array_merge($order_data, [
  66. 'out_request_no' => $refund_data['out_refund_no'],
  67. 'refund_amount' => $refund_price,
  68. ]);
  69. }
  70. //
  71. if ($order['pay_type'] == 1) {
  72. $wxpay = new \app\common\library\Wxpay;
  73. $wxresult = $wxpay->WxPayRefund($order_data);
  74. // 微信通知回调 pay->notifyr
  75. if ($wxresult['return_code'] == 'SUCCESS' && $wxresult['result_code'] == 'SUCCESS') {
  76. Db::name('order_refund_log')->where('id',$refund_log_id)->update(['status'=>1]);
  77. } else {
  78. throw new Exception($result['return_msg']);
  79. }
  80. } elseif ($order['pay_type'] == 2) {
  81. $aliresult = Service::submitRefund($order['pay_fee'],$refund_price,$order['pay_out_trade_no'],$refund_data['out_refund_no'],'alipay',$remark,'');
  82. if($aliresult['code'] == '10000'){
  83. Db::name('order_refund_log')->where('id',$refund_log_id)->update(['status'=>1]);
  84. }else{
  85. throw new Exception($aliresult['msg']);
  86. }
  87. /* return 'alipay wrong way';
  88. $alipay = new \app\common\library\AliPay;
  89. $result = $alipay->AliPayRefund($order_data);
  90. // 支付宝通知回调 pay->notifyx
  91. return $result;*/
  92. /*if ($result['code'] == "10000") {
  93. return true;
  94. } else {
  95. throw new \Exception($result['msg']);
  96. }*/
  97. }
  98. // { // 微信返回结果
  99. // "return_code":"SUCCESS",
  100. // "return_msg":"OK",
  101. // "appid":"wx39cd0799d4567dd0",
  102. // "mch_id":"1481069012",
  103. // "nonce_str":"huW9eIAb5BDPn0Ma",
  104. // "sign":"250316740B263FE53F5DFF50AF5A8FA1",
  105. // "result_code":"SUCCESS",
  106. // "transaction_id":"4200000497202004072822298902",
  107. // "out_trade_no":"202010300857029180027000",
  108. // "out_refund_no":"1586241595",
  109. // "refund_id":"50300603862020040700031444448",
  110. // "refund_channel":[],
  111. // "refund_fee":"1",
  112. // "coupon_refund_fee":"0",
  113. // "total_fee":"1",
  114. // "cash_fee":"1",
  115. // "coupon_refund_count":"0",
  116. // "cash_refund_fee":"1
  117. // }
  118. // { // 支付宝返回结果
  119. // "code": "10000",
  120. // "msg": "Success",
  121. // "buyer_logon_id": "157***@163.com",
  122. // "buyer_user_id": "2088902485164146",
  123. // "fund_change": "Y",
  124. // "gmt_refund_pay": "2020-08-15 16:11:45",
  125. // "out_trade_no": "202002460317545607015300",
  126. // "refund_fee": "0.01",
  127. // "send_back_fee": "0.00",
  128. // "trade_no": "2020081522001464141438570535"
  129. // }
  130. }
  131. } catch (Exception $e) {
  132. $result['status'] = 0;
  133. $result['msg'] = $e->getMessage();
  134. }
  135. return $result;
  136. }
  137. public function getStatusList()
  138. {
  139. return ['-1' => __('Status -1'), '0' => __('Status 0'), '1' => __('Status 1'), '2' => __('Status 2')];
  140. }
  141. public function getPayTypeList()
  142. {
  143. return ['1' => __('Pay_type 1'), '2' => __('Pay_type 2'), '3' => __('Pay_type 3')];
  144. }
  145. public function getPlatformList()
  146. {
  147. return ['1' => __('Platform 1'), '2' => __('Platform 2')];
  148. }
  149. public function getStatusTextAttr($value, $data)
  150. {
  151. $value = $value ? $value : (isset($data['status']) ? $data['status'] : '');
  152. $list = $this->getStatusList();
  153. return isset($list[$value]) ? $list[$value] : '';
  154. }
  155. public function getPayTypeTextAttr($value, $data)
  156. {
  157. $value = $value ? $value : (isset($data['pay_type']) ? $data['pay_type'] : '');
  158. $list = $this->getPayTypeList();
  159. return isset($list[$value]) ? $list[$value] : '';
  160. }
  161. public function getPlatformTextAttr($value, $data)
  162. {
  163. $value = $value ? $value : (isset($data['platform']) ? $data['platform'] : '');
  164. $list = $this->getPlatformList();
  165. return isset($list[$value]) ? $list[$value] : '';
  166. }
  167. public function getPaytimeTextAttr($value, $data)
  168. {
  169. $value = $value ? $value : (isset($data['paytime']) ? $data['paytime'] : '');
  170. return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
  171. }
  172. protected function setPaytimeAttr($value)
  173. {
  174. return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
  175. }
  176. public function user()
  177. {
  178. return $this->belongsTo('User', 'user_id', 'id', [], 'LEFT')->setEagerlyType(0);
  179. }
  180. }