八、PHP+AJAX实现发红包功能

        PHP发红包基本流程:当输入完红包数量和总金额后,PHP会根据这两个值进行随机分配每一个金额,保证每一个人都能领取到一个红包,且每一个红包金额不等。也就是每一个人领取的红包金额要不一样,而且全部红包金额总额等于总金额。php

php发红包实现原理:

        设定总金额为10元,有N我的随机领取:html

        N=1 第一个ajax

        则红包金额=X元;json

        N=2 第二个安全

        为保证第二个红包能够正常发出,第一个红包金额=0.01至9.99之间的某个随机数url

        第二个红包=10-第一个红包金额;spa

        N=3 第三个code

        红包1=0.01至9.99之间的某个随机数htm

        红包2=0.01至(10-红包1-0.01)的某个随机数ip

        红包3=10-红包1-红包2

        ……

        因而咱们获得一个规律,在分配当前红包金额时,先预留剩余红白所需最少金额,而后在0.01至总金额-预留金额间取随机数,获得的随机数就是当前红包分配的金额。

        实际应用中,程序先将红包金额分配好,即发红包时,红包个数以及每一个红包的金额都分配好了,那么用户来抢红包时,咱们随机给用户返回一个红包便可。

jQuery关键代码:

  <script>
            $(function() {
                $("button").click(function() {
                    $.ajax({
                        type: 'POST',
                        url: 'bao.php',
                        dataType: 'json',
                        beforeSend: function() {
                            $("#result").html('正在分配红包');
                        },
                        success: function(json) {
                            if (json.msg == 1) {
                                var str = '';
                                var res = json.res;
                                $.each(res, function(index, array) {
                                    str += '<p>第<span>' + array['i'] + '</span>个红包,金额<span>' + array['money'] + '</span>元,余额<span>' + array['total'] + '元</span></p>';
                                });
                                $("#result").html(str);
                            } else {
                                $("#result").html('数据出错!');
                            }
                        }
                    });
                });
            });
        </script>

bao.php关键代码

<?php

header("Content-Type: text/html;charset=utf-8");

$total = 20; //红包总额  
$num = 10; // 分红10个红包,支持10人随机领取 
$min = 0.01; //每一个人最少能收到0.01元  


for ($i = 1; $i < $num; $i++) {
    $safe_total = ($total - ($num - $i) * $min) / ($num - $i); //随机安全上限  
    $money = mt_rand($min * 100, $safe_total * 100) / 100;
    $total = $total - $money;
    $arr['res'][$i] = array(
        'i' => $i,
        'money' => $money,
        'total' => $total
    );
}
$arr['res'][$num] = array('i' => $num, 'money' => $total, 'total' => 0);
$arr['msg'] = 1;
echo json_encode($arr);
?>
相关文章
相关标签/搜索