首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 微信刮刮卡抽獎系統完整實現(含微信介面整合)

     編輯:PHP 綜合知識

微信刮刮卡抽獎系統:後端邏輯與前端互動完整實現

刮刮卡、大轉盤等抽獎活動核心邏輯一致:概率控制 + 獎池管理 + 防刷機制。本文提供完整 PHP 後端獎品邏輯、前端刮刮互動、微信公眾號介面整合代碼。

後端獎品邏輯:prize.php

decr("prize_stock:{$prize_id}") 返回值 < 0 則改為「謝謝參與」
?>



    
    
    刮刮卡抽獎
    


    
    
    
獎項設置:

一等獎:iPhone 15 Pro 獎品數量:10

二等獎:AirPods Pro 獎品數量:50

三等獎:京東卡 100元 獎品數量:200

活動說明:

中獎用戶請準確填寫收貨地址,我們將以貨到付款方式郵寄!

祝您好運!再來一次

微信公眾號介面整合:sxxybbs_wx.php

responseMsg();

class WechatCallbackapiTest {
    public function responseMsg() {
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        if (!empty($postStr)) {
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            $fromUsername = $postObj->FromUserName;
            $toUsername = $postObj->ToUserName;
            $time = time();
            
            $textTpl = "
                
                
                %s
                
                
                0
            ";
            
            $newsTpl = "
                
                
                %s
                
                1
                
                    
                        <![CDATA[%s]]>
                        
                        
                        
                    
                
                0
            ";
            
            $keyword = trim($postObj->Content);
            if ($keyword == '抽獎' || $keyword == '刮刮卡') {
                $url = "https://yourdomain.com/prize.php";
                $resultStr = sprintf($newsTpl, $fromUsername, $toUsername, $time, 
                    '刮刮樂翻天', '我就要去刮刮樂,抽獎去!', 
                    'https://yourdomain.com/ggk/ggk.jpg', $url);
                echo $resultStr;
            } elseif (!empty($keyword)) {
                $msgType = "text";
                $contentStr = "請輸入:'抽獎' 參與活動";
                echo sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
            } else {
                $msgType = "text";
                $contentStr = "歡迎關注!回復『抽獎』參與刮刮卡活動";
                echo sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
            }
        }
    }
    
    private function checkSignature() {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        $tmpArr = array(TOKEN, $timestamp, $nonce);
        sort($tmpArr);
        return sha1(implode($tmpArr)) == $signature;
    }
}

進階:生產級抽獎系統架構

獎池管理(Redis + Lua 腳本保證原子性)

// Lua 腳本:原子檢查庫存並扣減
$luaScript = "
local stock = redis.call('GET', KEYS[1])
if stock and tonumber(stock) > 0 then
    return redis.call('DECR', KEYS[1])
else
    return -1
end
";

function drawPrize($prizePools) {
    // $prizePools = [['id'=>1, 'name'=>'iPhone', 'weight'=>10, 'stock_key'=>'prize:1'], ...]
    $totalWeight = array_sum(array_column($prizePools, 'weight'));
    $rand = mt_rand(1, $totalWeight);
    
    $accumulated = 0;
    foreach ($prizePools as $pool) {
        $accumulated += $pool['weight'];
        if ($rand <= $accumulated) {
            // 原子扣減
            $remaining = $redis->eval($luaScript, 1, $pool['stock_key']);
            if ($remaining >= 0) {
                return $pool;
            }
            // 庫存不足,標記並重新抽獎(遞迴或迴圈)
            break;
        }
    }
    return ['id' => 0, 'name' => '謝謝參與'];
}

防刷機制

  • 頻率限制:用戶 IP/UID 每日/每小時抽獎次數限制
  • 簽名驗證:前端請求攜帶簽名,後端驗證防偽造
  • 設備指紋:收集 Canvas 指紋、User-Agent 識別模擬器/群控
  • 風控平台:接入騰訊天御、阿里云風險識別

中獎記錄與發獎流程

// 中獎記錄表
CREATE TABLE `lottery_record` (
    `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `user_id` BIGINT UNSIGNED NOT NULL,
    `prize_id` INT UNSIGNED NOT NULL,
    `prize_name` VARCHAR(100) NOT NULL,
    `status` TINYINT DEFAULT 0 COMMENT '0待發獎 1已發獎 2用戶拒收',
    `express_no` VARCHAR(50) DEFAULT '',
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX `idx_user` (`user_id`),
    INDEX `idx_status` (`status`)
);

總結

刮刮卡核心在於 前端 wScratchPad 視覺互動 + 後端加權隨機算法 + 獎池原子扣減 + 微信圖文消息入口。生產環境必須補強:獎池庫存管理、防刷風控、中獎記錄審計、發獎流程閉環。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved