粉丝用户也称为普通用户,可以是从公众号里自动获取,也可以是从小程序里自动获取,更可以是用户自己注册的。 #粉丝登录 默认情况下粉丝是需要登录的,如果涉及到未登录的业务,可以Controller类使用构造函数 ~~~ function __construct() { $this->need_login = false; //不需要登录,系统默认是true $this->need_appinfo = false; //不需要公众号信息,系统默认是true parent::__construct (); //一定要调用父级 } ~~~ 来告诉系统当前类或方法不需要登录检测 ## 粉丝用户登录流程图 ![](https://box.kancloud.cn/0b50e0452734c1fd5890683434931fa2_1181x832.png) 因为微信网页授权获取用户信息只有认证服务号有权限,因此在H5里,只有认证的服务号才能完成自动注册,自动登录的功能,其它类型的用户只能通过普通访问的方式实现用户登录。 但是一般在微信中,很多情况是不需要用户自己注册登录的,但一些互动功能往往需要区分开用户与其它用户之间的信息。比如在一个订阅号里做一个简单投票功能,不大可能需要用户先注册后登录才能投票。也就是说其实就算是不需要登录,系统也需要有区分游客操作的能力。那么如何区分呢? WeiPHP引入了负uid的概念,即用户UID大于0的,肯定是登录过的用户,而没有登录的游客,系统也会分配一个小于0的UID,这样通过不同的负uid就可以区分不同的游客。 而负uid的分配方法是: > 待补充内容 ## 一些旁门左道 除了负uid的方案,可以结合微信公众号的特点来实现部分用户的初始化: 获取openid: 所有的公众号有微信公众号接收消息的 权限,而接收的信息里带有openid信息,因此可以让用户回复关键词或者点击菜单,然后系统回复一条图文信息给用户,这条图文信息的跳转地址里带上openid就可以,这样用户点击图文进入H5页面时,系统就可以通过URL里带的openid来识别用户。 获取用户信息: 因为认证订阅号有获取用户基本信息的权限,因此认证订阅号可以在用户关注时为用户自动注册信息,再结合上面获取openid的方法,也能部分实现类似认证服务号自动注册,自动登录的功能。为什么说是部分?因为一个微信的页面,除了正常从微信公众号进入外,还可以分享到朋友圈等多个地方,别人直接通过分享出来的URL进入,这部分用户是无法获取到openid和用户信息的。 # 小程序粉丝 > 待补充内容 # 粉丝标签 刚开始时微信公众号的粉丝是通过粉丝分组来实现粉丝区分的,现在已经修改为粉丝标签来实现了,而且一个粉丝可以同时最多设置3个标签 如果是认证的公众号,就有设置粉丝标签的接口权限,这时WeiPHP系统里的标签会自动与微信公众号平台的标签进行同步,也就是说当用户在WeiPHP系统里对粉丝标签进行增加,修改,删除操作甚至给粉丝打标签时,会自动同步到公众号平台。 如果公众号没有标签的接口权限,那么运营人员在WeiPHP系统里设置的标签只能在系统内使用,无法同步到公众号平台 # 粉丝昵称和备注名 由于微信用户的昵称可能有一些特殊字符,这些特殊字符会导致保存数据库出错,因此WeiPHP对昵称保存时做了json_encode处理,使用getUserInfo函数获取用户信息时,昵称也会作json_decode处理。 公众号运营人员可以给粉丝设置备注名,备注名的信息会保存在wp_public_follow的remark字段。如果粉丝设置了备注名,粉丝的昵称就显示备注名,前端只需要统一使用nickname这个变量显示昵称就行,具体显示备注名还是原来的昵称由系统自动来判断 使用方法如: ~~~ $user = getUserInfo($uid); echo $user['nickname']; ~~~ >[info] 由于getUserInfo统一对用户各种数据做了预处理,并且做了缓存处理,因此强烈开发者在获取用户信息时,直接通过getUserInfo来获取就行,不建议直接从数据库获取用户信息 getUserInfo 返回的数据有: > 这里的参数表格,待补充 # 同步用户信息 > 待补充内容 ## 定时自动同步 > 待补充内容 ## 手工刷新同步 > 待补充内容 # UnionID 如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。 如果用户信息里带有unionid,这个内容会和openid一样保存在wp_public_follow表里。同时用户信息主表wp_user会通过unionid来实现去重功能,从而实现同一个用户,在多个公众号下共用一个用户UID,满足积分,奖品等用户业务数据的一致性,详细实现请见粉丝关注的注册流程 # 绑定手机号 对于自动注册的用户,是缺少手机号这一项信息的。系统默认也是不需要绑定手机号,但如果公众号要统一开启绑定手机号的限制,公众号运营人员可以在用户模块中开启绑定手机号的开关,一旦开启后,所有未绑定的手机号的用户在进入H5页面时都会先要求绑定手机号后才能继续往下操作。 >这里应该有开启的操作截图 如果不想在全部页面都加上绑定手机号的限制,只想在某些特定的业务流程里才要求绑定手机号,运营人员只需要把绑定手机号的开关设置为关闭,然后开发者可以在需要的地方使用以下函数作限制。 ~~~ need_mobile(); ~~~ 这个函数会自动判断当前用户是否已经绑定过手机号,如果没有绑定会自动跳转到绑定手机界面,绑定后也会自动跳转回来继续之前的操作 # 初始化用户信息 无法是普通注册用户还是自动注册用户,带有的用户资料很有限,如果这些用户资料不能满足业务的需要,就需要通过扩展用户资料来实现更多的用户信息收集,对于粉丝来说就是还需要一步初始化用户信息的步骤。 首先是超级管理员可以在后台统一增加用户扩展字段信息 >这里的扩展字段管理列表截图 然后运营人员在各个公众号的用户模块的扩展字段里设置开启或者关闭初始化用户信息的开关,如果超级管理员有设置了扩展字段时,开关默认是开启的,否则默认是关闭的 >这里应该有开关界面的截图 用户模块里显示超级管理员预先配置好的扩展字段列表,运营人员可以勾选哪些字段用于这个公众号(默认全部勾选) 如果超级管理员设置的字段不满足这个公众号的扩展需求,运营人员也可以单独为公众号自行设置扩展字段 >这里的扩展字段管理列表截图 粉丝进入公众号后,系统会自动判断是否已经初始化,如果没有初始化时系统会要求先初始化信息才能继续往下操作。 类似绑定手机号,如果不想在全部页面都要求用户初始化信息,只想在某些特定的业务流程里才要求,运营人员只需要把初始化的开关设置为关闭,然后开发者可以在需要的地方使用以下函数作限制。 ~~~ need_init_user(); ~~~ 这个函数会自动判断当前用户是否已经初始化过,如果没有会自动跳转到初始化界面,完成后也会自动跳转回来继续之前的操作 # 审核认证 有些业务需要对全部粉丝审核后才能使用,这时需要一个审核功能,而有些业务只需要对一部分粉丝审核才能使用更多服务,这时需要一个认证功能。也就是说审核是针对所有粉丝用户,认证只是针对部分粉丝用户。 一般情况下,审核或者认证是结合上面的初始化用户信息功能来一起实现的。比如有公众号需要用户初始化员工号,姓名,然后运营人员审核通过后才能继续使用。又比如有公众号里的粉丝可以申请升级为代理商,需要粉丝先初始化身份证,姓名,电话,银行卡等信息,运营人员认证通过后就才可以升级成为代理商。 >[info] 考虑大部分使用场景和保持功能简洁些,审核和认证只能二选一,不支持同时开启 ## 审核开启 要开启审核功能,需要在运营人员用户模块的审核功能把开关打开(默认是关闭的)即可 >这里应该有截图 开启审核后,在粉丝管理列表中就会多出一个审核的按钮,信息中也会多出一个审核状态,在搜索栏里也可以按审核状态过滤粉丝 >这里应该有截图 ## 认证开启 要开启认证功能,需要在运营人员用户模块的认证功能把开关打开(默认是关闭的)即可 >这里应该有截图 要使用认证功能,需要开发者在需要认证才能使用的业务里加上以下限制就可以 ~~~ need_audit() ~~~ 这个函数会自动判断当前用户是否已经认证过,如果没有会自动跳转到初始化界面,如果已初始化,只是还没认证通过,会显示正在认证中,或者认证被驳回,也会显示驳回原因 开启认证后,在粉丝管理列表中就会多出一个认证的按钮,信息中也会多出一个认证状态,在搜索栏里也可以按认证状态过滤粉丝 >这里应该有截图 # 粉丝关注/取消关注 粉丝关注或者取消关注时,微信都会向WeiPHP系统发送一条通知信息,因此我们可以在收到这信息时进行相关的数据处理。 粉丝在关注与取消关注公众号时,微信会把这个事件推送到WeiPHP。方便我们给粉丝下发欢迎消息或者做帐号的解绑。 微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。 关于重试的消息排重,推荐使用FromUserName + CreateTime 排重。 假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。 推送XML数据包示例: ~~~ <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[subscribe]]></Event> </xml> ~~~ 参数说明: ToUserName 开发者微信号 FromUserName 发送方帐号(一个OpenID) CreateTime 消息创建时间 (整型) MsgType 消息类型,event Event 事件类型,subscribe(订阅)、unsubscribe(取消订阅) ## 粉丝关注 当粉丝关注公众号时,系统需要作出以下处理 ![](https://box.kancloud.cn/32530dcd6ab6ea117d6ee134f2559be3_1012x835.png) ## 取消关注 由于WeiPHP系统与粉丝相关的业务数据有很多,因此粉丝取消关注后,系统并非物理删除粉丝数据,只是把粉丝的状态由关注设置为未关注状态而已,这个状态保存在 public_follow 表中的has_subscribe ![](https://box.kancloud.cn/44320cf89046eebd7e48d98d1dd43acc_552x536.png) 实现的代码在:(这里应该有代码文件的路径) ~~~ 这里应该有代码 ~~~