PHP微信红包红包效应

PHP微信红包红包效应
最近的项目需要在聊天,基础上加上红色的包的功能需求:模仿微信(无消息),但是只使用平衡送红包。这么多的微信红包,了解各种接口和业务需求,如显示信息,分类(个人、组、组数、拼运气)有限公司(100)、限制(200),到期时间(24小时),然后开始发展,以下提供了所有基本的报价之后,所有的应用程序的客户端接口,,我和。

1。设计数据表如下所示
创建表(` red_packet `
` ID ` int(10)符号的非空auto_increment,
` user_id ` int(10)符号的非空的默认'0'comment用户ID,
` for_id ` int(10)符号无效的默认'0'comment发行对象(用户或组ID),
` pay_status ` tinyint(1)符号的非空的默认'0'comment的付款情况:0付,1付,
`型` tinyint(1)符号的非空的默认'0'comment型:1, 2,3,普通组,组拼运气,
`介绍` varchar(255)不为空的默认' ' '引进来',
`数` tinyint(1)符号无效的默认'0'comment '数字',
` total_money `十进制(10,2)符号的非空的默认'0.0'comment总量,
` single_money `十进制(10,2)符号的非空的默认'0.0'comment(一个红组拼运气的量是0),
` return_money `十进制(10,2)符号不为空的默认'0.0'comment退款,
` is_cli_handle ` tinyint(1)符号的非空的默认'0'comment是否CLI退款处理:0没有,1是,
` expend_time ` MEDIUMINT(1)消费时间得到签名无效的默认'0'comment,
` add_time ` int(10)符号无效的默认'0'comment创作时间,
` pay_time ` int(10)符号无效的默认'0'comment支付时间,
主键(id),
关键` user_id `(` user_id `),
关键` pay_status `(` pay_status `),
关键` pay_time `(` pay_time `)
)= InnoDB引擎默认的字符集utf8评论=红包分布表;
创建表(` red_packet_log `
` ID ` int(10)符号的非空auto_increment,
` rp_id ` int(10)符号的非空的默认'0'comment红包ID,
` user_id ` int(10)符号的非空的默认'0'comment收到身份,
`钱`十进制(10,2)符号的非空'0.0'comment的索赔金额的违约,
` is_od ` tinyint(1)符号的非空的默认'0'comment '是最好的运气:0或1,
` add_time ` int(10)符号的非空的默认'0'comment添加时间,
` update_time ` int(10)时间的接收符号无效的默认'0'comment,
主键(id),
关键` rp_id `(` rp_id `)
发动机= InnoDB默认的字符集utf8评论=红包接收日志表;
两。送红包

因为付款成功后,立即派人到红的聊天界面,所以红包钱,信息的信封到red_packet表(支付未付),并将大量的计算,一方面打乱插入red_packet_log表后(接收和接收时间是空的),对付款成功后确认更新red_packet表状态的付款,然后发红包。

三,引导红包(此处只对分组的红包进行分析)
所有红包的先决条件都要核对一下,请填写你自己的脑子。这里是抢红包一组并发问题(人数红包的战斗,和MQ几十)来解决。送红包时,先写红包数量,MQ,如3红包,然后写1, 2, 3。抓住从MQ数字值红色的信封,你是几个抢红包第一,相应的red_packet_log表几个红色,其次是更新red_packet_log表接收和接收时间和平衡加钱并保持运行的业务流程,然后返回接收的结果;没有数字的课程,没有抢到的红包,直接慢镜头接口。早期考虑写MQ的red_packet_log表的主键,可以节省一种先取几条日志记录,但这会使消费这个字段时间更新比较麻烦;使用MQ数字存储,可以直接比较最后的红色(数字和红包的数量),然后更新消费时间。

接收结果微信红页(即有很多运气查看页面):个人和小组的结果是不一样的,红色的信封和领红包的人看到的是不一样的,在单一的一组红色过期提示是不一样的,在这里不一一列举,是基于数据库搜索的基本界面。

四。需求变化,新的第三方支付

当涉及到第三方支付,提到的是同步和异步回调,回调时间和差。APP终端将发送红包的同步回调是成功时。应用程序付款同步回调直接称为回调。如果异步回调慢了一两秒,用户将以0的支付状态抓住红包,如果应用程序端调用长连接接口来检查异步回调是否成功,然后发送红色包,用户体验就很差。
#中间状态的介绍
修改表` red_packet `
修改列` pay_status ` tinyint(1)符号的非空默认0评论的付款状态:0支付,支付1、2等账户后,` for_id `,
添加列` pay_type ` tinyint(1)不为空的默认0评论支付:0未知1,支付宝2,微信3,银联在` pay_status `,
添加列` trade_no ` varchar(30)不为空的默认的评论第三方支付交易号后,` pay_type `;
修改表` red_packet_log `
添加列` is_into_account ` tinyint(1)符号的非空默认0评论是否帐户:0没有,1是在` is_od `;
当用户抢红包,is_into_account的值是根据pay_status确定。

当同步回调应用程序方面,调用接口的变化pay_status付款状态2;

当异步回调到服务器,付款状态pay_status改到1,对is_into_account = 1 red_packet_log记录处理。

但以上三个步骤查询red_packet更新,否则会有执行时间和顺序的问题,导致一些red_packet_log记录不记入is_into_account = 0;同时允许用户抢红包的锁机制会变得很慢,由于锁的释放。
改进如下:(整个课程不更新)

当用户抢红包,is_into_account的值是根据pay_status确定。

当同步回调应用程序方面,调用接口的变化pay_status付款状态2;

当异步回调到服务器,付款状态pay_status改到1,和红色的包ID(red_packet主键)放在MQ;

背景自动脚本,从MQ得到红包ID后,过程的红包is_into_account = 0的记录,然后延迟5秒重新写红色的包ID的MQ,并执行两处理以保证数据全部记入账户。

五。红包退款

这是一个自动脚本,根据该red_packet表pay_time确定是否超过24小时,没有拿到钱,返回用户平衡。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部