2019-05-04 13:59:23  7713 2

微信公众号开发用户表设计

 标签:   

微信开发中用户数据表设计思路

博主最近整理了下以前开发微信的资料,来聊下微信开发中最不可缺的一个环节就是设计用户表 user 这个表承载着大量微信开发的重要信息,比如openid

我们知道,用户首次关注公众号我们通过用户关注事件可以拿到token,通过token获取openId 在通过openid 获取用户基本信息 最后存入我们将要说到的

用户表中,很多开发者只知道网页授权的时候可以拿到用户信息,其实用户在关注公众号的时候我们就可以拿到用户openid 获取用户信息!

官方文档已经说的很清楚很多小伙伴都是不仔细看文档导致各种问题发生!


关注/取消关注事件

用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL。方便开发者给用户下发欢迎消息或者做帐号的解绑。为保护用户数据隐私,开发者收到用户取消关注事件时需要删除该用户的所有信息。

微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。

关于重试的消息排重,推荐使用FromUserName + CreateTime 排重。

假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。

推送XML数据包示例:

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[FromUser]]></FromUserName>
  <CreateTime>123456789</CreateTime>
  <MsgType><![CDATA[event]]></MsgType>
  <Event><![CDATA[subscribe]]></Event>
</xml>
CREATE TABLE 用户表(    
    id BIGINT NOT NULL AUTO_INCREMENT  COMMENT '用户id' ,    
    name VARCHAR(128) NOT NULL   COMMENT '用户名称' ,
    email VARCHAR(128) NOT NULL   COMMENT '用户邮箱' ,
    email_verified_at timestamp    COMMENT 'Email 地址通过验证的时间' ,    
    password VARCHAR(128) NOT NULL   COMMENT '用户密码' ,
    created_at timestamp    COMMENT '创建时间' ,
    updated_at timestamp    COMMENT '更新时间' ,
    openid VARCHAR(32) NOT NULL   COMMENT '微信用户唯一标示码' ,
    sex tinyint(1) NOT NULL   COMMENT '性别 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知' ,
    province VARCHAR(32)    COMMENT '省份 用户个人资料填写的省份' ,
    city VARCHAR(32)    COMMENT '城市 普通用户个人资料填写的城市' ,
    country VARCHAR(32)    COMMENT '国家 国家代码' ,
    headimgurl VARCHAR(255)    COMMENT '用户头像 最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,
    0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效' ,
    subscribe tinyint(1) NOT NULL  DEFAULT 0 COMMENT '是否关注公众号 0是未关注1是已关注' ,
    level_id INT   DEFAULT 0 COMMENT '会员等级id 用户等级id' ,
    deposit DECIMAL(32,8)   DEFAULT null COMMENT '累计充值金额 用户累计充值金额作为提升vip等级的' ,
    phone VARCHAR(32)   DEFAULT '' COMMENT '用户手机号 用户手机号' ,
    is_frz tinyint(1)   DEFAULT 0 COMMENT '是否解封 是否冻结默认0正常1冻结' ,
    PRIMARY KEY (id)
) COMMENT = 'users';/*SQL@Run*/