From 6c5a84aaf29a2aab7f56182c5eb7382b454d39df Mon Sep 17 00:00:00 2001
From: tianya <yanghuxiao@vip.qq.com>
Date: Mon, 27 Feb 2023 22:51:48 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=94=AF=E4=BB=98=E7=94=A8?=
 =?UTF-8?q?=E6=88=B7=E7=AD=89=E7=BA=A7=E5=8D=87=E7=BA=A7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/admin/member_do.php | 32 +++++++++++++++++---
 src/apps/notify.php     | 66 ++++++++++++++++++++++++++++++++++-------
 src/apps/return.php     | 33 +++++++++++++++++----
 src/user/buy_action.php | 36 ++++++++++++++++++----
 4 files changed, 142 insertions(+), 25 deletions(-)

diff --git a/src/admin/member_do.php b/src/admin/member_do.php
index 0d4f7e34..cda9f990 100644
--- a/src/admin/member_do.php
+++ b/src/admin/member_do.php
@@ -200,11 +200,14 @@ else if ($dopost == "memberlogin") {
     $nid = explode(',', $nid);
     if (is_array($nid)) {
         foreach ($nid as $var) {
-            $query = "UPDATE `#@__member_operation` SET sta = '1' WHERE aid = '$var'";
-            $dsql->ExecuteNoneQuery($query);
-            ShowMsg("设置成功", "member_operations.php");
-            exit();
+            $moRow = $dsql->GetOne("SELECT * FROM `#@__member_operation` WHERE aid='$var'");
+            if ($moRow['sta'] == 0) {
+                $query = "UPDATE `#@__member_operation` SET sta = '1' WHERE aid = '$var'";
+                $dsql->ExecuteNoneQuery($query);
+            }
         }
+        ShowMsg("设置成功", "member_operations.php");
+        exit();
     }
 } else if ($dopost == "okoperations") {
     $nid = preg_replace('#[^0-9,]#', '', preg_replace('#`#', ',', $nid));
@@ -218,6 +221,27 @@ else if ($dopost == "memberlogin") {
                     $proRow = $dsql->GetOne("SELECT * FROM `#@__moneycard_type` WHERE tid={$moRow['pid']}");
                     $query = "UPDATE `#@__member` SET money = money+{$proRow['num']} WHERE mid = '{$moRow['mid']}'";
                     $dsql->ExecuteNoneQuery($query);
+                } else if ($moRow['product'] === "member"){
+                    $row = $dsql->GetOne("SELECT * FROM `#@__member_type` WHERE aid='{$moRow['pid']}'");
+                    $rank = $row['rank'];
+                    $exptime = $row['exptime'];
+                    $rs = $dsql->GetOne("SELECT uptime,exptime FROM `#@__member` WHERE mid='".$moRow['mid']."'");
+                    if($rs['uptime']!=0 && $rs['exptime']!=0 ) 
+                    {
+                        $nowtime = time();
+                        $mhasDay = $rs['exptime'] - ceil(($nowtime - $rs['uptime'])/3600/24) + 1;
+                        $mhasDay=($mhasDay>0)? $mhasDay : 0;
+                    }
+                    $memrank = $dsql->GetOne("SELECT money,scores FROM `#@__arcrank` WHERE `rank`='$rank'");
+                    
+                    //更新会员信息
+                    $sqlm =  "UPDATE `#@__member` SET `rank`='$rank',`money`=`money`+'{$memrank['money']}',scores=scores+'{$memrank['scores']}',exptime='$exptime'+'$mhasDay',uptime='".time()."' WHERE mid='".$moRow['mid']."'";
+                    $sqlmo = "UPDATE `#@__member_operation` SET sta='2',oldinfo='会员升级成功' WHERE buyid='{$moRow['pid']}' ";
+                    if(!($dsql->ExecuteNoneQuery($sqlm) && $dsql->ExecuteNoneQuery($sqlmo)))
+                    {
+                        ShowMsg("升级会员失败", "javascript:;");
+                        exit;
+                    }
                 }
                 $query = "UPDATE `#@__member_operation` SET sta = '2' WHERE aid = '$var'";
                 $dsql->ExecuteNoneQuery($query);
diff --git a/src/apps/notify.php b/src/apps/notify.php
index 5fe874de..d7992143 100644
--- a/src/apps/notify.php
+++ b/src/apps/notify.php
@@ -40,11 +40,34 @@ if ($dopost === 'alipay') {
             // $pay = \AliPay\Transfer::instance($config);
             $result = $pay->query($data['out_trade_no']);
             if ($result['trade_status']=== "TRADE_SUCCESS") {
-                $row = $dsql->GetOne("SELECT * FROM `#@__moneycard_type` WHERE tid='{$moRow['pid']}'");
-                $query = "UPDATE `#@__member_operation` SET sta = '2' WHERE buyid = '$buyid'";
-                $dsql->ExecuteNoneQuery($query);
-                $query = "UPDATE `#@__member` SET money = money+{$row['num']} WHERE mid = '{$moRow['mid']}'";
-                $dsql->ExecuteNoneQuery($query);
+                if ($moRow['product'] === "card") {
+                    $row = $dsql->GetOne("SELECT * FROM `#@__moneycard_type` WHERE tid='{$moRow['pid']}'");
+                    $query = "UPDATE `#@__member_operation` SET sta = '2' WHERE buyid = '$buyid'";
+                    $dsql->ExecuteNoneQuery($query);
+                    $query = "UPDATE `#@__member` SET money = money+{$row['num']} WHERE mid = '{$moRow['mid']}'";
+                    $dsql->ExecuteNoneQuery($query);
+                } else if($moRow['product'] === "member"){
+                    $row = $dsql->GetOne("SELECT * FROM `#@__member_type` WHERE aid='{$moRow['pid']}'");
+                    $rank = $row['rank'];
+                    $exptime = $row['exptime'];
+                    $rs = $dsql->GetOne("SELECT uptime,exptime FROM `#@__member` WHERE mid='".$moRow['mid']."'");
+                    if($rs['uptime']!=0 && $rs['exptime']!=0 ) 
+                    {
+                        $nowtime = time();
+                        $mhasDay = $rs['exptime'] - ceil(($nowtime - $rs['uptime'])/3600/24) + 1;
+                        $mhasDay=($mhasDay>0)? $mhasDay : 0;
+                    }
+                    $memrank = $dsql->GetOne("SELECT money,scores FROM `#@__arcrank` WHERE `rank`='$rank'");
+                    
+                    //更新会员信息
+                    $sqlm =  "UPDATE `#@__member` SET `rank`='$rank',`money`=`money`+'{$memrank['money']}',scores=scores+'{$memrank['scores']}',exptime='$exptime'+'$mhasDay',uptime='".time()."' WHERE mid='".$moRow['mid']."'";
+                    $sqlmo = "UPDATE `#@__member_operation` SET sta='2',oldinfo='会员升级成功' WHERE buyid='{$moRow['pid']}' ";
+                    if(!($dsql->ExecuteNoneQuery($sqlm) && $dsql->ExecuteNoneQuery($sqlmo)))
+                    {
+                        ShowMsg("升级会员失败", "javascript:;");
+                        exit;
+                    }
+                }
                 ShowMsg("已经完成付款", $cfg_memberurl."/index.php");
                 exit;
             }
@@ -73,11 +96,34 @@ if ($dopost === 'alipay') {
             ShowMsg("订单查询错误,请确保是您自己发起的订单", "javascript:;");
             exit;
         }
-        $row = $dsql->GetOne("SELECT * FROM `#@__moneycard_type` WHERE tid='{$moRow['pid']}'");
-        $query = "UPDATE `#@__member_operation` SET sta = '2' WHERE buyid = '$buyid'";
-        $dsql->ExecuteNoneQuery($query);
-        $query = "UPDATE `#@__member` SET money = money+{$row['num']} WHERE mid = '{$moRow['mid']}'";
-        $dsql->ExecuteNoneQuery($query);
+        if ($moRow['product'] === "card") {
+            $row = $dsql->GetOne("SELECT * FROM `#@__moneycard_type` WHERE tid='{$moRow['pid']}'");
+            $query = "UPDATE `#@__member_operation` SET sta = '2' WHERE buyid = '$buyid'";
+            $dsql->ExecuteNoneQuery($query);
+            $query = "UPDATE `#@__member` SET money = money+{$row['num']} WHERE mid = '{$moRow['mid']}'";
+            $dsql->ExecuteNoneQuery($query);
+        } else if($moRow['product'] === "member"){
+            $row = $dsql->GetOne("SELECT * FROM `#@__member_type` WHERE aid='{$moRow['pid']}'");
+            $rank = $row['rank'];
+            $exptime = $row['exptime'];
+            $rs = $dsql->GetOne("SELECT uptime,exptime FROM `#@__member` WHERE mid='".$moRow['mid']."'");
+            if($rs['uptime']!=0 && $rs['exptime']!=0 ) 
+            {
+                $nowtime = time();
+                $mhasDay = $rs['exptime'] - ceil(($nowtime - $rs['uptime'])/3600/24) + 1;
+                $mhasDay=($mhasDay>0)? $mhasDay : 0;
+            }
+            $memrank = $dsql->GetOne("SELECT money,scores FROM `#@__arcrank` WHERE `rank`='$rank'");
+            
+            //更新会员信息
+            $sqlm =  "UPDATE `#@__member` SET `rank`='$rank',`money`=`money`+'{$memrank['money']}',scores=scores+'{$memrank['scores']}',exptime='$exptime'+'$mhasDay',uptime='".time()."' WHERE mid='".$moRow['mid']."'";
+            $sqlmo = "UPDATE `#@__member_operation` SET sta='2',oldinfo='会员升级成功' WHERE buyid='{$moRow['pid']}' ";
+            if(!($dsql->ExecuteNoneQuery($sqlm) && $dsql->ExecuteNoneQuery($sqlmo)))
+            {
+                ShowMsg("升级会员失败", "javascript:;");
+                exit;
+            }
+        }
         echo "success";
         exit;
     } else {
diff --git a/src/apps/return.php b/src/apps/return.php
index 6973d9a1..321b7475 100644
--- a/src/apps/return.php
+++ b/src/apps/return.php
@@ -40,11 +40,34 @@ if ($dopost === 'alipay') {
             // $pay = \AliPay\Transfer::instance($config);
             $result = $pay->query($data['out_trade_no']);
             if ($result['trade_status']=== "TRADE_SUCCESS") {
-                $row = $dsql->GetOne("SELECT * FROM `#@__moneycard_type` WHERE tid='{$moRow['pid']}'");
-                $query = "UPDATE `#@__member_operation` SET sta = '2' WHERE buyid = '$buyid'";
-                $dsql->ExecuteNoneQuery($query);
-                $query = "UPDATE `#@__member` SET money = money+{$row['num']} WHERE mid = '{$moRow['mid']}'";
-                $dsql->ExecuteNoneQuery($query);
+                if ($moRow['product'] === "card") {
+                    $row = $dsql->GetOne("SELECT * FROM `#@__moneycard_type` WHERE tid='{$moRow['pid']}'");
+                    $query = "UPDATE `#@__member_operation` SET sta = '2' WHERE buyid = '$buyid'";
+                    $dsql->ExecuteNoneQuery($query);
+                    $query = "UPDATE `#@__member` SET money = money+{$row['num']} WHERE mid = '{$moRow['mid']}'";
+                    $dsql->ExecuteNoneQuery($query);
+                } else if($moRow['product'] === "member"){
+                    $row = $dsql->GetOne("SELECT * FROM `#@__member_type` WHERE aid='{$moRow['pid']}'");
+                    $rank = $row['rank'];
+                    $exptime = $row['exptime'];
+                    $rs = $dsql->GetOne("SELECT uptime,exptime FROM `#@__member` WHERE mid='".$moRow['mid']."'");
+                    if($rs['uptime']!=0 && $rs['exptime']!=0 ) 
+                    {
+                        $nowtime = time();
+                        $mhasDay = $rs['exptime'] - ceil(($nowtime - $rs['uptime'])/3600/24) + 1;
+                        $mhasDay=($mhasDay>0)? $mhasDay : 0;
+                    }
+                    $memrank = $dsql->GetOne("SELECT money,scores FROM `#@__arcrank` WHERE `rank`='$rank'");
+                    
+                    //更新会员信息
+                    $sqlm =  "UPDATE `#@__member` SET `rank`='$rank',`money`=`money`+'{$memrank['money']}',scores=scores+'{$memrank['scores']}',exptime='$exptime'+'$mhasDay',uptime='".time()."' WHERE mid='".$moRow['mid']."'";
+                    $sqlmo = "UPDATE `#@__member_operation` SET sta='2',oldinfo='会员升级成功' WHERE buyid='{$moRow['pid']}' ";
+                    if(!($dsql->ExecuteNoneQuery($sqlm) && $dsql->ExecuteNoneQuery($sqlmo)))
+                    {
+                        ShowMsg("升级会员失败", "javascript:;");
+                        exit;
+                    }
+                }
                 ShowMsg("已经完成付款", $cfg_memberurl."/index.php");
                 exit;
             }
diff --git a/src/user/buy_action.php b/src/user/buy_action.php
index c7ce84e6..1404fb49 100755
--- a/src/user/buy_action.php
+++ b/src/user/buy_action.php
@@ -58,11 +58,35 @@ if ($dopost === "bank_ok") {
         exit;
     }
     if ($result['return_code'] === "SUCCESS" && $result['trade_state'] === "SUCCESS") {
-        $row = $dsql->GetOne("SELECT * FROM `#@__moneycard_type` WHERE tid='{$moRow['pid']}'");
-        $query = "UPDATE `#@__member_operation` SET sta = '2' WHERE buyid = '$buyid'";
-        $dsql->ExecuteNoneQuery($query);
-        $query = "UPDATE `#@__member` SET money = money+{$row['num']} WHERE mid = '$mid'";
-        $dsql->ExecuteNoneQuery($query);
+        if ($moRow['product'] === "card") {
+            $row = $dsql->GetOne("SELECT * FROM `#@__moneycard_type` WHERE tid='{$moRow['pid']}'");
+            $query = "UPDATE `#@__member_operation` SET sta = '2' WHERE buyid = '$buyid'";
+            $dsql->ExecuteNoneQuery($query);
+            $query = "UPDATE `#@__member` SET money = money+{$row['num']} WHERE mid = '$mid'";
+            $dsql->ExecuteNoneQuery($query);
+        } else if($moRow['product'] === "member"){
+            $row = $dsql->GetOne("SELECT * FROM `#@__member_type` WHERE aid='{$moRow['pid']}'");
+            $rank = $row['rank'];
+            $exptime = $row['exptime'];
+            $rs = $dsql->GetOne("SELECT uptime,exptime FROM `#@__member` WHERE mid='".$moRow['mid']."'");
+            if($rs['uptime']!=0 && $rs['exptime']!=0 ) 
+            {
+                $nowtime = time();
+                $mhasDay = $rs['exptime'] - ceil(($nowtime - $rs['uptime'])/3600/24) + 1;
+                $mhasDay=($mhasDay>0)? $mhasDay : 0;
+            }
+            $memrank = $dsql->GetOne("SELECT money,scores FROM `#@__arcrank` WHERE `rank`='$rank'");
+            
+            //更新会员信息
+            $sqlm =  "UPDATE `#@__member` SET `rank`='$rank',`money`=`money`+'{$memrank['money']}',scores=scores+'{$memrank['scores']}',exptime='$exptime'+'$mhasDay',uptime='".time()."' WHERE mid='".$moRow['mid']."'";
+            $sqlmo = "UPDATE `#@__member_operation` SET sta='2',oldinfo='会员升级成功' WHERE buyid='{$moRow['pid']}' ";
+            if(!($dsql->ExecuteNoneQuery($sqlm) && $dsql->ExecuteNoneQuery($sqlmo)))
+            {
+                ShowMsg("升级会员失败", "javascript:;");
+                exit;
+            }
+        }
+
         ShowMsg("已经完成付款", "index.php");
         exit;
     } else {
@@ -261,7 +285,7 @@ if ($paytype === 0) {
             $sqlmo = "UPDATE `#@__member_operation` SET sta='2',oldinfo='会员升级成功' WHERE buyid='$buyid' ";
             if(!($dsql->ExecuteNoneQuery($sqlm) && $dsql->ExecuteNoneQuery($sqlmo)))
             {
-                ShowMsg("余额付款升级会员失败", "javascript:;");
+                ShowMsg("升级会员失败", "javascript:;");
                 exit;
             }
         }