admin/app/common/services/CreditPay.php

151 lines
4.6 KiB
PHP

<?php
/**
* Created by PhpStorm.
* Author:
* Date: 2017/3/24
* Time: 下午12:42
*/
namespace app\common\services;
use app\backend\modules\member\models\MemberRelation;
use app\common\models\finance\Balance;
use app\common\models\PayOrder;
use app\common\models\PayRefundOrder;
use app\common\services\finance\BalanceChange;
use app\frontend\modules\finance\services\BalanceService;
use app\common\models\OrderPay;
use app\common\models\PayType;
use app\common\services\credit\ConstService;
class CreditPay extends Pay
{
public function doPay($params = [])
{
$operation = '余额订单支付 订单号:' . $params['order_no'];
$this->log($params['extra']['type'], '余额', $params['amount'], $operation, $params['order_no'], Pay::ORDER_STATUS_NON, $params['member_id']);
self::payRequestDataLog($params['order_no'], $params['extra']['type'], '余额', json_encode($params));
//切换新余额接口,原接口废弃
$data = [
'member_id' => $params['member_id'],
'remark' => $params['remark'] ?: '',
'relation' => $params['order_no'],
'operator' => $params['operator'] ?: 0,
'operator_id' => $params['operator_id'] ?: 0,
'change_value' => $params['amount']
];
$result = (new BalanceChange())->consume($data);
if ($result === true) {
$pay_order_model = PayOrder::uniacid()->where('out_order_no', $params['order_no'])->first();
if ($pay_order_model) {
$pay_order_model->status = 2;
$pay_order_model->trade_no = $params['trade_no'];
$pay_order_model->third_type = '余额';
$pay_order_model->save();
}
return true;
} else {
return false;
}
}
public function doRefund($out_trade_no, $totalmoney, $refundmoney)
{
$order_pay = OrderPay::select(['id','uid'])
->where('pay_sn', $out_trade_no)
->first();
$pay_uid = $order_pay->uid;
$return_rd = $this->createOrderRD();
//退款记录
PayRefundOrder::create([
'uniacid' => \YunShop::app()->uniacid,
'member_id' => 0,
'int_order_no' => '',
'out_order_no' => $out_trade_no,
'status' => 2,
'type' => '余额',
'trade_no' => 0,
'price' => $refundmoney
]);
$data = [
'member_id' => $pay_uid,
'remark' => '余额订单退款 订单号:(' . $out_trade_no . ')退款单号:(' . $return_rd . ')退款金额:' . $refundmoney,
'source' => ConstService::SOURCE_CANCEL_CONSUME,
'relation' => $return_rd,
'operator' => ConstService::OPERATOR_ORDER,
'operator_id' => $pay_uid,
'change_value' => $refundmoney
];
//判断是否代付
if ($order_pay->behalfPay) {
$data['member_id'] = $order_pay->behalfPay->behalf_id;
$data['remark'] .= "(代付退款)";
}
return $result = (new BalanceChange())->cancelConsume($data);
}
/**
* 生成唯一单号
* @return string
*/
public function createOrderRD()
{
$ordersn = createNo('RD', true);
while (1) {
if (!Balance::ofOrderSn($ordersn)->first()) {
break;
}
$ordersn = createNo('RD', true);
}
return $ordersn;
}
public function doWithdraw($member_id, $out_trade_no, $money, $desc, $type = 1)
{
if($money <= 0) return ['errno' => 1,'message' => '提现金额不能小于1元'];
switch ($type){
case 1:
$type = '供应商';
break;
default:
$type = '';
break;
}
$data = array(
'member_id' => $member_id,
'remark' => $type . '余额提现: uid 为 ' . $member_id . ' 的用户, 获得余额 ' . $money . '元',
'source' => ConstService::SOURCE_INCOME,
'relation' => '',
'operator' => ConstService::OPERATOR_SHOP,
'operator_id' => $member_id,
'change_value' => $money,
);
$op = "{$type}余额提现 订单号:{$out_trade_no},提现金额:{$money}";
try {
(new BalanceChange())->income($data);
$this->withdrawlog(Pay::PAY_TYPE_WITHDRAW,$type . '余额提现',$money,$op,$out_trade_no,Pay::ORDER_STATUS_COMPLETE,$member_id);
} catch (\Exception $e) {
return ['errno' => 1,'message' => $e->getMessage()];
}
return ['errno' => 0,'message' => '余额提现成功'];
}
public function buildRequestSign()
{
// TODO: Implement buildRequestSign() method.
}
}