精华内容
下载资源
问答
  • C#实现微信红包功能

    2020-08-30 06:33:58
    主要介绍了C#实现微信红包功能,使用正态分布计算红包金额,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Java实现抢红包功能

    2020-08-27 04:57:58
    主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • js仿微信抢红包功能

    2020-10-19 04:08:10
    主要为大家详细介绍了js仿微信抢红包功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了php实现微信发红包功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • PHP实现随机发红包|抢红包功能

    千次阅读 2019-06-11 16:20:38
    自从红包功能火起来之后很多APP都开始添加上此功能以顺应“潮流”。技术流人员都开始研究各种红包算法,别看一个简单的红包功能看起来(说起来)简单,但是实现起来真不简单。首先我们不光要考虑到生成各个红包金额值...

    综述

    自从红包功能火起来之后很多APP都开始添加上此功能以顺应“潮流”。技术流人员都开始研究各种红包算法,别看一个简单的红包功能看起来(说起来)简单,但是实现起来真不简单。首先我们不光要考虑到生成各个红包金额值的合理性(所有红包值不能大于总数),还要考虑各个类型的抢红包模式(例如:拼手气红包、指定金额红包等),最重要的还要考虑大数据下的并发情况(不能抢超了,例如发了5个红包抢走了7个)。下面博主就设计了方案来这些问题。

    拼手气红包

    拼手气红包主要还是随机去生成若干个红包值,博主写了一个方法用于生成若干个随机的红包值。代码如下:

    <?php
    /**
     * =======================================
     * Created by ZHIHUA·WEI.
     * Author: ZHIHUA·WEI
     * Date: 2019/06/11
     * Time: 12:13
     * Power: 拼手气红包生成算法
     * =======================================
     */
    
    /**
     * 拼手气红包生成算法
     * @param $red_total_money
     * @param $red_num
     * @return array
     */
    function redEnvelopeRandomProduce($red_total_money, $red_num)
    {
        //1 声明定义最小红包值
        $red_min = 0.01;
    
        //2 声明定义生成红包结果
        $result_red = array();
    
        //3 惊喜红包计算
        for ($i = 1; $i < $red_num; $i++) {
            //3.1 计算安全上限 | 保证每个人都可以分到最小值
            $safe_total = ($red_total_money - ($red_num - $i) * $red_min) / ($red_num - $i);
            //3.2 随机取出一个数值
            $red_money_tmp = mt_rand($red_min * 100, $safe_total * 100) / 100;
            //3.3 将金额从红包总金额减去
            $red_total_money -= $red_money_tmp;
            $result_red[] = array(
                'red_code' => $i,
                'red_title' => '红包' . $i,
                'red_money' => $red_money_tmp,
            );
        }
    
        //4 最后一个红包
        $result_red[] = array(
            'red_code' => $red_num,
            'red_title' => '红包' . $red_num,
            'red_money' => $red_total_money,
        );
    
        return $result_red;
    }
    
    
    $red_total_money = 10;//红包总额
    $red_num = 10;// 分成10个红包
    print_r(redEnvelopeRandomProduce($red_total_money, $red_num));
    exit;

    指定金额红包

    关于指定金额红包的这里就不写代码进行描述了,主要输入每个红包多少钱,一共多少个红包即可。

    抢超情况

    这个和秒杀商品处理有点相同,我们可以借助redis的队列进行处理,新建一个队列先进队的可以抢到红包,后进队的抢不到红包;具体思路如下:

    1. 根据所发红包数量,创建redis红包队列;
    2. 客户端访问抢红包API ;
    3. web服务器先从redis红包队列 中查询剩余数量;
    4. redis队列中有剩余,则在mysql中创建抢购成功,去除红包数量,抢红包成功 ;
    5. redis队列中没有剩余,则提示已抢完,抢红包失败。
    展开全文
  • 主要为大家详细介绍了C语言实现随机抢红包功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要介绍了Laravel框架实现抢红包功能,结合具体实例形式分析了Laravel框架实现抢红包的相关原理、步骤、功能实现技巧与操作注意事项,需要的朋友可以参考下
  • 使用基本的Java代码实现微信红包功能,使用Swing构建客户端界面。
  • WSRedPacketView是模仿微信抢红包的功能,模仿微信枪红包功能的动画效果,可动态配置金额,用户头像,文字内容等信息,传入后可通过block回调返回。
  • 主要介绍了PHP开发的微信现金红包功能,结合实例形式较为详细的分析了php使用微信接口实现现金红包功能的相关步骤与操作技巧,需要的朋友可以参考下
  • 主要介绍了java多线程模拟抢红包功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了微信小程序实现发红包功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 微信红包功能

    2018-09-13 14:33:37
    最近做的一个功能,小程序用户答题,发送红包功能。没错一开始想使用现金红包功能~ 小程序用的是小程序的appid拿到openid,支付用的是公众平台的openid,就掉进了这个坑,要么appid无效,要么appid与openid不符,...

    最近做的一个功能,小程序用户答题,发送红包功能。没错一开始想使用现金红包功能~

    clipboard.png

    小程序用的是小程序的appid拿到openid,支付用的是公众平台的openid,就掉进了这个坑,要么appid无效,要么appid与openid不符,所以就改用了企业付款。

    微信官方文档地址:https://pay.weixin.qq.com/wik...

    我一贯的风格,话不多说,直接上代码

    clipboard.png

    此时xml_tree返回的就是已经被转好的对象,可以进行后续逻辑判断了。

    只要成功的话钱就会直接打到用户的零钱里啦并且有微信助手提示。

    记得下载证书哦,php还是只用这两个。

    欢迎点评和指教,这是我前进的动力

    展开全文
  • 本文通过实例代码给大家介绍了基于JavaScript实现微信抢红包功能,金额随机,额度在0.01和(剩余平均值*2)之间,具体的实例代码大家参考下本
  • 主要为大家详细介绍了AccessibilityService实现微信发红包功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了php实现微信公众平台发红包功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • MCCatchRedPacket 高仿UC捉红包功能
  • java实现抢红包功能

    千次阅读 2019-09-18 16:05:08
    java实现抢红包功能 最近项目中,实现了抢红包的功能,觉得挺有意思,这边根据自己的实战经验做个总结,抢红包主要面临两个问题,一个是红包的分配算法,一个是抢红包的并发问题。 红包并发问题 并发就会考虑用锁,...

    java实现抢红包功能

    最近项目中,实现了抢红包的功能,觉得挺有意思,这边根据自己的实战经验做个总结,抢红包主要面临两个问题,一个是红包的分配算法,一个是抢红包的并发问题。

    红包并发问题

    并发就会考虑用锁,面对集群项目,得采用分布式锁,比如是用redis锁,在抢的时候做处理,保证抢红包的原子性,另一种方式也就是我目前所用的方式,预算红包金额,并放入队列,也就是提前先把红包存入队列,在用户抢红包的时候从队列里吐出来,这种方式很好的避开了抢红包是的并发问题,也方便下面说的红包算法的计算。
    我这里使用redis作为队列,ListOperations.leftPush(),ListOperations.rightPop(),但有个小问题,就是队列没有失效时间,所以如果不取出的话,会一直存在队列里。

    红包分配算法

    红包算法得满足:
    1.每个小红包加起来等于总金额
    2.小红包的金额满足正态分布,两端的值比较少,中间值比较多
    3.每个人的平分这个大红包的概率是相等的
    这里我是用的是***线段切割法***,不BB,直接上代码

      public static void distributeRedPacket(BigDecimal totalAmount, int num) {
            int amount = totalAmount.multiply(new BigDecimal("100")).intValue();
            Set<Integer> points = new TreeSet<>();
            Random random = new Random();
            while (points.size() < num - 1) {
                points.add(random.nextInt(amount - 1) + 1);
            }
            points.add(amount);
            int before = 0;
            for (int point : points) {
                System.out.println((double) (point - before) / 100);
                before = point;
            }
        }
    
        public static void main(String[] args) {
            distributeRedPacket(new BigDecimal(12),5);
        }
    
    // 运行结果
      0.45
      4.9
      2.76
      3.72
      0.17
    

    先把金钱统一乘100转成分来做,然后把总金额切割成n-1块,概率都是1/总金额,如果出现重复的点,则跳过,继续切割,最后金额顺序排序,两两相减,就好像切肉一样,分成一块一块的,下刀点就是切割点,切出的肉块,就是我们的小红包(说的我都流口水了?)。这样小红包总和肯定也等于总金额。

    红包分配算法进阶

    突然产品提出他想实现新用户获取大值面额的概率更高时,这时候就要想点法子了。我们现在已经是事先预分配好了红包面值,那么就不能再新用户抢红包时,再去算出高面值的红包了。这时候就要利用排序加权分配法(我自己起的。。)。
    首先在预分配时对红包大小进行从小到大的排序,再根据产品需要的比例,比如新用户百分之80获得大概率的红包,这时候如果是新用户则先匹配概率,如果在百分之80之内,那么就从队尾pop,如果是老用户或者没有匹配到百分之80内,那么就从队头pop,但用户们抢红包的顺序,决定了红包大小的顺序,第一个新用户抢的可能就是最大的,因为之前红包是按照大小排序的,那么可以对红包的排序稍微做些修改,先取出红包的中数,再把大的放在右边,无序,小的放在左边,也是无序,这样就可以解决上面的问题了。
    这些就是我在项目中遇到的问题,如果有不足,还望指出,如果有各种奇葩的分配红包需求,也可以一起讨论,一起进步。

    展开全文
  • 快到新年了,微信红包越来越多,那么基于程序是怎么实现的呢?今天小编给大家分享Android微信抢红包功能的实现原理浅析,一起看看吧
  • 那么如果自己也想实现以下抢红包功能,需要说明的是,本文所描述的红包功能更多的关注与随机红包的生成,至于高并发、数据一致性等问题,本文暂未涉及,以下是本文所讨论的两个技术点: 不同的消费金额获取的红包...
  • 主要介绍了java写的伪微信红包功能示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • .net代码实现微信发红包功能,已测试发送成功
  • 主要为大家详细介绍了微信小程序实现红包功能,以及后端PHP实现逻辑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 最近在工作中,新接了一个红包功能的需求,这对于我来说,是非常感兴趣的,但是又有点害怕,害怕自己做不好,也没有了解过抢红包功能的实现,最后只能靠着百度,查询到了几篇非常好的文章,感谢大神的无私奉献,对我...

    前言

    最近在工作中,新接了一个红包功能的需求,这对于我来说,是非常感兴趣的,但是又有点害怕,害怕自己做不好,也没有了解过抢红包功能的实现,最后只能靠着百度,查询到了几篇非常好的文章,感谢大神的无私奉献,对我来说简直就是雪中送炭.

    https://www.zybuluo.com/yulin718/note/93148

    https://juejin.cn/post/6925947709517987848

    需求

    我这边的业务是在直播房间类发送金币红包,首先金币是没有小数点的,所以不用考虑小数点的问题,一般就是最小就发 10金币。红包类型分为 房间红包和全服红包,区别在于,房间红包只能在这个房间的人能抢,而全服红包就是所有人都能抢,红包又分为 普通红包和随机红包,普通红包就简单了,没人平均去分,随机红包就要用到微信的红包算法了 额度在0.01和剩余平均值*2之间

    流程图

    在这里插入图片描述

    红包功能分为两种实现,一种就是预分配 红包,一种就是纯内存计算,其实这种实现都可以,在看了微信红包的架构中写到 微信金额是拆的时候实时算出来,不是预先分配的,采用的是纯内存计算,不需要预算空间存储 ,这也就表示 微信红包是纯内存计算出来的,这种情况对于机器的预算是非常吃紧的,一般来说小的公司可以忽略这些,比较流量也不大,直接就用纯内存计算就可以,预分配 : 在开奖之前就已经知道那些人能抢到红包了,或者说有抢到红包的资格,比如: 我们在看一些直播的时候,有一些抢红包操作,但是通常都会说,先买一件商品才能抢,又或者,直播发红包,要先点关注才能抢到红包,这就是预分配法,这种好处就是,能抵挡一波流量。

    Redis实现

    实现以上功能最简单的就是 使用 redis中的 list 结构来做了,先进行红包拆分,然后写入到 redis中,没一个人来抢的时候就pop出去,一直到没有就表示该红包被抢光了,这里建议大家看看,我发的链接上面有多红包各种实现的分析,非常好,并且也说了这种方式的弊端:抢红包时一旦从队列弹出,此时系统崩溃,恢复后此队列中的红包明细信息已丢失,需要人工补偿。 确实这就是这种实现方式最大的问题,不过,小公司也不用考虑这些,大不了就做redis的高可用。

    代码实现

    发红包,红包拆分

        /**
         * redis list 结构实现 lpush 发红包:
         * @param type 0普通红包 1.随机红包
         * @param number 红包个数
         * @param amount 红包金额
         */
        @PostMapping("/redWars")
        public void redWars(Integer type,Integer number, Integer amount){
            ArrayList<Integer> arrayList = new ArrayList<>();
            //总金额: 发送红包的总金币数
            Integer money = number * amount;
            //普通红包拆分
            if(type == 0){
                arrayList = commonRed(money, number);
                //随机红包拆分
            }else if(type == 1){
                /**
                 * 由于我们金币是不需要小数的,我们值需要整数,所以下面代码被我改了
                 * 如果是金额的红包 请 参考 RoomTest
                 */
                arrayList = commonRoomRed(BigDecimal.valueOf(money),number);
            }
            //类型转换:
            List<String> collect = arrayList.stream().map(i -> String.valueOf(i)).collect(Collectors.toList());
            //红包key 过期时间 拆分的数据: 这就是抢红包的金额:
            redisService.lpush("1002",30, TimeUnit.HOURS,collect);
        }
    
    

    抢红包:

        /**
         *  list 数据接口给 lpop: 抢红包
         * @param key 红包key
         */
        @RequestMapping("/setLpop")
        public void setLpop(String key){
            String lpop = redisService.lpop(key);
            if(!StringUtils.hasLength(lpop)){
                System.out.println("当前红包已抢光!");
            }else{
                System.out.println("恭喜你抢到红包--->"+lpop);
            }
        }
    
    

    完整代码: spring-boot-redis-integrat

    实例代码在github上面需要的请自行拉取:spring-boot-integrate 然后后续会集成更多的模块进去,需要请点个star。后续会集成更多的接口实现,有需要的请保存。
    如果这篇文章,有帮助到大家的,请给作者一个一键三连,谢谢

    展开全文
  • 利用qq xml技术实现qq好友群发,最近qq群很火的就是利用qq群发送红包,自动领取支富宝红包功能,个人也是实践操作了一把,效果自然而然了,全套技术我这都有,可以让你快速入手。不光能自动领取红包还能实现点击自动...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,812
精华内容 9,524
关键字:

红包功能