文件
mashangyoujiu/Application/Api/Controller/RechargeRefundController.class.php

653 行
34 KiB
PHP
可执行文件

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<?php
namespace Api\Controller;
use Common\Business\PayCoupon;
use Common\Model\InstallAccountModel;
use Common\Model\RetailRechargeOrderModel;
use Common\Model\RetailVipRechargeModel;
use Pay\Controller\CloudPayController;
use Think\Controller;
use Think\Page;
//[1.9.5]
/**
* 会员充值退款
* Class RechargeRefundController
* @package Api\Controller
*/
class RechargeRefundController extends Controller
{
/**
* 会员充值列表
* @param $id retail_vip表id
* @param $merchant_id 商户id
* @param $store_id 门店id
* @param $cashier_id 收银员id
* @param $type 1:商户 2:门店 3:收银端
* @param $page
* @param $limit
* @return mixed
*/
public function rechargeList($id, $merchant_id, $store_id, $cashier_id, $type, $page, $limit)
{
$RechargeOrderModel = new RetailRechargeOrderModel();
$VipModel = D('RetailVip');
if ($type == 2) {
$where['store_id'] = $store_id;
} elseif ($type == 3) {
$where['user_type'] = 3;
$where['cashier_id'] = $cashier_id;
$where['scene_type'] = 1;
}
$where['vid'] = $id;
$where['status'] = 1;
$where['merchant_id'] = $merchant_id;
$where['type'] = 1;;
$where['refund_status'] = 1;
$where['recharge_order_id'] = 0;
$list = $RechargeOrderModel->getSelect($where, $field = '*', $order = 'id desc', $page = $page . ',' . $limit);
$count = $RechargeOrderModel->getCount($where);
foreach ($list as $k => &$v) {
$v['index'] = $k + 1;
$vip_name = $VipModel->getFindField(array($VipModel::ID => $v['vid']), $VipModel::NAME);
if (empty($vip_name)) {
$vip_name = $VipModel->getFindField(array($VipModel::ID => $v['vid']), $VipModel::NICK_NAME);
}
$v['vip_name'] = $vip_name;
$v['add_time'] = date('Y-m-d H:i:s', $v['add_time']);
if ($v['repay_name'] == 0) {
$v['aging_repay_name'] = '直接到账';
} elseif ($v['repay_name'] == 1) {
$v['aging_repay_name'] = '分期到账';
} else {
$v['aging_repay_name'] = '未知类型';
}
if ($v['user_type'] == 1) {
$v['user_type'] = '商家';
} elseif ($v['user_type'] == 2) {
$v['user_type'] = '店长';
} elseif ($v['user_type'] == 3) {
$v['user_type'] = '收银员';
} else {
if ($v['scene_type'] == 5) {
$v['user_type'] = '公众号';
} else {
$v['user_type'] = '小程序';
}
}
if ($v['scene_type'] == 1) {
$v['scene_type'] = '收银机';
} elseif ($v['scene_type'] == 2) {
$v['scene_type'] = '商户后台';
} elseif ($v['scene_type'] == 3) {
$v['scene_type'] = '门店后台';
} elseif ($v['scene_type'] == 4) {
$v['scene_type'] = '小程序';
} elseif ($v['scene_type'] == 5) {
$v['scene_type'] = '公众号';
} elseif ($v['scene_type'] == 6) {
$v['scene_type'] = '小助手';
}
}
$res['data'] = $list;
$res['count'] = $count;
$res['status'] = 1;
$res['msg'] = '获取成功';
return $res;
}
/**
* 会员充值退款
* @param $merchant_id 商户id
* @param $id retail_vip表id
* @param $scene_Type 1收银机 2商户后台 3门店后台
* @return mixed
*/
public function refundMoney($merchant_id, $id, $scene_Type)
{
$RechargeOrderModel = D('RetailRechargeOrder');
$IntegralOrderModel = D('RetailIntegralOrder');
$VipMCouponModel = D('RetailVipMCoupon');
$VipModel = D('RetailVip');
$MCouponModel = D('RetailMCoupon');
$VipCardModel = D('RetailVipCard');
$CardBagModel = D('CardBag');
$subCardModel = D('SubCard');
$where = array(
$RechargeOrderModel::ID => $id,
$RechargeOrderModel::MERCHANT_ID => $merchant_id,
$RechargeOrderModel::STATUS => 1,
$RechargeOrderModel::TYPE => 1,
$RechargeOrderModel::REFUND_STATUS => 1,
$RechargeOrderModel::RECHARGE_ORDER_ID => 0,
);
$rechargeOrder = $RechargeOrderModel->getFind($where);
if ($rechargeOrder) {
if ($rechargeOrder[$RechargeOrderModel::VIP_RECHARGE_ID] > 0) { //判断是否从常规会员变成plus会员
$RVRModel = D('RetailVipRecharge');
$vipRecharge = $RVRModel->getFind(array($RVRModel::ID => $rechargeOrder[$RechargeOrderModel::VIP_RECHARGE_ID]));
if ($vipRecharge[$RVRModel::SCENE_TYPE] == 2) {
$res['status'] = 0;
$res['msg'] = '该充值为升级Plus活动,不能退款';
return $res;
} else if ($vipRecharge[$RVRModel::SCENE_TYPE] == 3) {
$res['status'] = 0;
$res['msg'] = '该充值为续费Plus活动,不能退款';
return $res;
}
}
//减少retail_vip表balance值
$VMap[$VipModel::ID] = $rechargeOrder[$RechargeOrderModel::VID];
$vip = $VipModel->getFind($VMap);
if (empty($vip)) {
$res['status'] = 0;
$res['msg'] = '数据出错';
return $res;
}
//判断retail_vip表balance
if ($vip[$VipModel::BALANCE] < $rechargeOrder[$RechargeOrderModel::ALL_MONEY]) {
$res['status'] = 0;
$res['msg'] = '会员余额不足,退款失败';
return $res;
}
//积分
$integralDetail = $IntegralOrderModel->getFind(array($IntegralOrderModel::RECHARGE_ORDER_ID => $id));
if (!empty($integralDetail) && ($vip[$VipModel::INTEGRAL] < $integralDetail[$IntegralOrderModel::INTEGRAL])) {
$res['status'] = 0;
$res['msg'] = '积分已被使用,不能退款';
return $res;
}
//优惠券券包
$map = array(
$VipMCouponModel::RECHARGE_ORDER_ID => $id,
);
$couponList = $VipMCouponModel->getSelect($map);
if (!empty($couponList)) {
foreach ($couponList as $v) {
if ($v[$VipMCouponModel::IS_USE] == 2) {
$res['status'] = 0;
$res['msg'] = '优惠券已被使用,不能退款';
return $res;
}
}
}
//次卡
$subCardList = $VipCardModel->getFind(array($VipCardModel::TYPE => 1, $VipCardModel::RECHARGE_ORDER_ID => $id));
if (!empty($subCardList)) {
if ($subCardList[$VipCardModel::USE_NUM] > 0) {
$res['status'] = 0;
$res['msg'] = '次卡已被使用,不能退款';
return $res;
}
}
//卡包
$bagCardList = $VipCardModel->getSelect(array($VipCardModel::TYPE => 2, $VipCardModel::RECHARGE_ORDER_ID => $id));
if (!empty($bagCardList)) {
foreach ($bagCardList as $v) {
if ($v[$VipCardModel::USE_NUM] > 0) {
$res['status'] = 0;
$res['msg'] = '卡包已被使用,不能退款';
return $res;
}
}
}
//添加pay_order数据
$RPOModel = D('RetailPayOrder');
$PMap[$RPOModel::ID] = $rechargeOrder[$RechargeOrderModel::PAY_ORDER_ID];
$paySuccess = $RPOModel->getFind($PMap);
//加上代金券金额
$paySuccess[$RPOModel::TRADE_AMOUNT] = $paySuccess['pay_coupon_fee'] >0?round($paySuccess[$RPOModel::TRADE_AMOUNT] + $paySuccess['pay_coupon_fee'],2):$paySuccess[$RPOModel::TRADE_AMOUNT];
$item = array(
$RPOModel::PAY_ORDER_ID => $paySuccess[$RPOModel::ID], //'退款原订单id',
$RPOModel::ORDER_TYPE => 2, //'1购买商品 2会员充值',
$RPOModel::SCENE_TYPE => 2, //'1付款 3退款,
$RPOModel::PAY_TYPE => $paySuccess[$RPOModel::PAY_TYPE], //'1微信 2支付宝 3现金 4小程序微信 5其他支付方式 6会员余额',
$RPOModel::TRADE_AMOUNT => $paySuccess[$RPOModel::TRADE_AMOUNT], //'订单金额',
$RPOModel::STORE_ID => $paySuccess[$RPOModel::STORE_ID], //'门店id',
$RPOModel::MERCHANT_ID => $paySuccess[$RPOModel::MERCHANT_ID], //'商户id',
$RPOModel::CASHIER_ID => $paySuccess[$RPOModel::CASHIER_ID], //'收银员id',
$RPOModel::VID => $paySuccess[$RPOModel::VID], //'会员id',
$RPOModel::TRADE_NO => $paySuccess[$RPOModel::TRADE_NO], //'订单微信支付宝流水号',
$RPOModel::ADD_TIME => time(), //'订单创建时间',
$RPOModel::M_PAY_TYPE => $paySuccess[$RPOModel::M_PAY_TYPE], //'订单支付类型 1普通商户模式 2服务商模式 3新大陆模式',
$RPOModel::BILL_ID => $paySuccess[$RPOModel::BILL_ID], //'bill表id',
$RPOModel::OTHER_PAY_ID => $paySuccess[$RPOModel::OTHER_PAY_ID], //'其他支付id',
);
$new_pay_order = $RPOModel->addPayOrder($item);
//分期到账状态修改
$InstallAccountModel = new InstallAccountModel();
$InstallAccountModel->updateOrder(['order_id' => $rechargeOrder['id']], ['state' => 1]);
$PaySetModel = D('RetailPaySet');
$paySet = $PaySetModel->getFindMerchantPaySet($merchant_id); //支付设置
if ($new_pay_order) {
$new_pay_order['before_amount'] = $paySuccess[$RPOModel::TRADE_AMOUNT];
$new_pay_order['before_trade_no'] = $paySuccess[$RPOModel::OUT_TRADE_NO];
if ($item[$RPOModel::PAY_TYPE] == 1 || $item[$RPOModel::PAY_TYPE] == 2) { //'1微信 2支付宝
if ($new_pay_order[$RPOModel::M_PAY_TYPE] == 3) {
//新大陆
$res = A('Pay/PayContinent')->toOrderRefund_v3($new_pay_order);
} else if ($new_pay_order[$RPOModel::M_PAY_TYPE] == 4) {
//云闪付
$payObj = new CloudPayController();
$res = $payObj->cloudRefund($new_pay_order, $paySet['config'], $item[$RPOModel::PAY_TYPE]);
} else if ($new_pay_order[$RPOModel::M_PAY_TYPE] == 7) {
//钱客云
$moneyGuest = new \MoneyGuestPay\Business\MoneyGuest();
$res = $moneyGuest->moneyGuestRefund($new_pay_order, $paySet['config']);
if($res['status'] == 1){
//退钱分润
A('Pay/Base')->doRefundRate($new_pay_order['trade_no'], $new_pay_order['trade_amount'], 6);//钱客云分润
}
} else if ($new_pay_order[$RPOModel::PAY_TYPE] == 1) {
//微信
$res = A('Pay/NewWxPay')->toWxRefund_v2($new_pay_order, $paySet['config']);
} else {
//支付宝
$res = A('Pay/NewAliPay')->toAliRefund_v2($new_pay_order, $paySet['config']);
}
if ($res['status'] != 1) {
$res['status'] = 0;
$res['msg'] = '退款失败';
return $res;
} else {
$pMap = array($RPOModel::ID => $new_pay_order[$RPOModel::ID]);
$save = array(
$RPOModel::ORDER_STATE => 'REFUND',
$RPOModel::TRADE_DATE => time()
);
$RPOModel->updateOrder($pMap, $save);
}
} else if ($item[$RPOModel::PAY_TYPE] == 4) {
//小程序
if ($new_pay_order[$RPOModel::M_PAY_TYPE] == 3) {
$res = A('Pay/PayContinent')->toOrderRefund_v3($new_pay_order);
if ($res['status'] == 1) {
$pMap = array($RPOModel::ID => $new_pay_order[$RPOModel::ID]);
$save = array(
$RPOModel::ORDER_STATE => 'REFUND',
$RPOModel::TRADE_DATE => time()
);
$RPOModel->updateOrder($pMap, $save);
} else {
$res['status'] = 0;
$res['msg'] = '退款失败';
return $res;
}
} else if ($new_pay_order[$RPOModel::M_PAY_TYPE] == 4) {
//云闪付
$payObj = new CloudPayController();
$res = $payObj->cloudRefund($new_pay_order, $paySet['config'], 1);
if ($res['status'] == 1) {
$pMap = array($RPOModel::ID => $new_pay_order[$RPOModel::ID]);
$save = array(
$RPOModel::ORDER_STATE => 'REFUND',
$RPOModel::TRADE_DATE => time()
);
$RPOModel->updateOrder($pMap, $save);
} else {
$res['status'] = 0;
$res['msg'] = '退款失败';
return $res;
}
} else if ($new_pay_order[$RPOModel::M_PAY_TYPE] == 7) {
//钱客云
$moneyGuest = new \MoneyGuestPay\Business\MoneyGuest();
$res = $moneyGuest->moneyGuestRefund($new_pay_order, $paySet['config']);
if($res['status'] == 1){
//退钱分润
A('Pay/Base')->doRefundRate($new_pay_order['trade_no'], $new_pay_order['trade_amount'], 6);//钱客云分润
}
} else {
$out_refund_no = $new_pay_order[$RPOModel::OUT_TRADE_NO];
$payConfig = $paySet['config'];
if ($paySuccess[$RPOModel::M_PAY_TYPE] == 1 || $paySuccess[$RPOModel::M_PAY_TYPE] == 0) {
$key = $payConfig[$PaySetModel::XCX_SECRET_KEY];
$post['appid'] = $payConfig[$PaySetModel::XCX_APPID];
$post['mch_id'] = $payConfig[$PaySetModel::XCX_MCH_ID];
$apiclient_cert = $payConfig[$PaySetModel::XCX_AC_CERT];
$apiclient_key = $payConfig[$PaySetModel::XCX_AC_KEY];
} else {
$SystemConfigModel = D('SystemConfig');
$systemConfig = $payConfig['systemConfig'];
$post['appid'] = $systemConfig[$SystemConfigModel::WX_APPID];
$post['mch_id'] = $systemConfig[$SystemConfigModel::MCH_ID];
$post['sub_mch_id'] = $payConfig[$PaySetModel::XCX_SUB_MCH_ID];
$post['sub_appid'] = $payConfig[$PaySetModel::XCX_SUB_APPID];
$key = $systemConfig[$SystemConfigModel::WX_KEY];
$apiclient_cert = $systemConfig[$SystemConfigModel::WX_AC_CERT];
$apiclient_key = $systemConfig[$SystemConfigModel::WX_AC_KEY];
}
$post['nonce_str'] = createKey();
$post['out_refund_no'] = $out_refund_no;
$post['out_trade_no'] = $paySuccess[$RPOModel::OUT_TRADE_NO];
$post['spbill_create_ip'] = $_SERVER['SERVER_ADDR']; //服务器终端的ip
$post['total_fee'] = $paySuccess[$RPOModel::TRADE_AMOUNT] * 100; //总金额 最低为一分钱 必须是整数
$post['refund_fee'] = $paySuccess[$RPOModel::TRADE_AMOUNT] * 100;
$sign = createSign($post, $key); //生成签名
$post['sign'] = $sign;
$post_xml = arrToXml($post);
$url = 'https://api.mch.weixin.qq.com/secapi/pay/refund';
$xml = http_cert_request($url, $post_xml, $apiclient_cert, $apiclient_key); //POST方式请求http
$array = xmlToArray($xml);
if ($array['return_code'] == "SUCCESS" && $array['result_code'] == "SUCCESS") {
if ($paySuccess[$RPOModel::M_PAY_TYPE] == 1 || $paySuccess[$RPOModel::M_PAY_TYPE] == 0) {
$search['appid'] = $payConfig[$PaySetModel::XCX_APPID];
$search['mch_id'] = $payConfig[$PaySetModel::XCX_MCH_ID];
} else {
$search['appid'] = $systemConfig[$SystemConfigModel::WX_APPID];
$search['mch_id'] = $systemConfig[$SystemConfigModel::MCH_ID];
$search['sub_mch_id'] = $payConfig[$PaySetModel::XCX_SUB_MCH_ID];
$search['sub_appid'] = $payConfig[$PaySetModel::XCX_SUB_APPID];
}
$search['nonce_str'] = createKey();
$search['transaction_id'] = $array['transaction_id'];
$sign = createSign($search, $key); //签名
$search['sign'] = $sign;
$search_xml = arrToXml($search);
$url = 'https://api.mch.weixin.qq.com/pay/refundquery';
$xml = http_request($url, $search_xml, $apiclient_cert, $apiclient_key); //POST方式请求http
$search_res = xmlToArray($xml);
if ($search_res['return_code'] == "SUCCESS" && $search_res['result_code'] == "SUCCESS") {
switch ($search_res['refund_status_0']) {
case 'SUCCESS':
case 'PROCESSING':
$result['status'] = 1;
$result['refund_no'] = $search_res['refund_id_0'];
$result['msg'] = '退款成功';
$pMap = array($RPOModel::ID => $new_pay_order[$RPOModel::ID]);
$save = array(
$RPOModel::TRADE_NO => $search_res['refund_id_0'],
$RPOModel::ORDER_STATE => 'REFUND',
$RPOModel::TRADE_DATE => time()
);
$RPOModel->updateOrder($pMap, $save);
break;
case 'REFUNDCLOSE':
$result['status'] = 0;
$result['msg'] = '退款关闭';
break;
case 'CHANGE':
$result['status'] = 0;
$result['msg'] = '退款异常,请到商户品台手动处理';
default:
$result['status'] = 0;
$result['msg'] = '退款失败';
}
if ($result['status'] != 1) {
return $result;
}
} else {
$result['status'] = 0;
$result['msg'] = '退款失败';
return $result;
}
} else {
$result['return'] = $array;
$result['status'] = 0;
$result['msg'] = $array['err_code_des'] ? $array['err_code_des'] : ($array['return_msg'] ? $array['return_msg'] : '退款失败');
return $result;
}
}
} else if ($item[$RPOModel::PAY_TYPE] == 3) {
//现金
$pMap = array($RPOModel::ID => $new_pay_order[$RPOModel::ID]);
$save = array(
$RPOModel::ORDER_STATE => 'REFUND',
$RPOModel::TRADE_DATE => time()
);
$RPOModel->updateOrder($pMap, $save);
}
} else {
$res['status'] = 0;
$res['msg'] = '退款订单创建失败';
return $res;
}
//微信代金券状态修改
if ($res['response']['coupon_refund_count'] > 0 || $search_res['refund_count'] > 0) {
if (!empty($res['response']['coupon_refund_count'])) {
$pay_info = $res['response'];
} else if ($search_res['refund_count'] > 0) {
$pay_info = $search_res;
$pay_info['coupon_refund_count'] = $search_res['refund_count'];
$pay_info['coupon_refund_id_0'] = $search_res['coupon_refund_id_0_0'];
$pay_info['cash_refund_fee'] = $search_res['cash_fee'];
}
$PayCouponClass = new PayCoupon();
$couponResult = $PayCouponClass->couponVerification_v1(json_encode( [
'pay_info' => $pay_info,
'merchant_id' => $item['merchant_id'],
'coupon_way' => 2
])); //修改代金券状态
if ($couponResult['status'] == 1) {
//记录代金券退款金额
$RPOModel->updateOrder([
'id' => $new_pay_order['id']
], [
'pay_coupon_fee' => $paySuccess['pay_coupon_fee'],
'pay_coupon_id_str' => $couponResult['data']['pay_coupon_id_str'],
'refund_coupon_fee' => $couponResult['data']['pay_coupon_fee'],
'trade_amount' => $couponResult['data']['cash_fee'],
]);
$RPOModel->toSetInc([
'id' => $paySuccess['id']
], 'refund_coupon_fee', $couponResult['data']['pay_coupon_fee']);
$recharge_data = [
'pay_coupon_id_str'=>$couponResult['data']['pay_coupon_id_str'],
'pay_coupon_fee'=>$couponResult['data']['pay_coupon_fee']
];
//更新实际付款的金额
$paySuccess[$RPOModel::TRADE_AMOUNT] = round($paySuccess[$RPOModel::TRADE_AMOUNT] - $couponResult['data']['pay_coupon_fee'],2);
}
}
//退积分
if (!empty($integralDetail)) {
$integralReduce = $VipModel->toSetDec($VMap, $VipModel::INTEGRAL, $integralDetail[$IntegralOrderModel::INTEGRAL]); //减少retail_vip积分
if (empty($integralReduce)) {
$res['status'] = 0;
$res['msg'] = '积分退回失败';
return $res;
}
unset($integralDetail[$IntegralOrderModel::ID]);
$integralDetail[$IntegralOrderModel::TYPE] = 10;
$integralDetail[$IntegralOrderModel::ADD_TIME] = time();
$integralDetail[$IntegralOrderModel::REMARK] = '退款' . $integralDetail[$IntegralOrderModel::INTEGRAL] . '积分';
$integralAdd = $IntegralOrderModel->addOrder($integralDetail); //添加integral_order记录
if (empty($integralAdd)) {
$res['status'] = 0;
$res['msg'] = '积分退回失败';
return $res;
}
}
//退优惠券 券包
if (!empty($couponList)) {
$map[$VipMCouponModel::MCOUPON_GROUP_ID] = array('exp', 'is null');
$couponIds = $VipMCouponModel->getFindField($map, $VipMCouponModel::MCOUPON_ID, true); //发放的所有优惠券id
$map[$VipMCouponModel::MCOUPON_GROUP_ID] = array('gt', 0);
$couponGroupId = $VipMCouponModel->getFindField($map, $VipMCouponModel::MCOUPON_GROUP_ID); //发放的所有券包id
if ($couponIds || $couponGroupId) {
$couponUpdate = $VipMCouponModel->deleteOrder(array($VipMCouponModel::RECHARGE_ORDER_ID => $id)); //删除优惠券
if (empty($couponUpdate)) {
$res['status'] = 0;
$res['msg'] = '优惠券退回失败';
return $res;
}
if ($couponIds) {
$couponInc = $MCouponModel->toSetInc(array($MCouponModel::ID => array('in', $couponIds)), $MCouponModel::COUPON_NUM, 1); //增加剩余数量
if (empty($couponInc)) {
$res['status'] = 0;
$res['msg'] = '优惠券退回失败';
return $res;
}
}
if ($couponGroupId) {
$RMCGModel = D('RetailMCouponGroup');
$couponGroupInc = $RMCGModel->toSetInc(array($RMCGModel::ID => $couponGroupId), $RMCGModel::COUPON_GROUP_NUM, 1); //增加剩余数量
if (empty($couponGroupInc)) {
$res['status'] = 0;
$res['msg'] = '优惠券退回失败';
return $res;
}
}
}
}
//退次卡
if (!empty($subCardList)) {
$subDel = $VipCardModel->deleteOrder(array($VipCardModel::ID => $subCardList[$VipCardModel::ID])); //删除次卡
if (!$subDel) {
$res['status'] = 0;
$res['msg'] = '次卡退回失败';
return $res;
}
$subAddNum = $subCardModel->toSetInc(array($subCardModel::ID => $subCardList[$VipCardModel::SUB_CARD_ID]), $subCardModel::SUR_PLUS, 1); //次卡加库存
if (!$subAddNum) {
$res['status'] = 0;
$res['msg'] = '次卡退回失败';
return $res;
}
}
//退卡包
if (!empty($bagCardList)) {
$bagDel = $VipCardModel->deleteOrder(array($VipCardModel::TYPE => 2, $VipCardModel::RECHARGE_ORDER_ID => $id)); //该卡包下面的次卡删除
if (empty($bagDel)) {
$res['status'] = 0;
$res['msg'] = '卡包退回失败';
return $res;
}
$bagAdd = $CardBagModel->toSetInc(array($CardBagModel::ID => $bagCardList[0][$VipCardModel::CARD_BAG_ID]), $CardBagModel::SUR_PLUS, 1);
if (empty($bagAdd)) {
$res['status'] = 0;
$res['msg'] = '卡包退回失败';
return $res;
}
}
//减少会员余额
$balance = $VipModel->toSetDec($VMap, $VipModel::BALANCE, $rechargeOrder['all_money']);
if (empty($balance)) {
$res['status'] = 0;
$res['msg'] = '金额退回失败';
return $res;
}
//修改refund_status为2
$recharge_data['refund_status'] = 2;
$updateStatus = $RechargeOrderModel->updateOrder($where, $recharge_data);
if (empty($updateStatus)) {
$res['status'] = 0;
$res['msg'] = '退款失败';
return $res;
}
//添加recharge_order表退款记录
$addRechargeOrder = $rechargeOrder;
unset($addRechargeOrder[$RechargeOrderModel::ID]);
switch ($scene_Type) {
case 1:
$addRechargeOrder[$RechargeOrderModel::USER_TYPE] = 3;
break;
case 2:
$addRechargeOrder[$RechargeOrderModel::USER_TYPE] = 1;
break;
case 3:
$addRechargeOrder[$RechargeOrderModel::USER_TYPE] = 2;
break;
}
$addRechargeOrder['pay_order_id'] = $new_pay_order['id'];
$addRechargeOrder[$RechargeOrderModel::SCENE_TYPE] = $scene_Type;
$addRechargeOrder[$RechargeOrderModel::TYPE] = 9;
$addRechargeOrder[$RechargeOrderModel::ADD_TIME] = time();
$addRechargeOrder[$RechargeOrderModel::REMARK] = '充值退款' . $rechargeOrder['all_money'] . '元';
$addRechargeOrder[$RechargeOrderModel::RECHARGE_ORDER_ID] = $rechargeOrder[$RechargeOrderModel::ID];
$addRecharge = $RechargeOrderModel->addOrder($addRechargeOrder);
if (empty($addRecharge)) {
$res['status'] = 0;
$res['msg'] = '退款失败';
return $res;
}
//修改pay_order表refund_money
if ($paySuccess[$RPOModel::TRADE_AMOUNT] != 0) {
$update = $RPOModel->updateOrder($PMap, array($RPOModel::REFUND_MONEY => $paySuccess[$RPOModel::TRADE_AMOUNT]));
if (empty($update)) {
$res['status'] = 0;
$res['msg'] = '退款失败';
return $res;
}
}
$printArr = $this->printData($paySuccess);
A('PayApi/Printer')->balanceRefundPrint($printArr);
$res['status'] = 1;
$res['msg'] = '退款成功';
$res['data'] = $printArr;
} else {
$res['status'] = 0;
$res['msg'] = '数据出错';
}
return $res;
}
/*
* 充值退款打印数据
*/
public function printData($paySuccess)
{
$VipModel = D('RetailVip');
$merchant_id = $paySuccess['merchant_id'];
$vip_info = $VipModel->getFind(array('id' => $paySuccess['vid']));
$vip_number = $vip_info['mobile_phone'] ? $vip_info['mobile_phone'] : $vip_info['cardnum'];
$vip_number = substr($vip_number, 0, 3) . '****' . substr($vip_number, -3);
if ($vip_info['plus_type'] == 2) {
$grade_name = 'PLUS';
} else {
$VipIntegralModel = D('RetailVipIntegral');
$where = array(
$VipIntegralModel::MERCHANT_ID => $merchant_id,
$VipIntegralModel::DISCOUNT => array('gt', 0),
$VipIntegralModel::MIN_INTEGRAL => array('ELT', $vip_info[$VipModel::GRADE_INTEGRAL])
);
$grade = $VipIntegralModel->getOrderFind($where, '*', $VipIntegralModel::MIN_INTEGRAL . ' desc');
if (empty($grade)) {
$grade_name = '普通会员';
} else {
$grade_name = $grade[$VipIntegralModel::CARD_NAME];
}
}
switch ($paySuccess['pay_type']) {
case 1:
$pay_name = '微信';
break;
case 2:
$pay_name = '支付宝 ';
break;
case 3:
$pay_name = '现金';
break;
case 4:
$pay_name = '小程序微信 ';
break;
case 5:
$pay_name = '其他支付方式 ';
break;
}
$StoreModel = D('RetailStore');
$store_name = $StoreModel->getFindField(array($StoreModel::ID => $paySuccess['store_id']), $StoreModel::STORE_NAME); //门店名称
$printArr = array(
'store_id' => $paySuccess['store_id'], //门店id
'store_name' => $store_name, //门店名称
'order_number' => $paySuccess['out_trade_no'], //退款订单
'trade_amount' => round($paySuccess['trade_amount'], 2), //退款金额
'pay_name' => $pay_name, //退款方式
'grade_name' => $grade_name, //等级
'vip_number' => $vip_number, //会员号
'balance' => round($vip_info['balance'], 2), //余额
'time' => date('Y-m-d H:i:s', time()), //退款时间
'name' => $vip_info['name'] ? $vip_info['name'] : ($vip_info['nickname'] ? $vip_info['nickname'] : '未设置'), //会员名称
'integral' => $vip_info['integral'] ? $vip_info['integral'] : 0
);
return $printArr;
}
}