搜索

微信红包怎么设计

发布网友 发布时间:2022-03-02 09:34

我来回答

1个回答

热心网友 时间:2022-03-02 11:03

    设计合理的红包流程,如下图所示,展示了用户侧的相关操作,此次活动用户最多只有一次获奖机会,另一方面,服务器开启定时轮询服务,用于发放红包.

    请点击输入图片描述

    设计数据库表结构设计及红包队列机制

    repacket 表是红包基础信息表,用户摇红包时,会在该表中创建一条记录,此时stat状态是0。另一方面,服务器上有轮询程序,5秒轮询一次,每次从表redpacket 中取出stat=0的10条记录,进行红包发放操作,每发放成功一个,对于的stat设置为1。为了确保红包送到,我们设计了ntrytimes 字段,每次发送如果未成功,则 该字段增1,值到该字段数值高于某值,一般为5wxlog 表用来记录红包发放反馈细节,用于红包发放会碰到很多突发问题,该表记录每次发放的细节,有利于提高我们的服务质量

    请点击输入图片描述

    如何防止被微信支付拒绝

    微信红包被拒有很多情况,如下是其中最常见的三种,

    3.3.1 发放失败,此请求可能存在风险,已被微信拦截 该情况一般是因为用户帐号存在异常,比如微信监控机制发现用户利用红包在*,则会屏蔽。此类问题没有解决方法。

    <xml>

    <return_code><![CDATA[SUCCESS]]></return_code>

    <return_msg><![CDATA[发放失败,此请求可能存在风险,已被微信拦截]]></return_msg>

    <result_code><![CDATA[FAIL]]></result_code>

    <err_code><![CDATA[NO_AUTH]]></err_code>

    <err_code_des><![CDATA[发放失败,此请求可能存在风险,已被微信拦截]]></err_code_des>

    <mch_billno><![CDATA[re20160318191917528]]></mch_billno>

    <mch_id>12377502</mch_id>

    <wxappid><![CDATA[公众号APPID]]></wxappid>

    <re_openid><![CDATA[okoQctzL9-fRrRlr-gIj4cEazNFM]]></re_openid>

    <total_amount>100</total_amount>

    </xml>

    3.3.2 超过频率*,请稍后再试,公众帐号对某一个用户发放红包频次不能太多,否则会出现这种情况。另外系统发放红包对微信API请求不能过于频繁。此类问题解决方法就是控制用户红包数目,并且控制API请求频率

    <xml>

    <return_code><![CDATA[SUCCESS]]></return_code>

    <return_msg><![CDATA[超过频率*,请稍后再试]]></return_msg>

    <result_code><![CDATA[FAIL]]></result_code>

    <err_code><![CDATA[FREQ_LIMIT]]></err_code>

    <err_code_des><![CDATA[超过频率*,请稍后再试]]></err_code_des>

    <mch_billno><![CDATA[re2016032110454813571]]></mch_billno>

    <mch_id>12377502</mch_id>

    <wxappid><![CDATA[公众号APPID]]></wxappid>

    <re_openid><![CDATA[okoQctyDbaPvyPKSXq9QberLnPUM]]></re_openid>

    <total_amount>200</total_amount>

    </xml>

    3.2 帐号余额不足,请到商户平台充值后再重试. 一种可能是真没钱了,另外一种可能是并发太大,微信会返回此种情况,解决方案是将请求变成顺序的。后面章节会单独说明

    <xml>

    <return_code><![CDATA[SUCCESS]]></return_code>

    <return_msg><![CDATA[帐号余额不足,请到商户平台充值后再重试]]></return_msg>

    <result_code><![CDATA[FAIL]]></result_code>

    <err_code><![CDATA[NOTENOUGH]]></err_code>

    <err_code_des><![CDATA[帐号余额不足,请到商户平台充值后再重试]]></err_code_des>

    <mch_billno><![CDATA[re2016032110460657709]]></mch_billno>

    <mch_id>12377502</mch_id>

    <wxappid><![CDATA[公众号APPID]]></wxappid>

    <re_openid><![CDATA[okoQct14A0OYz_bx0Spe0P-6HNTw]]></re_openid>

    <total_amount>100</total_amount>

    </xml>

    3.3 如果发放成功,则返回如下信息

    <xml>

    <return_code><![CDATA[SUCCESS]]></return_code>

    <return_msg><![CDATA[发放成功]]></return_msg>

    <result_code><![CDATA[SUCCESS]]></result_code>

    <mch_billno><![CDATA[re2016032417512098479]]></mch_billno>

    <mch_id>12377502</mch_id>

    <wxappid><![CDATA[公众号APPID]]></wxappid>

    <re_openid><![CDATA[okoQct7fPhd1JqtDz0LqTUxf1kNU]]></re_openid>

    <total_amount>200</total_amount>

    <send_listid><![CDATA[00101733201603240631676524]]></send_listid>

    <send_time><![CDATA[20160324175121]]></send_time>

    </xml>

    3.3.4 其他错误码说明请参考微信官方给出的错误提示及解决方案

    设计红包发放定时器

    我们之所以要启用定时器操作,是为了保证我们能及时地响应红包发放操作。同时也为了保证任意时间我们向微信支付平台调用支付请求最多只有一个http请求。在win系统下,我们需要添加定时任务,如下俩张图展示了windows下定时器配置

    在创建定时任务的时候,我们最好先创建一个bat(hongbao.bat)文件,内容如下

    C:\phpStudy\php53\php.exe C:\WWW\task.php Index/hongbao

    task.php 是一个php文件,  Index/hongbao 是Index模块下的 hongbao发放方法

    该示例采用THINKPHP框架,CGI模式

    linux下定时器使用crontab,考虑到时间*,我们一般一次拉取10个红包,并10秒循环一次

    crontab  -e 编辑crontab服务文件

    */2 * * * * /bin/sh /home/admin/jiaoben/hongbao.sh 

    保存文件并并退出

    关于crontab相应的资料很多,可以自行百度。

    hongbao.sh  里的内容是thinkphp cgi模式的php 接口

    php /var/WWW/task.php Index/hongbao

    请点击输入图片描述

    请点击输入图片描述

    请点击输入图片描述

    h5实现摇动代码解析

    请点击输入图片描述

    请点击输入图片描述

    请点击输入图片描述

    如何获得流畅自然的的声音

    该应用有俩个音乐,一个是摇中的音乐,一个是摇动中的,何时播放,如何流畅地播放,这是个大问题,本章节采用如下js 很好地解觉了该问题

    请点击输入图片描述

    php实现红包发放核心函数,以thinkphp为例

    请点击输入图片描述

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
Top