|
|
<?php
|
|
|
|
|
|
namespace app\admin\controller\user;
|
|
|
|
|
|
use app\common\controller\Backend;
|
|
|
use EasyWeChat\Foundation\Application;
|
|
|
use think\Db;
|
|
|
use think\exception\PDOException;
|
|
|
use think\exception\ValidateException;
|
|
|
|
|
|
/**
|
|
|
* 提现记录管理
|
|
|
*
|
|
|
* @icon fa fa-circle-o
|
|
|
*/
|
|
|
class UserWithdraw extends Backend
|
|
|
{
|
|
|
|
|
|
/**
|
|
|
* UserWithdraw模型对象
|
|
|
* @var \app\admin\model\user\UserWithdraw
|
|
|
*/
|
|
|
protected $model = null;
|
|
|
|
|
|
public function _initialize()
|
|
|
{
|
|
|
parent::_initialize();
|
|
|
$this->model = new \app\admin\model\user\UserWithdraw;
|
|
|
$this->view->assign("statusList", $this->model->getStatusList());
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
|
|
|
* 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
|
|
|
* 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
|
|
|
*/
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 查看
|
|
|
*/
|
|
|
public function index()
|
|
|
{
|
|
|
//当前是否为关联查询
|
|
|
$this->relationSearch = true;
|
|
|
//设置过滤方法
|
|
|
$this->request->filter(['strip_tags', 'trim']);
|
|
|
if ($this->request->isAjax())
|
|
|
{
|
|
|
//如果发送的来源是Selectpage,则转发到Selectpage
|
|
|
if ($this->request->request('keyField'))
|
|
|
{
|
|
|
return $this->selectpage();
|
|
|
}
|
|
|
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
|
|
|
$total = $this->model
|
|
|
->with(['user'])
|
|
|
->where($where)
|
|
|
->order($sort, $order)
|
|
|
->count();
|
|
|
|
|
|
$list = $this->model
|
|
|
->with(['user'])
|
|
|
->where($where)
|
|
|
->order($sort, $order)
|
|
|
->limit($offset, $limit)
|
|
|
->select();
|
|
|
|
|
|
foreach ($list as $row) {
|
|
|
|
|
|
$row->getRelation('user')->visible(['nickname']);
|
|
|
}
|
|
|
$list = collection($list)->toArray();
|
|
|
$result = array("total" => $total, "rows" => $list);
|
|
|
|
|
|
return json($result);
|
|
|
}
|
|
|
return $this->view->fetch();
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 审核
|
|
|
*/
|
|
|
public function examine($ids = null)
|
|
|
{
|
|
|
if($ids) {
|
|
|
$row = $this->model->get($ids);
|
|
|
if (!$row) {
|
|
|
$this->error(__('No Results were found'));
|
|
|
}
|
|
|
$adminIds = $this->getDataLimitAdminIds();
|
|
|
if (is_array($adminIds)) {
|
|
|
if (!in_array($row[$this->dataLimitField], $adminIds)) {
|
|
|
$this->error(__('You have no permission'));
|
|
|
}
|
|
|
}
|
|
|
$params = $this->request->param();
|
|
|
if ($params['status'] == 2) {
|
|
|
if ($row->status == 2) {
|
|
|
$this->error('该提现申请已通过审核');
|
|
|
}
|
|
|
}
|
|
|
if ($params['status'] == 3) {
|
|
|
if ($row->status == 3) {
|
|
|
$this->error('该提现申请已驳回审核');
|
|
|
}
|
|
|
}
|
|
|
$row->status = $params['status'];
|
|
|
Db::startTrans();
|
|
|
try {
|
|
|
$user_model = new \app\admin\model\User();
|
|
|
$user = $user_model->where('id', $row->user_id)->find();
|
|
|
if ($params['status'] == 2) {
|
|
|
// 微信提现
|
|
|
$options = get_addon_config('epay');
|
|
|
$wechat_option = [
|
|
|
'app_id' => $options['wechat']['appid'],
|
|
|
'app_secret' => $options['wechat']['app_secret'],
|
|
|
'payment' => [
|
|
|
'merchant_id' => $options['wechat']['mch_id'],
|
|
|
'key' => $options['wechat']['key'],
|
|
|
'cert_path' => ROOT_PATH . 'addons' . $options['wechat']['cert_client'],
|
|
|
'key_path' => ROOT_PATH . 'addons' . $options['wechat']['cert_key'],
|
|
|
]
|
|
|
];
|
|
|
$app = new Application($wechat_option);
|
|
|
$merchantPay = $app->merchant_pay;
|
|
|
$order_sn = $row->order_sn;
|
|
|
$user_openid = Db::name('third')->where('user_id', $row->user_id)->where('third_party', 'wechat')->value('openid');
|
|
|
$merchantPayData = [
|
|
|
'partner_trade_no' => $order_sn, //随机字符串作为订单号,跟红包和支付一个概念。
|
|
|
'openid' => $user_openid, //收款人的openid
|
|
|
'check_name' => 'NO_CHECK', //文档中有三种校验实名的方法 NO_CHECK OPTION_CHECK FORCE_CHECK
|
|
|
'amount' => $row->money * 100, //单位为分
|
|
|
'desc' => '用户提现',
|
|
|
'spbill_create_ip' => request()->ip(), //发起交易的IP地址
|
|
|
];
|
|
|
$result_pay = $merchantPay->send($merchantPayData);
|
|
|
if ($result_pay['return_code'] == 'SUCCESS' && $result_pay['result_code'] == 'SUCCESS') {
|
|
|
// 余额变动记录
|
|
|
$log = [
|
|
|
'user_id' => $row->user_id,
|
|
|
'money' => $row->money,
|
|
|
'before' => $user['money'],
|
|
|
'after' => $user['money'] - $row->money,
|
|
|
'createtime' => time(),
|
|
|
'memo' => '用户微信提现'
|
|
|
];
|
|
|
$result_log = Db::name('user_money_log')->insertGetId($log);
|
|
|
$row->success_time = time();
|
|
|
$row->more = json_encode($result_pay, JSON_UNESCAPED_UNICODE);
|
|
|
} else {
|
|
|
Db::rollback();
|
|
|
$this->error($result_pay['err_code_des']);
|
|
|
}
|
|
|
} else {
|
|
|
// 返还用户余额
|
|
|
$result_user = $user_model->where('id', $user['id'])->setInc('money', $row->money);
|
|
|
if (!$result_user) {
|
|
|
Db::rollback();
|
|
|
$this->error('提现审核失败');
|
|
|
}
|
|
|
}
|
|
|
$result = $row->save();
|
|
|
Db::commit();
|
|
|
} catch (ValidateException $e) {
|
|
|
Db::rollback();
|
|
|
$this->error($e->getMessage());
|
|
|
} catch (PDOException $e) {
|
|
|
Db::rollback();
|
|
|
$this->error($e->getMessage());
|
|
|
} catch (\think\Exception $e) {
|
|
|
Db::rollback();
|
|
|
$this->error($e->getMessage());
|
|
|
}
|
|
|
if(!$result) {
|
|
|
$this->error('提现审核失败');
|
|
|
}
|
|
|
$this->success('提现审核成功');
|
|
|
}
|
|
|
}
|
|
|
} |
...
|
...
|
|