Merge remote-tracking branch 'origin/develop' into develop

This commit is contained in:
2025-12-25 12:33:08 +08:00
6 changed files with 149 additions and 7 deletions

View File

@@ -66,7 +66,6 @@ class Payment extends Controller
$order_number = $this->createOrderSn();
$data['order_sn'] = $order_number;
$data['money'] = $money;
$data['coin'] = $coin;
$data['user_id'] = $user_id;
$data['pay_type'] = $type;
$data['createtime'] = time();
@@ -96,7 +95,10 @@ class Payment extends Controller
$tonglian = new \TongLian();
$result['tl'] = $tonglian->TongLianPay($data, $type);
}elseif($type == 6){
$result = null;
$result = [
'order_no' => $order_number,
// 'merchant_id' => get_system_config_value('merchant_id')
];
}else{
return V(0, '请选择正确的支付方式', null);
}
@@ -339,4 +341,92 @@ class Payment extends Controller
echo "fail";
}
}
//苹果回调
public function notify_apple(){
// 1. 接收APP端参数
$orderNo = input('order_no', 0);
$paymentToken = input('payment_token', ''); // APP端获取的支付凭证
// 2. 参数校验
if (empty($orderNo) || empty($paymentToken)) {
return V(0, '参数缺失');
}
// 3. 查询订单(防止订单不存在)
$order = Db::name('vs_user_recharge')->where('order_sn', $orderNo)->find();
if (!$order) {
return V(0, '订单不存在');
}
if ($order['pay_status'] == 2) {
return V(0, '订单已支付');// 幂等处理,防止重复回调
}
// 4. 调用苹果接口验证支付凭证
$verifyResult = $this->verifyApplePayReceipt($paymentToken);
if (!$verifyResult) {
return V(0, '支付凭证验证失败');
}
// 2. 从苹果返回的凭证中解析实际支付金额(//沙箱环境没有这个参数)
$applePayAmount = $verifyResult['receipt']['in_app'][0]['price'] ?? 0; // 苹果返回的实际支付金额
// 3. 校验金额一致性(允许微小误差,如分位四舍五入)
if (abs($order['money'] - $applePayAmount) > 0.01) {
// 金额不一致,拒绝更新订单
// return V(0, '金额不一致');//沙箱环境没有这个参数
}
$transaction_id = $verifyResult['receipt']['in_app'][0]['transaction_id'] ?? '';// 苹果返回的订单号
// 5. 更新订单状态
//成功后的业务逻辑处理
$where['order_sn']=$orderNo;
$where['order_type']=1;//1 充值
$where['pay_type']=6;//1微信2支付宝 3通联支付宝 4通联微信
$where['pay_status']=1;
$data=[
'trade_no' => $transaction_id
];
$res = handelCharge($where,$data);
if($res==0){
return V(0, '订单处理失败');
}
return V(1, '支付成功');
}
// 核心:调用苹果服务器验证支付凭证
private function verifyApplePayReceipt($paymentToken)
{
// 订单创建时的金额(固定/用户输入的自由金额)
// 1. 组装请求参数
$postData = json_encode([
'receipt-data' => $paymentToken, // APP端传入的支付凭
]);
// 2. 先请求生产环境,失败再试沙箱(苹果推荐逻辑)
// $url = 'https://buy.itunes.apple.com/verifyReceipt';//正式验证环境
$url = "https://sandbox.itunes.apple.com/verifyReceipt";//沙箱测试环境
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 生产环境建议开启
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
$result = curl_exec($ch);
curl_close($ch);
$result = json_decode($result, true);
// 验证返回码status=0表示验证成功
if ($result['status'] == 0) {
return $result;
}
return false;
}
}

View File

@@ -87,6 +87,47 @@ class UserWallet extends BaseCom
}
return V(1, '获取成功', $reslut_data);
}
//苹果商店充值金额列表
public function can_recharge_list_ios(){
$app_version = request()->header('App-Version');
$system = request()->header('system');
$reslut = db::name("vs_can_recharge")->where("status",1)->where("delete_time",0)->order('money asc')->select();
$reslut_data = [];
if ($system == 'iOS') {
$api_versions = db::name('version')->where(['type' => 2, 'status' => 1])->order('id', 'desc')->find();
//app的版本和用户使用的当前版本比对
//$api_versions['newversion'] 是数据库当前的版本 也是用户使用的版本
//$app_version 有可能是appstore里面的审核版本 审核版本比用户的版本高
$result = version_compare($api_versions['newversion'],$app_version);
if ($result < 0) {//-1:前面版本小于后面版本,0:相等,1:前面版本大于后面版本
// $api_version = 1;//商店审核版本给前端返回1
foreach ($reslut as $k=>$v){
if($v['money'] == 2000){
$reslut_data[$k]['money'] = 1999;
}else{
$reslut_data[$k]['money'] = $v['money'];
}
$reslut_data[$k]['coins'] = $v['coins'];
$reslut_data[$k]['ios_coins'] = $v['coins'] * 7 / 10;
$reslut_data[$k]['product_id'] = $v['product_id'];
}
}else{
foreach ($reslut as $k=>$v){
$reslut_data[$k]['money'] = $v['money'];
$reslut_data[$k]['coins'] = $v['coins'];
$reslut_data[$k]['ios_coins'] = $v['coins'] * 7 / 10;
$reslut_data[$k]['product_id'] = $v['product_id'];
}
}
}
return V(1, '获取成功', $reslut_data);
}
/*
* 钻石兑换金币比例
*/

View File

@@ -2745,7 +2745,6 @@ class Room extends Model
}
}
$data = [];
//1-交友3、4、8-不要了
if($type == 1 || $type == 3 || $type == 4 || $type == 8){
@@ -2756,6 +2755,7 @@ class Room extends Model
'is_song' => 1
];
}
//拍卖
if($type == 2){
$data = [
@@ -2765,6 +2765,7 @@ class Room extends Model
'is_song' => 1
];
}
//(互娱)
if($type == 7){
$data = [
@@ -2782,6 +2783,7 @@ class Room extends Model
'room_up_pit_type' => 1,
];
}
//签约房
if($type == 10){
$data = [
@@ -2843,6 +2845,7 @@ class Room extends Model
'text' => '房间类型已修改type--'.$type
];
model('Chat')->sendMsg(1012,$room_id,$text);
Cache::rm('room_info_'.$room_id);
return ['code' => 1, 'msg' => '修改成功', 'data' => null];
}

View File

@@ -294,6 +294,8 @@ class RoomPit extends Model
}
}
//检查是否在坑位上
$pit_infos = db::name('vs_room_pit')->where(['room_id' => $room_id, 'user_id' => $user_id])->field('id,pit_number')->find();
if($pit_number == 9){
//检查用户是否是房主或主持
$is_room_owner =db::name('vs_room')->where(['id' => $room_id, 'user_id' => $user_id])->field('id')->find();
@@ -301,15 +303,15 @@ class RoomPit extends Model
if(!$is_room_owner && !$is_room_host){
return ['code' => 0, 'msg' => '没有权限', 'data' => null];
}
if($pit_infos){
return ['code' => 0, 'msg' => '您已在麦上', 'data' => null];
}
}
if($pit_number == 10){
return ['code' => 0, 'msg' => '请等待主持抱麦', 'data' => null];
}
//检查是否在坑位上
$pit_infos = db::name('vs_room_pit')->where(['room_id' => $room_id, 'user_id' => $user_id])->field('id,pit_number')->find();
if($room_info['label_id'] == 5 && $room_info['step'] != 1 && $pit_number < 9){
return ['code' => 0, 'msg' => '互娱房 此阶段不可此操作', 'data' => null];
}

View File

@@ -140,6 +140,7 @@ class RoomSong extends Model
model('RoomPit')->DownPit($v['user_id'],$room_id,$v['pit_number']);
}
}
Cache::rm('room_info_'.$room_id);
//推送消息
$text = [
'text' => '房间类型变成k歌--2'
@@ -529,6 +530,11 @@ class RoomSong extends Model
if(!$host && $owner != $user_id){
return ['code' => 0, 'msg' => '您没有权限上麦', 'data' => null];
}
//检查是否在坑位上
$pit_infos = db::name('vs_room_pit')->where(['room_id' => $room_id, 'user_id' => $user_id])->field('id,pit_number')->find();
if($pit_infos){
return ['code' => 0, 'msg' => '您已在麦上', 'data' => null];
}
}
$ompit = model('RoomPit')->OnPit($user_id,$room_id,$pit_number);//用户上了这个房间的几号麦位

View File

@@ -867,7 +867,7 @@ class User extends Model
$member_name = db::name('user')->where('id' , $user_id)->value('nickname');
$member_face_url = db::name('user')->where('id' , $user_id)->value('avatar');
model('Tencent')->modify_user_infos($user_id, $member_name, $member_face_url);
Cache::rm('user_base_info_'.$user_id);
return ['code' => 1, 'msg' => '修改成功', 'data' => null];
}
catch(\Exception $e){