Merge remote-tracking branch 'origin/develop' into develop
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
* 钻石兑换金币比例
|
||||
*/
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
|
||||
@@ -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);//用户上了这个房间的几号麦位
|
||||
|
||||
@@ -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){
|
||||
|
||||
Reference in New Issue
Block a user