123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- <?php
- namespace app\admin\model;
- use addons\epay\library\Service;
- use think\Db;
- use think\Model;
- class RecharOrder extends Model
- {
-
-
- // 表名
- protected $name = 'rechar_order';
-
- // 自动写入时间戳字段
- protected $autoWriteTimestamp = 'int';
- // 定义时间戳字段名
- protected $createTime = 'createtime';
- protected $updateTime = 'updatetime';
- protected $deleteTime = false;
- // 追加属性
- protected $append = [
- 'status_text',
- 'pay_type_text',
- 'platform_text',
- 'paytime_text'
- ];
- public function old_refund($params = [])
- {
- $result = [
- 'status' => 1,
- 'msg' => '',
- 'data' => [],
- ];
- try {
- $order = isset($params['order']) ? $params['order'] : [];
- $table = isset($params['table']) ? $params['table'] : '';
- $tableId = isset($params['table_id']) ? $params['table_id'] : 0;
- $refund_price = isset($params['refund_price']) ? $params['refund_price'] : 0.00;
- $remark = isset($params['remark']) ? $params['remark'] : '';
- // 生成退款单
- $refund_data = [
- 'out_refund_no'=> createUniqueNo('R',$tableId),
- 'pay_fee' => $order['pay_fee'],
- 'refund_price' => $refund_price,
- 'pay_type' => $order['pay_type'],
- 'status' => 0,
- 'createtime' => time(),
- 'updatetime' => time(),
- 'table' => $table,
- 'table_id' => $tableId,
- ];
- $refund_log_id = Db::name('order_refund_log')->insertGetId($refund_data);
- if (in_array($order['pay_type'],[1,2])) {
- // 微信|支付宝退款
- // 退款数据
- $order_data = [
- 'out_trade_no' => $order['pay_out_trade_no']
- ];
- if ($order['pay_type'] == 1) {//微信
- $total_fee = $order['pay_fee'] * 100;
- $refund_fee = $refund_price * 100;
- $order_data = array_merge($order_data, [
- 'out_refund_no' => $refund_data['out_refund_no'],
- 'total_fee' => $total_fee,
- 'refund_fee' => $refund_fee,
- 'refund_desc' => $remark,
- ]);
- } elseif ($order['pay_type'] == 2) {//支付宝
- $order_data = array_merge($order_data, [
- 'out_request_no' => $refund_data['out_refund_no'],
- 'refund_amount' => $refund_price,
- ]);
- }
- //
- if ($order['pay_type'] == 1) {
- $wxpay = new \app\common\library\Wxpay;
- $wxresult = $wxpay->WxPayRefund($order_data);
- // 微信通知回调 pay->notifyr
- if ($wxresult['return_code'] == 'SUCCESS' && $wxresult['result_code'] == 'SUCCESS') {
- Db::name('order_refund_log')->where('id',$refund_log_id)->update(['status'=>1]);
- } else {
- throw new Exception($result['return_msg']);
- }
- } elseif ($order['pay_type'] == 2) {
- $aliresult = Service::submitRefund($order['pay_fee'],$refund_price,$order['pay_out_trade_no'],$refund_data['out_refund_no'],'alipay',$remark,'');
- if($aliresult['code'] == '10000'){
- Db::name('order_refund_log')->where('id',$refund_log_id)->update(['status'=>1]);
- }else{
- throw new Exception($aliresult['msg']);
- }
- /* return 'alipay wrong way';
- $alipay = new \app\common\library\AliPay;
- $result = $alipay->AliPayRefund($order_data);
- // 支付宝通知回调 pay->notifyx
- return $result;*/
- /*if ($result['code'] == "10000") {
- return true;
- } else {
- throw new \Exception($result['msg']);
- }*/
- }
- // { // 微信返回结果
- // "return_code":"SUCCESS",
- // "return_msg":"OK",
- // "appid":"wx39cd0799d4567dd0",
- // "mch_id":"1481069012",
- // "nonce_str":"huW9eIAb5BDPn0Ma",
- // "sign":"250316740B263FE53F5DFF50AF5A8FA1",
- // "result_code":"SUCCESS",
- // "transaction_id":"4200000497202004072822298902",
- // "out_trade_no":"202010300857029180027000",
- // "out_refund_no":"1586241595",
- // "refund_id":"50300603862020040700031444448",
- // "refund_channel":[],
- // "refund_fee":"1",
- // "coupon_refund_fee":"0",
- // "total_fee":"1",
- // "cash_fee":"1",
- // "coupon_refund_count":"0",
- // "cash_refund_fee":"1
- // }
- // { // 支付宝返回结果
- // "code": "10000",
- // "msg": "Success",
- // "buyer_logon_id": "157***@163.com",
- // "buyer_user_id": "2088902485164146",
- // "fund_change": "Y",
- // "gmt_refund_pay": "2020-08-15 16:11:45",
- // "out_trade_no": "202002460317545607015300",
- // "refund_fee": "0.01",
- // "send_back_fee": "0.00",
- // "trade_no": "2020081522001464141438570535"
- // }
- }
- } catch (Exception $e) {
- $result['status'] = 0;
- $result['msg'] = $e->getMessage();
- }
- return $result;
- }
-
- public function getStatusList()
- {
- return ['-1' => __('Status -1'), '0' => __('Status 0'), '1' => __('Status 1'), '2' => __('Status 2')];
- }
- public function getPayTypeList()
- {
- return ['1' => __('Pay_type 1'), '2' => __('Pay_type 2'), '3' => __('Pay_type 3')];
- }
- public function getPlatformList()
- {
- return ['1' => __('Platform 1'), '2' => __('Platform 2')];
- }
- public function getStatusTextAttr($value, $data)
- {
- $value = $value ? $value : (isset($data['status']) ? $data['status'] : '');
- $list = $this->getStatusList();
- return isset($list[$value]) ? $list[$value] : '';
- }
- public function getPayTypeTextAttr($value, $data)
- {
- $value = $value ? $value : (isset($data['pay_type']) ? $data['pay_type'] : '');
- $list = $this->getPayTypeList();
- return isset($list[$value]) ? $list[$value] : '';
- }
- public function getPlatformTextAttr($value, $data)
- {
- $value = $value ? $value : (isset($data['platform']) ? $data['platform'] : '');
- $list = $this->getPlatformList();
- return isset($list[$value]) ? $list[$value] : '';
- }
- public function getPaytimeTextAttr($value, $data)
- {
- $value = $value ? $value : (isset($data['paytime']) ? $data['paytime'] : '');
- return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
- }
- protected function setPaytimeAttr($value)
- {
- return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
- }
- public function user()
- {
- return $this->belongsTo('User', 'user_id', 'id', [], 'LEFT')->setEagerlyType(0);
- }
- }
|