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); } }