如何开发一套微信助力应用(Laravel框架通用)

Posted PHP训练营

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何开发一套微信助力应用(Laravel框架通用)相关的知识,希望对你有一定的参考价值。

开始之前,回答一个问题:


范冰冰
你玩过微信上面经常出现过的砍价、助力、众酬等游戏么?
女神,我玩过***
如何开发一套微信助力应用(Laravel框架通用)
王宝强
根据你的答案,选择以下的处理方式:
Q
A
&
1、玩过:继续看我们的文章。
2、没有玩过,滚粗!
理由:
  作为一个合格的程序员,没有对互联网新玩法的孜孜不倦的追求和必要的好奇心,不是一个合格的程序员;
  作为一个朋友,不帮忙点赞、砍价,不是好朋友。

  花开两朵各表一枝,我们姑且不去看那些滚粗的背影,我们还是集中精力关注我们要做的事情。
关键字
A
微信
助力
Laravel框架

  Laravel框架,请先自学,如果不会,请看我们后面的专题,我们会请几位大神,专门出一个关于laravel的专辑。如果等不及,请直接微信后台留言:我要。

  微信开发,目前最热门的议题了,基于我们公司的SCMP平台底层,实现微信自动授权、用户自动注册管理等,本集不做详细的描述,后面请潘神出一个专题。时间待定。如果迫切需要了解,请先问度娘。 Laravel也有微信的SDK。
  让我们集中精力首先做好助力这个模块本身的设计。

涉及到什么样的功能模块
  基本点应该包括:
  1、微信的认证、分享信息的定制处理等;

  2、活动信息的管理;包括开始时间、结束时间、活动主题、名称、活动规则信息等;

  3、活动规则的实现:主要包括每一次助力产生的值的定义、助力次数限制(按人头计算?按时间计算?按相互之间的关系计算?等等)、助力的;
  4、互动信息的呈现,包括排名信息、助力好友(俗称爱心榜)等的展现;
  5、安全机制的建立,包括助力提交模式、IP地址的分析、限制;活动黑名单的管理等。
1
微信认证和分享定制
  1、微信认证,是通过微信的接口,获取用户的openid信息,然后通过openid 和accesstoken去获取用户的详细信息。有些程序猿们会问,为什么有些活动我们会遇到系统弹出来说谁谁谁开发的,需要我授权同意获取我的资料,而有些系统不需要,就直接能读取到我的用户信息呢?
  这里面涉及到一个特定的参数:'scope' => 'snsapi_base', 还有那个弹出绿色确认窗口的,就是'scope' => ‘userinfo'的模式了。具体的看跟下来的专题吧。
  2、在各个页面里面,装载分享出去的分享信息。微信提供了一个: jweixin-1.0.0.js文件,另外,在laravel的模板里面,需要定义一个section来装载专门的share的信息,如果后面有定义就覆盖parent端的代码。
@section()
include ‘shencom.wxjs’
@show
  其中wxjs是装载了js函数的一个php文件(blade模板如果不动,请问度娘)
  在微信活动过程中,良好的或者具有煽动性的分享文案,对于活动本身的传播力度以及活动的成功举办,都是具有非常重要的意义的,所以这个功能是必不可少的哦。
  另外,因为分享出去的字段包括:
'title'=>$wxdata['share_title'],
'desc'=>$wxdata['share_desc'],
'imgUrl'=>$wxdata['share_logo'],
'link'=>$wxdata['share_link'],
'title'=>$wxdata['share_timeline'],
  你可能留意到了,link是可以自己定义的,也就是说,你可以打着林志玲的旗号,然后让大家点击之后,直接跳到凤姐的主页。 哈哈哈。
  你转发出去的连接,别人点开,就进入到了你的帮忙助力的页面,这个是不是很简单了?
  如果你的Userid=10086,你的跳转连接大可以定义为www.shencom.cn/example/helpme/userid=10086。
  其他,你懂的。
活动信息的管控
  活动信息的管控,一般来说,还是要放在数据库里面。当然,也可以放在配置文件里面,比如laravel的config下面的配置文件。不过考虑到未来的兼容性,建议还是在数据库里面建一个activity表,最少包括标题、介绍、开始时间、结束时间等信息,至于奖品,则可能是新建其他的库表来保存了。
  为了用户体验更好,根据活动的时间,有活动未开始、活动正在举办之中,以及活动已经结束等情况。
  注意,laravel的配置文件里面必须要设置好时间,在config/app.php里面,
'timezone' => 'PRC',然后我们根据活动的节点,装载不同的预告或者其他的结束页面等。
public function index()
{
 $isIn=$this->isInActivity();
 if ($isIn==2||$isIn==4){
   return view('activity.test.preview');
}
elseif ($isIn==3){
  return view('activity. test.over');
}
 return view('activity. test.main');
}
  在判断的时候,为了保证判断时间的准确性,我们还是建议增加多一行记录:
date_default_timezone_set('Asia/Shanghai');
活动规则的实现
这是整个助力活动比较关键的一个部分。
助力值
  1、首先说说助力值的确定问题。一般来说,助力的规则里面有每助力一次增加1,或者增加随机值,或者根据特定的比例,增加特定的值等等的方式。我们需要做一个方式是普遍适用的,并且是可以通过配置来确定规则的。
  
  我们用了一个json数据格式来保存规则,如下:
{值1:比例1,值2:比例2, 值3:比例3,………………值N:比例N}
  一般来说,比例1+2+3+……+N=100最好,表示100%,但是就算不等于100%也没有关系,最终会依据100%来转换。
  写一段代码,根据比例来产生对应的值,并且封装为一个类,很方便就可以达成了,可以随意调用。
助力关系
  2、助力关系问题。一般来说,助力关系的判定,是对自己和帮助的人的相互帮忙的关系的判定。无非也就是有以下的几点:
  (1)已经帮过忙,一次就算;
  (2)还没有帮过忙;
  (3)特定的时间段内帮忙的判定,比如每天可以帮一次等等。
  我们需要一个表,来记录所有人之间相互帮忙的过程:

support :id,act_id,sponsor,supporter,create_at,create_ip,update_at,support_value
  如果你喜欢,还可以加入memo字段等。
Create_at和update_at是laravel管理固定需要的字段,其实update_at可以不需要的。
助力权利
  3、助力权利判定。所谓助力权利的判定,就是助力者对于自己的助力的关系的判定。无非就是:  
 (1)你有资格继续帮忙助力;
 (2)你没有资格继续帮忙助力,可能是你的总的次数用完了。
  同样是利用support表进行必要的判定,只是此时此刻,需要确定的是自己的一些关系。
  值得说明的是,2和3点,都建议使用一个配置库来进行某些规则的配置。
  比如:Max_Support_Cnt=5等,表示最多可以帮5个人助力等。

互动信息的呈现
  实际上,我们在互动游戏玩的过程中,会发现,互动信息呈现出来,将会比较有效地拉动大家玩的兴趣。
  一般来说,需要包括最少几个信息:
  1、英雄榜、排行榜信息,就是把当前助力人数或者助力值较高的人排行列出来,激励大家积极向上。这个因为涉及到自己的排名,以及其他人的排名,所以比较复杂。
  我这里贴一段SQL,给大家参考,就是如何直接从数据库里面获取排名的:
select a.*,b.openid,b.nickname,b.headimgurl,@rownum:=@rownum+1 as ranking
from cf_task_sponsor a
left join usr_userinfo b on a.sponsor=b.id
join (select @rownum:=0) r
order by a.support_value desc,a.last_updatetime asc
limit 100

  看到了@rownum:=@rownum+1这个吗?
  key point

  2、爱心榜、助力榜等,就是显示帮忙的好友信息,以及帮忙的数量。这个比较简单,直接从support表去取就好了。

安全考量
  安全的角度,除了程序本身要健壮之外,还必须要考虑其他的辅助的模式。
  1、IP的限制。
  IP范围,可以从http://www.ipaddresslocation.org/去获取你想要的国家的IP段,然后加以限制。这个相对来说比较粗糙了。  
  IP数量:还有另外一个就是,限定同一个IP只能帮忙助力多少次。这样,有好有不好,也因为这样比较容易误伤。不过这个点,我们认为是必须的。
  涉及的数据库表,我们叫:com_iprange,以及support,还有配置表config。
  2、黑名单库。
  你不要跟我说你没有遇到过活动党。
  如果有,你完全可以把他们拉进来黑名单库,每次他们发起活动或者他们帮忙助力的时候,你都首先去判定一下,他们是否在库里面,如果在,就直接跟他们Ciao了。
  别误会,Ciao据说是意大利语的再见的意思,绝对不是国内的某意思哦。
涉及数据库表:blacklist,字段包括:id,content,type,memo,create_at,update_at,desc等。
  每次判定的时候就直接用content+type去判定即可,毕竟放入里面的Openid、userid、IP地址等,都是完全不同的内容形式,放在一个位置即可。
  3、助力提交模式,还是要用到laravel的跨域验证。这个是基本的了。
  4、提交辅助验证。在做POST提交的时候,尤其是Ajax提交的时候,需要注意做好其他验证码的防伪,一般来说,在每次装载页面的时候,都产生一个当前页面的验证码,写入session,提交的时候进行验证即可。跟前一步laravel的机制很一致。
  
5、助力/砍价过程,使用数据库的事务处理,可以最大限度保证数据的一致性。
如何开发一套微信助力应用(Laravel框架通用)
又到了
要总结的时候
如何开发一套微信助力应用(Laravel框架通用)

又写那么长……又没有我的梗……
我就喜欢长……还喜欢你的大宝剑……
程序猿安慰师小林
写到快结束的时候,才发现写得太长了,而且还不够特别的细致。

以后有时间就专门抽一个个的点出来详细写吧。
我们提倡的做法是尽可能通用一些,这样后续的类似活动才有可能更好更快地开发出来。

Ciao
不点赞的程序员不是好程序员。



以上是关于如何开发一套微信助力应用(Laravel框架通用)的主要内容,如果未能解决你的问题,请参考以下文章

开发一套微信小程序商城系统多少钱?

微信公众平台开发教程微信公众平台通用开发框架

Laravel通用后台管理系统

Laravel通用后台管理系统

Laravel9通用后台管理系统

Laravel+Layui通用后台权限管理系统