汪总电商平台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

382 lines
12 KiB

<?php
namespace app\api\controller\wanlshop;
use app\common\controller\Api;
use think\Db;
/**
* WanlShop退款接口
*/
class Refund extends Api
{
protected $noNeedLogin = [];
protected $noNeedRight = ['*'];
/**
* 查询退款
*
* @ApiSummary (WanlShop 退款接口查询退款)
* @ApiMethod (GET)
*
*/
public function refundList()
{
//设置过滤方法
$this->request->filter(['strip_tags']);
if ($this->request->isPost()) {
$list = model('app\api\model\wanlshop\Refund')
->where('user_id', $this->auth->id)
->field('id,shop_id,goods_ids,order_type,price,type,state')
->order('createtime desc')
->paginate()
->each(function($data, $index){
if($data['order_type'] === 'goods'){
$data['goods'] = $data->goods ? $data->goods->visible(['id','title','image','price','difference']):'';
}else if($data['order_type'] === 'groups'){
$data['goods'] = $data->groups ? $data->groups->visible(['id','title','image','price','difference']):'';
}
$data['shop'] = $data->shop ? $data->shop->visible(['id','shopname']):'';
return $data;
});
$this->success('ok',$list);
}
$this->error(__('非法请求'));
}
/**
* 提交售后服务
*
* @ApiSummary (WanlShop 退款接口提交售后服务)
* @ApiMethod (POST)
*
*/
public function addApply()
{
//设置过滤方法
$this->request->filter(['strip_tags']);
if ($this->request->isPost()) {
$params = $this->request->post();
$params ? $params : ($this->error(__('非正常访问')));
$user_id = $this->auth->id;
// 1.0.8升级 判断业务来源
if($params['order_type'] === 'goods'){
$orderModel = model('app\api\model\wanlshop\Order');
$orderGoodsModel = model('app\api\model\wanlshop\OrderGoods');
}else if($params['order_type'] === 'groups'){
$orderModel = model('app\api\model\wanlshop\groups\Order');
$orderGoodsModel = model('app\api\model\wanlshop\groups\OrderGoods');
}
// 查询商品
$goods = $orderGoodsModel->get($params['goods']);
if(!$goods || $goods['refund_status'] != 0){
$this->error(__('订单中商品不存在,或已退款!'));
}
// 查询订单
$order = $orderModel
->where(['id' => $params['order_id'], 'user_id' => $user_id])
->find();
// 查询退款 1.2.0
if( model('app\api\model\wanlshop\Refund')
->where(['order_id' => $order['id'],'goods_ids' => $params['goods'],'order_type' => $params['order_type'],'user_id' => $user_id])
->count() > 0 ){
$this->error(__('退款订单已存在,请勿重新提交订单'));
}
$order ? $order : $this->error(__('订单异常'));
// 查询支付 1.1.2升级
$pay = model('app\api\model\wanlshop\Pay')->get(['order_id' => $order->id, 'type' => $params['order_type']]);
// 判断金额 1.0.2升级
if($params['money'] > $pay->price){
$this->error('非法操作:退款不能超过'. $pay->price .'元');
}
// 获取配置
$config = get_addon_config('wanlshop');
if($order['taketime']){
if(time() - ($order['taketime'] + $config['order']['customer'] * 60 * 60 * 24) > 0){
$this->error(__('订单已经超过申请售后时间'));
}
}
if($pay['pay_state'] != 1){
$this->error(__('非正常访问,订单尚未付款'));
}
// 判断是否填写
if(is_array($params['type'])){
$this->error(__('退款类型'));
}
if(is_array($params['reason'])){
$this->error(__('退款原因'));
}
if(is_array($params['expressType'])){
$this->error(__('物流状态'));
}
// 提交数据
$refund = model('app\api\model\wanlshop\Refund');
$refund->user_id = $user_id;
$refund->shop_id = $order['shop_id'];
$refund->order_id = $order['id'];
$refund->order_pay_id = $pay['id'];
// 1.0.8升级 添加业务类型
$refund->order_type = $params['order_type'];
$refund->goods_ids = $params['goods'];
$refund->expressType = $params['expressType'];
$refund->price = $params['money'];
$refund->type = $params['type'];
$refund->reason = $params['reason'];
$refund->images = $params['images'];
$refund->refund_content = $params['refund_content'];
// 创建时间 = 退款时间
// 保存
if($refund->save()){
// $order->save(['state' => 5]); // 修改订单状态,已弃用
$goods->save(['refund_status' => 1, 'refund_id' => $refund->id]); // 修改订单商品状态提交退款中,并更新退款ID
// 写入日志
$this->refundLog($refund->id, '提交'. $refund->type_text .',物流状态:'. $refund->expressType_text .',退款原因:'. $refund->reason_text .',退款金额:¥'. $refund->price .'元;退款理由:'. $refund->refund_content);
$this->success('ok', $refund->id);
}
$this->error(__('网络异常'));
}
$this->error(__('非法请求'));
}
/**
* 提交售后服务
*
* @ApiSummary (WanlShop 退款接口提交售后服务)
* @ApiMethod (POST)
* 2021年7月9日08:54:29
*/
public function editRefund()
{
//设置过滤方法
$this->request->filter(['strip_tags']);
if ($this->request->isPost()) {
$params = $this->request->post();
$params ? $params : ($this->error(__('非正常访问')));
$user_id = $this->auth->id;
// 查询退货
$refund = model('app\api\model\wanlshop\Refund')
->where(['id' => $params['id'], 'user_id' => $user_id])
->find();
$refund ? $refund : ($this->error(__('没找到退款信息,或已经退款中')));
$pay = model('app\api\model\wanlshop\Pay')->get($refund->order_pay_id);
if($params['money'] > $pay->price){
$this->error('非法操作:退款不能超过'. $pay->price .'元');
}
// 更新退款
$params['state'] = 0;
$data = $refund->update($params);
// 写入日志
$this->refundLog($data['id'], '买家修改退款:'. $data['type_text'] .',物流状态:'. $data['expressType_text'] .',退款原因:'. $data['reason_text'] .',退款金额:¥'. $data['price'] .'元;退款理由:'. $data['refund_content']);
$this->success('ok', $data['id']);
}
$this->error(__('非法请求'));
}
/**
* 查看退款详情
*
* @ApiSummary (WanlShop 退款接口查看退款详情)
* @ApiMethod (GET)
*
* @param string $id 退款ID
* 2021年7月9日08:54:34
*/
public function getRefundInfo()
{
$this->request->filter(['strip_tags']);
$id = $this->request->request('id');
$config = get_addon_config('wanlshop');
// 获取退款
$refund = $this->getRefund($id);
// 1.0.8升级 判断业务来源
if($refund['order_type'] === 'goods'){
$orderModel = model('app\api\model\wanlshop\Order');
$orderGoodsModel = model('app\api\model\wanlshop\OrderGoods');
}else if($refund['order_type'] === 'groups'){
$orderModel = model('app\api\model\wanlshop\groups\Order');
$orderGoodsModel = model('app\api\model\wanlshop\groups\OrderGoods');
}
// 获取快递列表
$kuaidi = model('app\api\model\wanlshop\Kuaidi')
->field('id,name,code')
->select();
$refund['kuaidi'] = $kuaidi?$kuaidi:[];
// 运费策略
$refund['freight_type'] = $orderModel->get($refund['order_id'])['freight_type'];
// 获取商家退货地址
if($refund['state'] == 1){
$shopConfig = model('app\api\model\wanlshop\ShopConfig')
->where(['shop_id' => $refund['shop_id']])
->field('returnAddr,returnName,returnPhoneNum')
->find();
$refund['shopConfig'] = $shopConfig?$shopConfig:[];
}
// 获取系统配置
$refund['config'] = $config['order'];
// 获取订单商品
$refund['goods'] = $orderGoodsModel
->where(['id' => $refund['goods_ids']])
->field('id,title,difference,image,price,freight_price,number')
->find();
// 获取订单商品总数
$refund['goods_number'] = $orderGoodsModel
->where(['order_id' => $refund['order_id']])
->count();
$this->success('ok', $refund);
}
/**
* 提交退货快递
*
* @ApiSummary (WanlShop 退款接口提交退货快递)
* @ApiMethod (POST)
*/
public function toExpress()
{
$this->request->filter(['strip_tags']);
if ($this->request->isPost()) {
$params = $this->request->post();
$params ? $params : ($this->error(__('非正常访问')));
// 查询退货
$refund = $this->getRefund($params['id']);
// 更新退款
$result = $refund->allowField(true)->save([
'state' => 6,
'express_name' => $params['express_name'],
'express_no' => $params['express_no'],
'returntime' => time()
]);
// 写入日志
$this->refundLog($refund['id'], '买家已退货,运单号:'.$params['express_no'].',快递公司:'.$params['express_name']);
$this->success('ok', $params['id']);
}
$this->error(__('非法请求'));
}
/**
* 提交关闭退款
*
* @ApiSummary (WanlShop 退款接口提交关闭退款)
* @ApiMethod (GET)
*/
public function closeRefund($id = null)
{
$row = model('app\api\model\wanlshop\Refund')
->where(['id' => $id, 'user_id' => $this->auth->id])
->find();
// 更新退款
$row->allowField(true)->save(['closingtime' => time(),'state' => 5]);
if($row){
// 1.0.8升级 判断业务来源 修改订单商品退款状态
if($row['order_type'] === 'goods'){
$orderGoodsModel = model('app\api\model\wanlshop\OrderGoods');
}else if($row['order_type'] === 'groups'){
$orderGoodsModel = model('app\api\model\wanlshop\groups\OrderGoods');
}
$orderGoodsModel->allowField(true)->save(['refund_status' => 4],['id' => $row['goods_ids']]);
// 写入日志
$this->refundLog($id, '买家关闭退款');
$this->success('ok', $id);
}
$this->error(__('退款订单异常,请稍后再试'));
}
/**
* 获取退款历史
*
* @ApiSummary (WanlShop 退款接口获取退款历史)
* @ApiMethod (GET)
*/
public function getRefundLog($id = null)
{
// 调用配置
$config = get_addon_config('wanlshop');
$log = model('app\api\model\wanlshop\RefundLog')
->where(['refund_id' => $id, 'user_id' => $this->auth->id])
->order('createtime desc')
->select();
if($log){
$data = [];
foreach ($log as $vo) {
if($vo['type'] == 0){
$name = $this->auth->nickname;
$avatar = $this->auth->avatar;
}else if($vo['type'] == 1){
$shop = model('app\api\model\wanlshop\Shop')->get($vo['shop_id']);
$name = $shop['shopname'];
$avatar = $shop['avatar'];
}else if($vo['type'] == 2){
$name = '小二';
$avatar = $config['config']['service_logo'];
}else{
$name = '系统';
$avatar = $config['ini']['logo'];
}
$data[] = [
'id' => $vo['id'],
'content' => $vo['content'],
'name' => $name,
'createtime_text' => $vo['createtime_text'],
'avatar' => $avatar
];
}
$this->success('ok', $data);
}
$this->error(__('退款订单异常,请稍后再试'));
}
/**
* 客服介入
*
* @ApiSummary (WanlShop 退款接口客服介入)
* @ApiMethod (GET)
*/
public function arbitrationRefund($id = null)
{
$refund = $this->getRefund($id);
if($refund['state'] == 2){
$refund->save(['state' => 3]);
$this->refundLog($id, '买家申请客服介入');
$this->success('ok', $id);
}
$this->error(__('卖家拒绝后,才可以申请客服介入'));
}
/**
* 退款日志(方法内使用)
*
* @ApiSummary (WanlShop 退款日志)
* @ApiMethod (POST)
*
* @param string $refund_id 退款ID
* @param string $content 日志内容
*/
private function refundLog($refund_id = 0, $content = '')
{
return model('app\api\model\wanlshop\RefundLog')->save([
'user_id' => $this->auth->id,
'refund_id' => $refund_id,
'content' => $content
]);
}
/**
* 查询退款(方法内使用)
*
* @ApiSummary (WanlShop 查询退款)
* @ApiMethod (POST)
*
* @param string $refund_id 退款ID
*/
private function getRefund($refund_id = 0)
{
$refund = model('app\api\model\wanlshop\Refund')
->where(['id' => $refund_id, 'user_id' => $this->auth->id])
->find();
return $refund ? $refund : ($this->error(__('没找到退款信息,或已经退款中')));
}
}