会员支付管理后台-用于提供会员管理小程序支付的api接口,与后台数据管理展示
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.
 
 
 
 
 
 

280 lines
9.6 KiB

<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace addon\hygl\app\api\controller;
use addon\hygl\app\model\advertising\Advertising;
use addon\hygl\app\model\config\Config;
use addon\hygl\app\model\coupons\Coupons;
use addon\hygl\app\model\transaction_history\TransactionHistory;
use addon\hygl\app\model\user\User;
use addon\hygl\app\model\user_coupons\UserCoupons;
use app\model\site\Site;
use core\base\BaseApiController;
use think\facade\Db;
use think\Response;
class Home extends BaseApiController
{
/**
* Hello World
* @return Response
*/
public function index()
{
return success('SUCCESS', 'Hello World');
}
//获取站点信息
public function getSiteInfo()
{
$site_id = $this->request->param('site_id', '');
$site_name = Site::where('site_id', $site_id)->value('site_name');//获取站点信息
//获取微信公众号id
$config = Config::where('site_id', $site_id)->field('id,we_chat_pay_app_id,we_chat_pay_miniapp_id')->find();
$res = [
'site_id' => $site_id,
'site_name' => $site_name,
'we_chat_pay_app_id' => $config['we_chat_pay_app_id'] ?? '',//微信支付-公众号APPID
'we_chat_pay_miniapp_id' => $config['we_chat_pay_miniapp_id'] ?? '',//微信支付-小程序APPID
];
return success($res);
}
//获取用户信息
public function getUser()
{
$site_id = $this->request->param('site_id', '');
$role = $this->request->param('role', '');//身份//wx=微信 zfb=支付宝
$openid = $this->request->param('openid', '');
$wx_mini_openid = $this->request->param('wx_mini_openid', '');
if (!$site_id || !in_array($role, ['wx', 'zfb']) || (!$openid && !$wx_mini_openid)) {
return fail('确少参数');
}
$user = User::where('site_id', $site_id);
if ($role == 'wx') {
if($openid){
$user = $user->where('wx_openid', $openid);
}else{
$user = $user->where('wx_mini_openid', $wx_mini_openid);
}
} else {
$user = $user->where('zfb_openid', $openid);
}
$user = $user->find();
//创建用户
if (!$user) {
if ($role == 'wx') {
$wx_openid = $openid;
$wx_mini_openid = $wx_mini_openid;
$name = "微信用户{$openid}";
} else {
$zfb_openid = $openid;
$name = "微信用户{$openid}";
}
$data = [
'name' => $name,
'site_id' => $site_id,
'wx_openid' => $wx_openid ?? null,
'wx_mini_openid' => $wx_mini_openid ?? null,
'zfb_openid' => $zfb_openid ?? null,
'is_show' => 1,
'pid' => 0,
'level' => 1,
];
$user_data = User::create($data);
$res = [
'user_id' => $user_data['id']
];
} else {
$res = [
'user_id' => $user['id']
];
}
return success($res);
}
//获取用户拥有的优惠券
public function getUserCoupons()
{
$user_id = $this->request->param('user_id', '');
$site_id = $this->request->param('site_id', '');
$original_price = $this->request->param('original_price', '');//订单总金额
if (!$user_id || !$site_id) {
return fail('确少参数');
}
$time = time();
$data = UserCoupons::where('site_id', $site_id)
->where('user_id', $user_id)
->where('is_show', 1)//是否可用1=是,0=否
->with([
'coupons' => function ($q) use ($original_price) {
$q->where('is_obsolete', 0);
}
])
->select()->toArray();
$userCoupons = [];
foreach($data as $v){
if (!empty($v['coupons'])){
if ($v['coupons']['is_long_term_valid'] == 1){
//长期有效
$userCoupons[] = [
'id'=>$v['id'],
'name'=>"{$v['coupons']['name']}(长期有效)",
'nominal_value'=>$v['coupons']['nominal_value'] ?? 0,
'coupons'=>$v['coupons'] ?? [],
];
}elseif($v['coupons']['valid_from'] <= $time && $v['coupons']['valid_until'] >= $time){
//在有效期之内
$data_1 = date('Y-m-d',$v['coupons']['valid_from']);
$data_2 = date('Y-m-d',$v['coupons']['valid_until']);
$userCoupons[] = [
'id'=>$v['id'],
'name'=>"{$v['coupons']['name']}({$data_1}~{$data_2})",
'nominal_value'=>$v['coupons']['nominal_value'] ?? 0,
'coupons'=>$v['coupons'] ?? [],
];
}
}
}
if ($userCoupons){
// 定义自定义排序函数
// 使用匿名函数作为回调函数进行排序
usort($userCoupons, function($a, $b) {
return $b['coupons']['nominal_value'] - $a['coupons']['nominal_value'];
});
}
return success($userCoupons);
}
//获取可领取的优惠券
public function getReceiveCouponsList()
{
$site_id = $this->request->param('site_id', '');
$data = Coupons::where('site_id', $site_id)
->where('stock', '>', 0)
->where('is_show', 1)
->select();
$res = $data->toArray();
return success($res);
}
//创建订单
public function addOrder()
{
$site_id = $this->request->param('site_id', '');
$user_id = $this->request->param('user_id', '');
$pay_type = $this->request->param('pay_type', '');
$original_price = $this->request->param('original_price', '');//订单总价格
$user_coupons_id = $this->request->param('user_coupons_id', '');//用户优惠券中间表id
$original_price = bcmul($original_price,1,2);
if (!$site_id || !$user_id || !in_array($pay_type, [1, 2, 3, 4, 5, 6, 7, 8]) || !$original_price) {
return fail('缺少参数');
}
$order_num = time() . rand(1111, 9999);
$price = $original_price;
//计算优惠劵
if ($user_coupons_id) {
$user_coupons = UserCoupons::where('id', $user_coupons_id)
->where('is_show',1)
->with(['coupons'])
->find();
if (empty($user_coupons['coupons']) || $user_coupons['coupons']['is_obsolete'] != 0){
return fail('优惠券信息不存在');
}
if ($user_coupons['coupons']['is_long_term_valid'] != 1){
//不是长期有效
$time = time();
if ($user_coupons['coupons']['valid_from'] > $time || $user_coupons['coupons']['valid_until'] < $time){
return fail('优惠券已过期');
}
}
//判断优惠券面值是否大于支付面值
if ($user_coupons['coupons']['nominal_value'] >= $original_price){
return fail("优惠券面值需要小于{$original_price}");
}
$price = $original_price - $user_coupons['coupons']['nominal_value'];
if ($price <= 0) {
return fail("满减后或支付金额不能为0元");
}
}
$create_data = [
'site_id' => $site_id,//
'user_id' => $user_id,//
'order_num' => $order_num,//
'pay_type' => $pay_type,//
'original_price' => $original_price,//订单原价(元)|优惠前的金额
'price' => $price,//订单应付金额(元)|(优惠后的金额)精确到`分`
'user_coupons_id' => $user_coupons['id'] ?? 0,//用户优惠券中间表id
];
Db::startTrans();
try {
$res = TransactionHistory::create($create_data);//会员交易记录模型
Db::commit();
} catch (\Exception $exception) {
Db::rollback();
return fail('系统繁忙');
}
if ($res) {
return success($res->toArray());
} else {
return fail('系统繁忙');
}
}
//获取广告列表
public function getAdvertising()
{
$site_id = $this->request->param('site_id', '');//站点id
if (!$site_id) {
return fail('缺少参数');
}
$field = 'id,img_url,skip_url,sort,site_id';
$res = Advertising::order('sort', 'desc')
->field($field)
->where('site_id', $site_id)
->select()
->toArray();
if ($res) {
foreach ($res as &$v) {
if ($v['img_url']) {
$v['img_url'] = get_file_url($v['img_url']);
}
}
}
return success($res);
}
}