return_url 和 notify_url 的区分

本文详细介绍了支付宝通知系统的两大类型:服务器通知与页面跳转通知,解释了它们的区别、实现方式及注意事项,帮助开发者正确配置支付宝通知。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现支付宝的通知有两类。
A服务器通知,对应的参数为notify_url,支付宝通知使用POST方式
B页面跳转通知,对应的参数为return_url,支付宝通知使用GET方式 (通知地址不需要像以前一样去账户内设置,而是由客户在支付的时候通过参数传递给我地址。例如 notify_url=http://www.xxx.com/notify_alipay.asp 注意:www.XXX.com是您网站的域名,也可以用ip地址代替。对于服务器通知,ip地址一定是公网的,私有地址(例如10.2.1.1或者192.168.1.1)支付宝无法通知到客户端
<?php declare (strict_types=1); namespace app\api\controller; use app\api\controller\Base; use app\common\model\Goods as Goodsmodel; use app\common\model\GoodsLock; use app\common\model\GoodsList; use app\common\model\Collect; use app\common\model\Shang; use app\common\model\User; use app\common\model\Order; use app\common\model\OrderList; use app\common\model\UserVip; use think\facade\Db; use think\facade\Log; use \think\Request; use app\common\model\CouponReceive as CouponReceiveModel; class Goods extends Base { static $page_size = 10; static $shang_prize_id = [10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33];#抽奖赏品id static $shang_count_id = [10, 38];#统计次数 // static $shang_give_arr = [ // 1 => '上半场随机获得', // 2 => '下半场随机获得', // 3 => '最后一发获得', // 4 => '全场随机获得', // 5 => '获取指定数量全局赏获得', // ];#赠送(FIRST赏 LAST赏 最终赏 全局赏 拳王赏)赏品id static $shang_give_arr = [ 1 => '只赠不售', 2 => '只赠不售', 3 => '只赠不售', 4 => '只赠不售', 5 => '只赠不售', 6 => '只赠不售', 7 => '只赠不售', 39 => '只赠不售', ];#赠送(FIRST赏 LAST赏 最终赏 全局赏 拳王赏)赏品id /** * 首页盒子列表 * @param Request $request * @return \think\response\Json * @throws \think\db\exception\DbException * created by Admin at 2022/12/7 15:49 * @param [type] 类型 (14)推荐 (1)一番赏 (2)积分赏 (3)擂台赏 */ public function goods(Request $request) { $user_id = $this->getuserid(); $draw_num = 0; if($user_id > 0){ $draw_num = User::where(['id'=>$user_id])->value('draw_num'); } //$user_info = $this->getUser(); $keyword = request()->param('keyword', ''); $whe = []; // $whe[] = ['status', '=', 1]; $whe[] = ['show_is', '=', 0]; $whe[] = ['tower_id', '=', 0]; $whe[] = ['status', 'in', [1, 3]]; #搜索 if ($keyword) { $whe[] = ['title', 'like', '%' . $keyword . '%']; } $type_str = request()->param('type', -1); if ($type_str == 1) { $whe[] = ['type', '=', 1]; } elseif ($type_str == 2) { $whe[] = ['type', '=', 2]; } elseif ($type_str == 3) { $whe[] = ['type', '=', 3]; } elseif ($type_str == 5) { $whe[] = ['type', '=', 5]; }elseif ($type_str == 6) { $whe[] = ['type', '=', 6]; }elseif ($type_str == 7) { # 7抽奖券 $whe[] = ['type', '=', 7]; }elseif ($type_str == 8) { $whe[] = ['type', '=', 8]; }elseif ($type_str == 9) { $whe[] = ['type', '=', 9]; }else { $whe[] = ['type', 'not in', [4,2]]; } #盒子 $goods = GoodsModel::where($whe) ->field("id,title,imgurl,imgurl_detail,price,type,stock,sale_stock,status,box_is,leitai_num") ->order("sort desc,status esc,id desc")->paginate(15)->each(function ($itme) { $itme['imgurl'] = imageUrl($itme['imgurl']); #剩余 $itme['sale_stock'] = $itme['stock'] - $itme['sale_stock']; #参与人数 $join_user = OrderList::field('user_id') ->append(['userinfo']) ->where('goods_id', '=', $itme['id']) ->where('shang_id', 'between', self::$shang_count_id) ->where('order_type', '=', $itme['type']) ->order('id desc') ->group('user_id') ->limit(5) ->select(); $itme['join_user'] = $join_user; #参与次数 $join_count = OrderList::field('id') ->where('shang_id', 'between', self::$shang_count_id) ->where('goods_id', '=', $itme['id']) ->where('order_type', '=', $itme['type']) ->count(); $itme['join_count'] = $join_count; $itme['need_draw_num'] = 0; if($itme['type'] == 7){ $itme['need_draw_num'] = 1; } $box_id = 0; if($itme['box_is'] == 1 && $itme['type'] == 2){ $box_id = GoodsList::where(['shang_id'=>39,'goods_id'=>$itme['id']])->value('id'); } $itme['box_id'] = $box_id; }); $new_data = [ 'data' => $goods->items(), 'last_page' => $goods->lastPage(), 'draw_num' => $draw_num #优惠券的数量 ]; //▼▼▼ 新增配置部分 ▼▼▼ $rule = getConfig('base'); $other = [ 'jump_appid' => $rule['jump_appid'], 'corpid' => $rule['corpid'], 'wx_link' => $rule['wx_link'], 'mp3' => $rule['mp3'], 'logo' => $rule['logo'], 'types' => $rule['types'], 'erweima' => imageUrl($rule['erweima']), ]; $new_data['other'] = $other; return $this->renderSuccess('请求成功', $new_data); } /** * 商品详情 * @param $goods_id 盒子id * @param $goods_num 盒子箱号 */ public function goodsdetail() { //$user_info = $this->getUser(); $user_id = $this->getuserid(); $goods_id = request()->param('goods_id/d', 0); $goods_num = request()->param('goods_num/d', 0); $goods = Goodsmodel::field('id,title,imgurl_detail,price,stock,sale_stock,lock_is,type,status,sale_time,is_integral') ->where(['id' => $goods_id]) ->find(); if (!$goods) { return $this->renderError("盒子不存在"); } if ($goods['status'] != 1 && $goods['status'] != 3) { return $this->renderError("盒子已下架"); } if (($goods_num > $goods['stock']) || ($goods_num < 0)) { return $this->renderError("箱号错误"); } if ($goods['sale_time']) { $goods['addtime'] = date('m-d', $goods['sale_time']); } else { $goods['addtime'] = ''; } $goods['imgurl_detail'] = imageUrl($goods['imgurl_detail']); #自动找箱号 if ($goods_num == 0) { #奖品信息 $goodslist_info = GoodsList::field('num,sum(`surplus_stock`) as all_surplus_stock') ->where(['goods_id' => $goods_id]) ->where('shang_id','not in',[1,2,3,4,5]) ->having('all_surplus_stock', '>', 0) ->group('num') ->order('num asc') ->find(); if ($goodslist_info) { $goods_num = $goodslist_info['num']; } else { $goods_num = 1; } } $goods['num'] = $goods_num; #是否收藏 $collection_is = Collect::field('id') ->where(['user_id' => $user_id]) ->where(['goods_id' => $goods_id]) ->where(['num' => $goods_num]) ->find(); $goods['collection_is'] = $collection_is ? 1 : 0; #本箱子余量 $goods_surplus = GoodsList::field('sum(`stock`) as stock, sum(`surplus_stock`) as surplus_stock') ->where('goods_id', '=', $goods_id) ->where('num', '=', $goods_num) ->where('shang_id', 'in', self::$shang_prize_id) ->find(); $all_surplus_stock = $goods_surplus['surplus_stock']; $goods['surplus_stock'] = $goods['stock'] - $goods['sale_stock']; $goods['goodslist_stock'] = $goods_surplus['stock']; $goods['goodslist_surplus_stock'] = $goods_surplus['surplus_stock']; #概率不足时 $pro_all = 0; $pro_max = 0; $pro_key = 0; #所有奖品信息 $goodslist = GoodsList::field('id,shang_id,title,stock,surplus_stock,imgurl,goods_type,sale_time,price,sc_money,goods_id,k_zz_num,zz_num') ->append(['shang_title','goods_typename','shang_info']) ->where(['goods_id' => $goods_id]) ->where(['num' => $goods_num]) ->where(['is_box' => 2]) ->order('sort desc,shang_id asc,id asc') ->select()->toArray(); foreach ($goodslist as $key => &$value) { #价格 $value['price'] = $value['price'] * 1; #预售时间 if ($value['sale_time']) { $value['sale_time'] = date('Y-m-d', $value['sale_time']); } #剩余 $surplus_stock = $value['surplus_stock']; if (array_key_exists($value['shang_id'], self::$shang_give_arr)) { #概率 $pro = self::$shang_give_arr[$value['shang_id']]; if($value['shang_id'] == 1){ $pro = '参与'. ($goods['goodslist_stock'] / 2) .'前发数/'. ($goods['goodslist_stock'] / 2); } if($value['shang_id'] == 2){ $pro = '参与'. ($goods['goodslist_stock'] / 2) .'后发数/'. ($goods['goodslist_stock'] / 2); } if($value['shang_id'] == 3){ $pro = '随最后一发赠送'; } if($value['shang_id'] == 4){ $pro = '参与发数/'. $goods['goodslist_stock']; } if($value['shang_id'] == 5){ $pro = '只赠不售'; } if($value['shang_id'] == 6){ $pro = '1-'. $goods['goodslist_stock'] . '发数最多得'; } if($value['shang_id'] == 7){ $pro = $value['k_zz_num'].'-'. $value['zz_num'] . '发数最多得'; } $pro_num = 0; } else { #概率 if ($surplus_stock > 0) { $pro_basics = bcdiv("$surplus_stock", "$all_surplus_stock", 4); $pro = '概率:' . ($pro_basics * 100) . '%'; $pro_num = ($pro_basics * 100); } else { $pro = '概率:' . 0 . '%'; $pro_num = 0; } } $value['surplus_stock'] = $surplus_stock; $value['pro'] = $pro; $value['imgurl'] = imageUrl($value['imgurl']); #计算剩余概率 $pro_all += $pro_num; if ($pro_num >= $pro_max) { $pro_max = $pro_num; $pro_key = $key; } } #概率不足时 if ($pro_max > 0 && $pro_all < 100) { $surplus_pro = bcsub("100", "$pro_all", 2); $goodslist[$pro_key]['pro'] = bcadd("$pro_max", "$surplus_pro", 2) . '%'; } #锁箱信息=============== $goods_lock_user_nickname = 0; $goods_lock_user_headimg = 0; $goods_lock_surplus_time = 0; $goods_id_num = $goods_id . '_' . $goods_num; $goods_lock_info = GoodsLock::where(['goods_id_num' => $goods_id_num]) ->where('endtime', '>', time()) ->order('id desc') ->find(); if ($goods['lock_is'] && $goods_lock_info) { $goods_lock_surplus_time = $goods_lock_info['endtime']; $user_info = User::field('nickname,headimg')->where(['id' => $goods_lock_info['user_id']])->find(); $goods_lock_user_nickname = $user_info['nickname']; $goods_lock_user_headimg = $user_info['headimg']; } $lock_info = [ 'lock_is' => $goods['lock_is'], 'goods_lock_user_nickname' => $goods_lock_user_nickname, 'goods_lock_user_headimg' => $goods_lock_user_headimg, 'goods_lock_surplus_time' => $goods_lock_surplus_time, ]; #锁箱信息=============== #参与人数 $join_user = OrderList::field('user_id') ->append(['userinfo']) ->where('goods_id', '=', $goods_id) ->where('num', '=', $goods_num) ->where('shang_id', 'between', self::$shang_count_id) ->where('order_type', '=', $goods['type']) ->order('id desc') ->group('user_id') ->limit(5) ->select(); $new_join_user = []; foreach ($join_user as $join_user_value) { $new_join_user[] = $join_user_value['userinfo']['headimg']; } #参与次数 $join_count = OrderList::field('id')->where('goods_id', '=', $goods_id) ->where('num', '=', $goods_num) ->where('shang_id', 'between', self::$shang_count_id) ->where('order_type', '=', $goods['type']) ->count(); #时间配置 $config = getConfig('base'); $goods['three_time'] = $config['three_time']; $goods['five_time'] = $config['five_time']; $new_data = [ 'goods' => $goods, 'lock_info' => $lock_info, 'join_user' => $new_join_user, 'join_count' => $join_count, 'goodslist' => $goodslist, ]; return $this->renderSuccess("请求成功", $new_data); } /** * 换箱箱号 */ public function goodslist_count() { $goods_id = request()->param('goods_id/d', 0); #盒子信息 $goods = Goodsmodel::field('id,stock,status') ->where(['id' => $goods_id]) ->find(); if (!$goods) { return $this->renderError("盒子不存在"); } if ($goods['status'] != 1 && $goods['status'] != 3) { return $this->renderError("盒子已下架"); } $page_size = self::$page_size; $length = ceil($goods['stock'] / $page_size); $data = []; for ($i = 0; $i < $length; $i++) { $start_length = ($i * $page_size) + 1; $end_length = ($i * $page_size) + $page_size; if ($end_length >= $goods['stock']) { $end_length = $goods['stock']; } $data[] = [ 'title' => $start_length . '-' . $end_length, 'page_no' => $i, ]; } return $this->renderSuccess("请求成功", $data); } /** * 统计多少箱 */ public function goodslist_content(Request $request) { $sort = request()->param('sort/d', 0);#排序1箱号高 2余量高 $goods_id = request()->param('goods_id/d', 0); $page_no = request()->param('page_no/d', 0);#页码 if ($page_no <= 0) { $page_no = 0; } #盒子信息 $goods = Goodsmodel::field('id,stock,status') ->where(['id' => $goods_id]) ->find(); if (!$goods) { return $this->renderError("盒子不存在"); } if ($goods['status'] != 1 && $goods['status'] != 3) { return $this->renderError("盒子已下架"); } $page_size = self::$page_size; $start_length = ($page_no * $page_size) + 1; $end_length = ($page_no * $page_size) + $page_size; if ($end_length >= $goods['stock']) { $end_length = $goods['stock']; } $data = []; for ($goods_num = $start_length; $goods_num <= $end_length; $goods_num++) { #奖品信息 $goodlist = GoodsList::field('id,stock,surplus_stock,shang_id') ->append(['shang_title']) ->where(['goods_id' => $goods_id]) ->where(['num' => $goods_num]) ->order('sort desc,shang_id asc,id asc') ->select(); #剩余 $surplus_all_stock = 0; foreach ($goodlist as $key => $value) { if (!array_key_exists($value['shang_id'], self::$shang_give_arr)) { $surplus_all_stock += $value['surplus_stock']; } unset($value['id']); } if ($surplus_all_stock <= 0) { $surplus_all_stock = 0; } $data[] = [ 'num' => $goods_num, 'surplus_all_stock' => $surplus_all_stock, 'goodslist' => $goodlist, ]; } if ($sort == 2) { $data = arraySequence($data, 'surplus_all_stock'); } return $this->renderSuccess("请求成功", $data); } /** * 中赏记录 */ public function shang_log(Request $request) { $shang_id = request()->param('shang_id/d', 0); $goods_id = request()->param('goods_id/d', 0); $goods_num = request()->param('goods_num/d', 0); #盒子信息 $goods = Goodsmodel::field('id,stock,status,type') ->where(['id' => $goods_id]) ->find(); if (!$goods) { return $this->renderError("盒子不存在"); } if ($goods['status'] != 1 && $goods['status'] != 3) { return $this->renderError("盒子已下架"); } if (RegInt($goods_num)) { return $this->renderError("箱号选择错误"); } #中奖记录分类 $category = GoodsList::field('shang_id') ->append(['shang_title']) ->where('goods_id', '=', $goods_id) ->where('num', '=', $goods_num) ->where('is_box', '=', 2) ->group('shang_id') ->select()->toArray(); array_unshift($category, ['shang_id' => 0, 'shang_title' => '全部']); $where = []; if ($shang_id) { $where[] = ['shang_id', '=', $shang_id]; } $data = OrderList::field('user_id,goodslist_title,goodslist_imgurl,shang_id,addtime,count(`id`) as prize_num') ->append(['shang_title', 'user_info']) ->where('goods_id', '=', $goods_id) ->where('num', '=', $goods_num) ->where('order_type', '=', $goods['type']) ->where($where) ->order('id desc') ->group("order_id,goodslist_id,user_id") ->paginate(10)->each(function ($item) { $item['addtime'] = date('Y-m-d H:i:s', $item['addtime']); $item['goodslist_imgurl'] = imageUrl($item['goodslist_imgurl']); return $item; }); // dd($data); $new_data = [ 'category' => $category, 'data' => $data->items(), 'last_page' => $data->lastPage(), ]; return $this->renderSuccess("请求成功", $new_data); } /** * 发数排名 */ public function paiming_log(Request $request) { $goods_id = request()->param('goods_id/d', 0); $goods_num = request()->param('goods_num/d', 0); #盒子信息 $goods = Goodsmodel::field('id,stock,status,type') ->where(['id' => $goods_id]) ->find(); if (!$goods) { return $this->renderError("盒子不存在"); } if ($goods['status'] != 1 && $goods['status'] != 3) { return $this->renderError("盒子已下架"); } if (RegInt($goods_num)) { return $this->renderError("箱号选择错误"); } $ranking = OrderList::field('user_id, sum(goodslist_type) as total_orders') ->append(['user_info']) ->group('user_id') ->where('goods_id', '=', $goods_id) ->where('num', '=', $goods_num) ->where('order_type', '=', $goods['type']) ->where('shang_id', 'in', self::$shang_prize_id) ->order('total_orders', 'desc') ->select() ->toArray(); $new_data = [ 'data' => $ranking, ]; return $this->renderSuccess("请求成功", $new_data); } /** * 下单计算金额 */ public function ordermoney() { //return $this->renderError("正在调试"); $user = $this->getUser(); $user_id = $user['id'] ?? 0; $prize_num = request()->param('prize_num/d', 0); #抽几发 $goods_id = request()->param('goods_id/d', 0); #盒子ID $num = request()->param('goods_num/d', 0); #第几箱 $todaySpent = 0; if ($user_id > 0) { $start_time = strtotime(date('Y-m-d 00:00:00')); // 今日开始时间 $end_time = strtotime(date('Y-m-d 23:59:59')); // 今日结束时间 $todaySpent = Order::where('user_id', $user_id) ->where('status', 1) // 已支付订单 ->where('addtime', '>=', $start_time) ->where('addtime', '<=', $end_time) ->sum('price'); } // $use_money_is = request()->param('use_money_is/d', 0); #0不抵扣 1抵扣 $use_money_is = 0; $use_integral_is = request()->param('use_integral_is/d', 0); #0不抵扣 1抵扣 $coupon_id = request()->param('coupon_id'); //优惠券 #盒子信息 $goods = Goodsmodel::field('title,imgurl_detail,type,price,status,imgurl')->where(['id' => $goods_id]) ->find(); if (!$goods) { return $this->renderError("盒子不存在"); } if ($goods['status'] != 1) { return $this->renderError("盒子已下架"); } $goods['imgurl_detail'] = !empty($goods['imgurl_detail']) ? imageUrl($goods['imgurl_detail']) : ''; $goods['imgurl'] = !empty($goods['imgurl']) ? imageUrl($goods['imgurl']) : ''; if (RegInt($num)) { return $this->renderError("箱号选择错误"); } #奖品信息 $goodslist = GoodsList::field('sum(`stock`) as stock, sum(`surplus_stock`) as surplus_stock') ->where('goods_id', '=', $goods_id) ->where('num', '=', $num) ->where('shang_id', 'in', self::$shang_prize_id) ->find(); if (!$goodslist) { return $this->renderError('暂无奖品信息'); } $surplus_stock = $goodslist['surplus_stock']; if ($surplus_stock <= 0) { return $this->renderError('库存剩余不足,请刷新重试'); } #判断库存 if (RegInt($prize_num)) { return $this->renderError("抽奖数量选择错误,请刷新重试"); } if ($prize_num > $surplus_stock) { return $this->renderError("剩余数量不足,请刷新重试"); } #盒子单价 $box_price = $goods['price']; #订单金额 微信支付金额 $order_total = $order_zhe_total = $price = bcmul("$box_price", "$prize_num", 2); #使用优惠券 $coupon_price = 0; if(!empty($coupon_id)){ $coupon = CouponReceiveModel::where(['id'=>$coupon_id,'status'=>0,'user_id'=>$user['id']])->where('man_price','<=',$price)->find(); if($coupon){ $coupon_price = $coupon['price']; } }else{ $coupon_id = 0; $coupon = CouponReceiveModel::where(['status'=>0,'user_id'=>$user['id']])->where('man_price','<=',$price)->order('price desc')->find(); if($coupon){ $coupon_price = $coupon['price']; $coupon_id = $coupon['id']; } } $price = bcsub("$price","$coupon_price",2); if($price <= 0){ $price = 0; } $order_zhe_total = $price; if ($goods['type'] == 1 || $goods['type'] == 3 || $goods['type'] == 6) { $zhe = 0; $vip_info = UserVip::where(['id' => $user['vip']])->find(); if ($vip_info && $vip_info['discount'] > 0) { $zhe = $vip_info['discount']; $zhe_bl = bcdiv("$zhe", "10", 2); $order_zhe_total = $price = bcmul("$price", "$zhe_bl", 2); } #潮币抵扣 $use_integral = 0; if ($use_integral_is == 1) { if ($user['integral'] >= $price) { $use_integral = $price; $price = 0; } else { $use_integral = $user['integral']; $price = bcsub("$price", "{$user['integral']}", 2); } } #余额抵扣 $use_money = 0; if ($use_money_is == 1) { if ($user['money'] >= $price) { $use_money = $price; $price = 0; } else { $use_money = $user['money'];# $price = bcsub("$price", "{$user['money']}", 2); } } $use_score = 0; } elseif ($goods['type'] == 5) { #优惠券 $coupon_id =0; $coupon_price = 0; #折扣 $zhe = 0; #微信支付 $price = 0; #潮币抵扣 $use_integral = 0; #余额抵扣 $use_money = 0; #积分 $use_score = $order_total; } else { return $this->renderError("非法请求"); } #抽奖数量 $goods['prize_num'] = $prize_num; $data = [ 'goods' => $goods, 'order_total' => $order_total * 1, 'order_zhe_total' => $order_zhe_total * 1, 'zhe' => ($zhe * 1), 'today_spent' => $todaySpent, 'price' => $price * 1, 'integral' => $user['integral'] * 1, 'use_integral' => $use_integral * 1, 'money' => $user['money'] * 1, 'use_money' => $use_money * 1, 'score' => $user['score'] * 1, 'use_score' => $use_score, 'coupon_price'=>$coupon_price, 'coupon_id' =>$coupon_id ]; //▼▼▼ 新增配置部分 ▼▼▼ $rule = getConfig('base'); $other = [ 'jump_appid' => $rule['jump_appid'], 'corpid' => $rule['corpid'], 'wx_link' => $rule['wx_link'], 'titlek' => $rule['titlek'], 'logoo' => $rule['logoo'], 'day_limit' => $rule['day_limit'], 'mp3' => $rule['mp3'], 'logo' => $rule['logo'], 'types' => $rule['types'], 'erweima' => imageUrl($rule['erweima']), ]; $data['other'] = $other; // 将配置合并到返回数据 return $this->renderSuccess("请求成功", $data); } /** * 下单计算金额 */ public function orderbuy() { $user = $this->getUser(); if (empty($user['mobile'])) { return $this->renderError('请先绑定手机号', [], -9); } // 获取系统配置 $config = getConfig('base'); $day_limit = $config['day_limit'] ?? 0; // 每日限额,0表示不限制 // 如果有限额设置,则检查用户当日消费 if ($day_limit > 0) { // 获取当日开始结束时间戳 $start_time = strtotime(date('Y-m-d 00:00:00')); $end_time = strtotime(date('Y-m-d 23:59:59')); // 查询用户当日已消费金额 $total_spent = Order::where('user_id', $user['id']) ->where('status', 1) // 已支付订单 ->where('addtime', '>=', $start_time) ->where('addtime', '<=', $end_time) ->sum('price'); // 检查是否超出限额 if ($total_spent >= $day_limit) { return $this->renderError("当日消费金额已超过限额"); } } $prize_num = request()->param('prize_num/d', 0); #抽几发 $goods_id = request()->param('goods_id/d', 0); #盒子ID $num = request()->param('goods_num/d', 0); #第几箱 // $use_money_is = request()->param('use_money_is/d', 0); #0不抵扣 1抵扣 $use_money_is = 0; $use_integral_is = request()->param('use_integral_is/d', 0); #0不抵扣 1抵扣 $coupon_id = request()->param('coupon_id'); //优惠券 $pay_type = request()->param('pay_type') ? request()->param('pay_type') : 1; // 1微信 2支付宝 #盒子信息 $goods = Goodsmodel::field('title,imgurl_detail,type,price,status,lock_is,lock_time,leitai_num')->where(['id' => $goods_id]) ->find(); if (!$goods) { return $this->renderError("盒子不存在"); } if ($goods['status'] != 1) { return $this->renderError("盒子已下架"); } if (RegInt($num)) { return $this->renderError("箱号选择错误"); } #奖品信息 $is_goodslist = GoodsList::field('id') ->where('goods_id', '=', $goods_id) ->where('num', '=', $num) ->where('shang_id', 'in', self::$shang_prize_id) ->find(); if (!$is_goodslist) { return $this->renderError('暂无奖品信息'); } #锁箱信息=============== if ($goods['type'] == 1 || $goods['type'] == 6) { //限购 if($prize_num > 1 && $goods['title'] == '新人福利,胶个朋友'){ return $this->renderError('该赏限购1发'); } $user_num = OrderList::where('goods_id', '=', $goods_id) ->where('user_id',$user['id']) ->where('num', '=', $num) ->where('order_type', '=', $goods['type']) ->where('shang_id', 'in', self::$shang_prize_id) ->count(); if($user_num >= 1 && $goods['title'] == '新人福利,胶个朋友'){ return $this->renderError('该赏限购1发'); } $goods_id_num = $goods_id . '_' . $num; $lock_info = GoodsLock::where(['goods_id_num' => $goods_id_num]) ->where('endtime', '>', time()) ->order('id desc') ->find(); if ($lock_info && $lock_info['endtime'] > time() && $lock_info['user_id'] !== $user['id']) { $surplus_time = $lock_info['endtime'] - time(); return $this->renderError('有会员正在锁箱,请等待' . $surplus_time . '秒'); } } #锁箱信息=============== #擂台赏限购=============== if ($goods['type'] == 3) { //限购 if($prize_num > $goods['leitai_num']){ return $this->renderError('该赏限购'.$goods['leitai_num'].'发'); } $user_num = Order::where('goods_id', '=', $goods_id) ->where('user_id',$user['id']) ->where('num', '=', $num) ->where('order_type', '=', $goods['type']) ->where('status', '=', 1) ->sum('prize_num'); //已购买 + 当前购买 大于 限购 if($user_num + $prize_num > $goods['leitai_num']){ return $this->renderError('该赏限购'.$goods['leitai_num'].'发'); } } #擂台赏限购=============== #奖品信息 $goodslist = GoodsList::field('sum(`stock`) as stock, sum(`surplus_stock`) as surplus_stock') ->where('goods_id', '=', $goods_id) ->where('num', '=', $num) ->where('shang_id', 'in', self::$shang_prize_id) ->find(); $surplus_stock = $goodslist['surplus_stock']; if ($surplus_stock <= 0) { return $this->renderError('库存剩余不足,请刷新重试'); } #判断库存 if (RegInt($prize_num)) { return $this->renderError("抽奖数量选择错误,请刷新重试"); } if ($prize_num > $surplus_stock) { return $this->renderError("剩余数量不足,请刷新重试"); } #盒子单价 $box_price = $goods['price']; #订单金额 微信支付金额 $order_total = $order_zhe_total = $price = bcmul("$box_price", "$prize_num", 2); #使用优惠券 $coupon_price = 0; if(!empty($coupon_id)){ $coupon = CouponReceiveModel::where(['id'=>$coupon_id,'status'=>0,'user_id'=>$user['id']])->where('man_price','<=',$price)->find(); if($coupon){ $coupon_price = $coupon['price']; } } $price = bcsub("$price","$coupon_price",2); if($price <= 0){ $price = 0; } $order_zhe_total = $price; if ($goods['type'] == 1 || $goods['type'] == 3 || $goods['type'] == 6) { #折扣 $zhe = 0; $vip_info = UserVip::where(['id' => $user['vip']])->find(); if ($vip_info && $vip_info['discount'] > 0) { $zhe = $vip_info['discount']; $zhe_bl = bcdiv("$zhe", "10", 2); $order_zhe_total = $price = bcmul("$price", "$zhe_bl", 2); } #潮币抵扣 $use_integral = 0; if ($use_integral_is == 1) { if ($user['integral'] >= $price) { $use_integral = $price; $price = 0; } else { $use_integral = $user['integral']; $price = bcsub("$price", "{$user['integral']}", 2); } } #余额抵扣 $use_money = 0; if ($use_money_is == 1) { if ($user['money'] >= $price) { $use_money = $price; $price = 0; } else { $use_money = $user['money'];# $price = bcsub("$price", "{$user['money']}", 2); } } $use_score = 0; } elseif ($goods['type'] == 5) { #优惠券 $coupon_id =0; $coupon_price = 0; #折扣 $zhe = 0; #微信支付 $price = 0; #潮币抵扣 $use_integral = 0; #余额抵扣 $use_money = 0; #积分 $use_score = $order_total; if ($user['score'] < $use_score) { return $this->renderError("积分不足"); } } else { return $this->renderError("非法请求"); } #一番赏锁箱 if ($goods['type'] == 1 || $goods['type'] == 6) { #盒子id_箱号 $goods_id_num = $goods_id . '_' . $num; #盒子是否配置锁箱 if ($goods['lock_is'] == 1 && $goods['lock_time'] > 0) { $redis = new \Redis(); $redis->connect('127.0.0.1', 6379); $redis_key = "kpw_lock" . '_' . $goods_id_num; $redis_key_info = $redis->get($redis_key); if ($redis_key_info) { return $this->renderError("有会员正在锁箱,请等待"); } else { $redis->set($redis_key, 1, 1); } #默认锁箱时间 $defaulttime = (time() + $goods['lock_time']); #锁箱信息 $lock_info = GoodsLock::where('goods_id_num', '=', $goods_id_num) ->where('endtime', '>', time()) ->order('id desc') ->find(); if ($lock_info) {#存在锁箱 if ($prize_num == 3 || $prize_num == 5) { $config_time = getConfig('base'); if ($prize_num == 3) { $endtime = $defaulttime + $config_time['three_time']; } elseif ($prize_num == 5) { $endtime = $defaulttime + $config_time['five_time']; } GoodsLock::where('id', '=', $lock_info['id']) ->update([ 'endtime' => $endtime, 'update_time' => time(), ]); } else { GoodsLock::where('id', '=', $lock_info['id']) ->update([ 'endtime' => $defaulttime, 'update_time' => time(), ]); } } else { if ($prize_num == 3 || $prize_num == 5) { $config_time = getConfig('base'); if ($prize_num == 3) { $endtime = $defaulttime + $config_time['three_time']; } elseif ($prize_num == 5) { $endtime = $defaulttime + $config_time['five_time']; } #新增锁箱信息 GoodsLock::insert([ 'user_id' => $user['id'], 'goods_id_num' => $goods_id_num, 'endtime' => $endtime, 'update_time' => time(), ]); } else { #新增锁箱信息 GoodsLock::insert([ 'user_id' => $user['id'], 'goods_id_num' => $goods_id_num, 'endtime' => $defaulttime, 'update_time' => time(), ]); } } } } #一番赏锁箱 $redis = new \Redis(); $redis->connect('127.0.0.1', 6379); $redis_key = "kpw_orderbuy" . '_' . $user['id']; $redis_key_info = $redis->get($redis_key); if ($redis_key_info) { return $this->renderError("当前操作太快了,请等待"); } else { $redis->set($redis_key, 1, 10); } //轮换商户号 $redis_pay_key = "pay_sh"; $redis_pay_key_info = $redis->get($redis_pay_key); if(!$redis_pay_key_info){ $redis->set($redis_pay_key, 1, 86400); $redis_pay_key_info = $redis->get($redis_pay_key); } Db::startTrans(); #===================================================*********** #奖品信息加锁 GoodsList::field('id,stock,surplus_stock') ->where('goods_id', '=', $goods_id) ->where('num', '=', $num) ->lock(true)->select(); #奖品信息 $goodslist_lock = GoodsList::field('sum(`surplus_stock`) as surplus_stock') ->where('goods_id', '=', $goods_id) ->where('num', '=', $num) ->where('shang_id', 'in', self::$shang_prize_id) ->find(); #判断库存 if ($goodslist_lock['surplus_stock'] <= 0) { Db::rollback(); $redis->del($redis_key); return $this->renderError("已售空,请刷新重试"); } #===================================================*********** $res = []; $order_num = create_order_no('MH_', 'order', 'order_num'); #创建订单 $res[] = $order_id = Order::insertGetId([ 'user_id' => $user['id'], 'order_num' => $order_num, 'order_total' => $order_total,#订单金额 'order_zhe_total' => $order_zhe_total,#订单折扣金额 'price' => $price,#微信支付 'use_money' => $use_money,#余额抵扣 'use_integral' => $use_integral,#潮币抵扣 'use_score' => $use_score,#积分抵扣 'zhe' => $zhe,#会员折扣 'goods_id' => $goods_id, 'num' => $num, 'goods_price' => $goods['price'], 'goods_title' => $goods['title'], 'goods_imgurl' => $goods['imgurl_detail'], 'prize_num' => $prize_num, 'status' => 0, 'pay_type' => $pay_type,#1微信 2支付宝 'pay_sh' => $redis_pay_key_info, 'order_type' => $goods['type'], 'addtime' => time(), 'coupon_id' => $coupon_id?$coupon_id:0, 'use_coupon' => $coupon_price #优惠券抵扣 ]); #微信支付金额大于0 if ($price > 0) { $body = '购买盒子' . $goods['title']; if($pay_type == 1){ if ($goods['type'] == 1) { $attach = 'order_yfs'; } elseif ($goods['type'] == 3) { $attach = 'order_lts'; } elseif ($goods['type'] == 6) { $attach = 'order_lts'; } $payRes = (new Pay())->wxCreateOrder($order_num, $price, $user['openid'], $body, $attach,$redis_pay_key_info); if($redis_pay_key_info == 1){ $redis->set($redis_pay_key, 2, 86400); }elseif($redis_pay_key_info == 2){ $redis->set($redis_pay_key, 3, 86400); }elseif($redis_pay_key_info == 3){ $redis->set($redis_pay_key, 4, 86400); }elseif($redis_pay_key_info == 4){ $redis->set($redis_pay_key, 5, 86400); }elseif($redis_pay_key_info == 5){ $redis->set($redis_pay_key, 1, 86400); } if ($payRes['status'] == 1) { #结果集 $new_data = [ 'status' => 1, 'pay_type'=>$pay_type, 'order_num' => $order_num, 'res' => $payRes['data'], ]; } else { #删除redis $redis->del($redis_key); Db::rollback(); return $this->renderError("下单失败"); } } if($pay_type == 2){ //生成一个 api/login/alipay?订单号的链接 $url = 'https://zxcw.xby6991282.xyz/api/alipay?order_num='.$order_num; if($url && $order_num){ #结果集 $new_data = [ 'status' => 1, 'pay_type'=>$pay_type, 'order_num' => $order_num, 'res' => $url, ]; } else { #删除redis $redis->del($redis_key); Db::rollback(); return $this->renderError("下单失败"); } } if($pay_type == 3){ //调用通联支付 $payRes = (new Allinpay())->pay($order_num, $price, $user['openid'], $body); if($payRes['status'] == 1){ #结果集 $new_data = [ 'status' => 1, 'pay_type'=>$pay_type, 'order_num' => $order_num, 'res' => json_decode($payRes['data']['payinfo'], true), ]; } else { #删除redis $redis->del($redis_key); Db::rollback(); return $this->renderError("下单失败"); } } } else { try { #开盒子 $res[] = (new Notify($this->app))->drawprize_notice($user['id'], $order_id, $goods_id, $num); } catch (\Throwable $e) { Db::rollback(); #删除redis $redis->del($redis_key); return $this->renderError("火爆中...请刷新重新购买"); } #结果集 $new_data = [ 'status' => 0, 'order_num' => $order_num, ]; } if (resCheck($res)) { Db::commit(); #删除redis $redis->del($redis_key); return $this->renderSuccess("下单成功", $new_data); } else { Db::rollback(); #删除redis $redis->del($redis_key); return $this->renderError("购买失败,请刷新重试"); } } /** * 抽中的奖品 * $order_num 订单编号 */ public function prizeorderlog() { $user = $this->getUser(); $order_num = request()->param('order_num', ''); $order_info = Order::field('id,goods_id,num,order_type,price,pay_sh,pay_type') ->where('order_num', '=', $order_num) ->where('user_id', '=', $user['id']) ->where('status', '=', 1) ->find(); if (!$order_info) { return $this->renderError("支付异常,请刷新重试"); } // if($order_info['price'] > 0 && $order_info['pay_type'] !== 2 && $order_info['pay_type'] !== 4){ // $this->xcc_fahuo($order_num,$user['openid'],$order_info['pay_sh'],$order_info['pay_type']); // } #普通赏 $data = OrderList::field('user_id,shang_id,goodslist_id,goodslist_title,goodslist_imgurl') ->append(['shang_title','shang_imgurl','special_imgurl','color','color1','gn_type']) ->where('user_id', '=', $user['id']) ->where('order_id', '=', $order_info['id']) ->where('order_type', '=', $order_info['order_type']) // ->orderRaw("field(shang_id,39,34,35,36,37,38) asc,id asc") ->order('shang_id asc, id asc') ->paginate(100)->each(function ($item) { $item['goodslist_imgurl'] = imageUrl($item['goodslist_imgurl']); return $item; }); $new_data = [ 'user_info' => [ 'nickname' => $user['nickname'], 'headimg' => $user['headimg'], ], 'data' => $data->items(), ]; return $this->renderSuccess("请求成功", $new_data); } /** * 支付同步发货 */ public function xcc_fahuo($order_num,$openid,$pay_sh = 1,$pay_type = 1){ #同步发货********************************************************** log::info("**********************************************************"); log::info("开始发货 order_num:,".json_encode($order_num)); log::info("开始发货 openid:,".json_encode($openid)); $wxServer = new \app\common\server\Wx($this->app); $access_token = $wxServer->get_access_token(); log::info("获取token:,".json_encode($access_token)); $send_url = 'https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token='.$access_token; if($pay_type == 1){ if($pay_sh == 1){ $mch_id = getConfig('weixinpay')['mch_id']; }elseif($pay_sh == 2){ $mch_id = getConfig('weixinpay')['mch_id2']; }elseif($pay_sh == 3){ $mch_id = getConfig('weixinpay')['mch_id3']; }elseif($pay_sh == 4){ $mch_id = getConfig('weixinpay')['mch_id4']; }elseif($pay_sh == 5){ $mch_id = getConfig('weixinpay')['mch_id5']; } } if($pay_type == 3 || $pay_type == 4){ $mch_id = '1501244881'; $content = Db::name('wxpay_log')->where('order_no',$order_num)->value('content'); $content = json_decode($content,true); $order_num = $content['trxid']; log::info("通联发货:,".$order_num); } $sendD = [ 'order_key' => [ 'order_number_type' => 1, //订单单号类型,用于确认需要上传详情的订单。枚举值1,使用下单商户号商户侧单号;枚举值2,使用微信支付单号。 "mchid" => $mch_id, "out_trade_no"=>$order_num ], 'logistics_type' => 3,//物流模式,发货方式枚举值:1、实体物流配送采用快递公司进行实体物流配送形式 2、同城配送 3、虚拟商品,虚拟商品,例如话费充值,点卡等,无实体配送形式 4、用户自提 'delivery_mode' => 1, //发货模式,发货模式枚举值:1、UNIFIED_DELIVERY(统一发货)2、SPLIT_DELIVERY(分拆发货) 示例值: UNIFIED_DELIVERY 'shipping_list' => [ [ 'item_desc' => '您的商品已发到赏袋,请自行发货' ] ], 'upload_time' => date('Y-m-d\TH:i:sP', time()), 'payer' => [ 'openid' => $openid ] ]; $sendD = json_encode($sendD, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); $result = $this->httpPost($send_url,$sendD); log::info("发货结果:,".$result); $result = json_decode($result,true); } // 模拟提交数据函数 public function httpPost($url,$data){ $curl = curl_init(); // 启动一个CURL会话 curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在 curl_setopt($curl, CURLOPT_POST, true); // 发送一个常规的Post请求 curl_setopt($curl, CURLOPT_POSTFIELDS,$data); // Post提交的数据包 curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环 curl_setopt($curl, CURLOPT_HEADER, false); // 显示返回的Header区域内容 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 获取的信息以文件流的形式返回 $result = curl_exec($curl); // 执行操作 if (curl_errno($curl)) { return 'Error POST'.curl_error($curl); } curl_close($curl); // 关键CURL会话 return $result; // 返回数据 } /** * 收藏列表 */ public function listCollect(Request $request) { $user = $this->getUser(); $type = \request()->param('type', 0); if ($type == 1) { $data = Collect::field('id,goods_id,type,num') ->where(['user_id' => $user['id']]) ->where('type', 'in', [1, 3, 5]) ->append(['goods_info']) ->paginate(100)->each(function ($item) { $item['goods_title'] = $item['goods_info']['title']; $item['imgurl'] = imageUrl($item['goods_info']['imgurl']); if ($item['type'] == 1 || $item['type'] == 3 || $item['type'] == 5) { #库存 $surplus = GoodsList::field('sum(`stock`) as stock, sum(`surplus_stock`) as surplus_stock') ->where('goods_id', '=', $item['goods_id']) ->where('num', '=', $item['num']) ->where('shang_id', 'in', self::$shang_prize_id) ->find(); $item['stock'] = $surplus['stock']; $item['surplus_stock'] = $surplus['surplus_stock']; } else { $item['stock'] = 0; $item['surplus_stock'] = 0; } return $item; }); } elseif ($type == 2) { $data = Collect::field('id,goods_id,type,num') ->where(['user_id' => $user['id']]) ->where('type', '=', 2) ->append(['goods_info']) ->paginate(100)->each(function ($item) { $item['goods_title'] = $item['goods_info']['title']; $item['imgurl'] = imageUrl($item['goods_info']['imgurl']); if ($item['type'] == 1 || $item['type'] == 3 || $item['type'] == 5) { #库存 $surplus = GoodsList::field('sum(`stock`) as stock, sum(`surplus_stock`) as surplus_stock') ->where('goods_id', '=', $item['goods_id']) ->where('num', '=', $item['num']) ->where('shang_id', 'in', self::$shang_prize_id) ->find(); $item['stock'] = $surplus['stock']; $item['surplus_stock'] = $surplus['surplus_stock']; } else { $item['stock'] = 0; $item['surplus_stock'] = 0; } return $item; }); } $new_data = [ 'data' => $data->items(), 'last_page' => $data->lastPage(), ]; return $this->renderSuccess("操作成功", $new_data); } /** * 添加收藏 */ public function addCollect(Request $request) { $user = $this->getUser(); $goods_id = request()->param('goods_id/d', 0); $goods_num = request()->param('goods_num/d', 0); #盒子信息 $goods = Goodsmodel::field('id,stock,status,type') ->where(['id' => $goods_id]) ->find(); if (!$goods) { return $this->renderError("盒子不存在"); } if ($goods['status'] != 1 && $goods['status'] != 3) { return $this->renderError("盒子已下架"); } $info = Collect::field('id') ->where(['user_id' => $user['id']]) ->where(['goods_id' => $goods_id]) ->where(['num' => $goods_num]) ->find(); if ($info) { $res = Collect::where(['id' => $info['id']])->delete(); } else { $res = Collect::insert([ 'user_id' => $user['id'], 'goods_id' => $goods_id, 'num' => $goods_num, 'type' => $goods['type'], 'addtime' => time(), ]); } if ($res) { return $this->renderSuccess("操作成功"); } else { return $this->renderError("操作失败"); } } /** * 删除收藏 */ public function delCollect(Request $request) { $user = $this->getUser(); $id = request()->param('id/d', 0); $info = Collect::field('id') ->where(['user_id' => $user['id']]) ->where(['id' => $id]) ->find(); if (!$info) { return $this->renderError("请求重复操作"); } $res = Collect::where(['id' => $info['id']])->delete(); if ($res) { return $this->renderSuccess("删除成功"); } else { return $this->renderError("删除失败"); } } /** * 抽奖统计 * @param Request $request *created by Admin at 2022/12/21 11:14 */ public function luck_draw_log(Request $request){ $id = $request->param('id'); $goods = Goodsmodel::where('id',$id)->find(); if (!$goods){ return $this->renderError("盒子不存在"); } $user_ids = OrderList::field('user_id') ->append(['userinfo']) ->where('goods_id',$goods['id']) ->group('user_id') ->paginate(20); foreach ($user_ids as $value){ $count = OrderList::field('user_id') ->where('goods_id',$goods['id']) ->where('user_id',$value['user_id']) ->count(); $value['count'] = $count; } return $this->renderSuccess("操作成功", $user_ids); } /* 宝箱详情 */ public function box_detail(Request $request){ $id = $request->param('id'); // $goods_num = request()->param('goods_num/d', 0); if(empty($id) ){ return $this->renderError("参数有误"); } $box_detail = GoodsList::where('id', '=', $id) ->where('shang_id', '=', 39) ->find(); if(empty($box_detail)){ return $this->renderError("宝箱不存在"); } $type = Goodsmodel::where(['id'=>$box_detail['goods_id']])->value('type'); if ($type == 1 || $type == 3 || $type == 5 || $type == 6) { $whe[] = ['num', '=', 1]; #因为是一番赏,所以有点区别 $id = GoodsList::where('goods_id', '=', $box_detail['goods_id']) ->where('prize_code','=',$box_detail['prize_code']) ->where('shang_id', '=', 39) ->where('num','=',1) ->value('id'); } elseif ($type == 2) { $whe[] = ['num', '=', 0]; } else { return $this->renderError('请求参数错误1'); } #所有奖品信息 $goods_list = GoodsList::field('goods_id,shang_id,title,imgurl,price,real_pro,sc_money,gn_type') ->append(['shang_info']) ->withAttr('imgurl', function($value, $data){ return imageUrl($value); }) ->where(['box_id' => $id]) ->where($whe) ->order('sort desc,shang_id asc,id asc') ->paginate(1000); foreach ($goods_list as &$value) { $value['shang_title'] = $value['shang_info']['title']; $value['shang_imgurl'] = $value['shang_info']['imgurl']; $value['shang_color'] = $value['shang_info']['color']; unset($value['shang_info']); } return $this->renderSuccess("请求成功", $goods_list); } } 请帮我将这个代码里的orderbuy这个方法限额消费那里,检查超出限额后微信支付不能支付但是潮币支付仍然可以支付只限制微信支付
最新发布
06-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值