《微信公众账号开发教程.docx》由会员分享,可在线阅读,更多相关《微信公众账号开发教程.docx(167页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、微信公众众帐号接接口开发发接触微信信公众帐帐号已经经有两个个多月的的时间了了,在这这期间,除除了陆续续完善个个人公众众帐号xxiaooqroobott以外,还还带领团团队为公公司开发发了两个个企业应应用:一一个是普普通类型型的公众众帐号,另另一个是是会议类类型的公公众帐号号。经过过这3个个公众帐帐号的开开发,对对目前微微信公众众平台开开放的aapi算算是比较较熟悉了了,像文文本消息息、图文文消息、音音乐消息息、语音音消息、位位置消息息等全部部用到过过,菜单单也使用用过。所所以,就就有了写写微信公公众帐号号开发教教程的想想法,将将学习到到的技术术经验分分享出来来,帮助助更多需需要的朋朋友,也也希
2、望借借此认识识同行的的朋友,共共同交流流,共同同进步!下面将对对即将推推出的微微信公众众帐号开开发系列列连载教教程做简简单的说说明。教教程主要要是面向向有一定定Javva编程程基础的的朋友,不不打算从从编程语语言开始始讲起,一一是考虑虑到自己己没有那那么多时时间和精精力(要要上班、装装修、学学车等),二二是怕等等我把编编程语言言讲完,微微信公众众帐号又又发生了了大变化化,这样样教程就就显得有有点过时时,没有有吸引力力了,所所以只能能是有侧侧重点的的介绍。至至于内容容方面,大大概会涉涉及到:1)前沿沿知识:微信公公众帐号号的分类类、两种种模式各各自的特特点和区区别、开开发模式式的配置置使用等等;
3、2)APPI中各各类消息息的使用用(我已已经对aapi进进行封装装并打成成了jaar包,到到时候会会考虑分分享出来来);3)微信信公众帐帐号开发发中的小小技巧(如如换行、通通过代码码发送表表情、屏屏幕飘雪雪花、表表情的接接收识别别、在AAndrroidd和iOOS上表表现不一一致等等等);4)与业业务系统统对接的的方法(链链接、短短信等,除除了技术术讲解还还会做一一定的分分析对比比);5)微信信公众平平台上常常见功能能的开发发(如像像小黄鸡鸡那样的的人机对对话、天天气预报报、精确确的定位位及百度度地图的的使用、音音乐搜索索、语音音识别解解析等)当然,具具体写出出来的内内容肯定定不止这这些,但但
4、一定会会包含以以上介绍绍的所有有内容。我也不知知道多久久能写完完这些内内容,当当然是越越快越好好,我会会尽全力力的。希希望正在在看博文文的你通通过微信信关注xxiaooqroobott或者在在博客留留言支持持,给我我动力,谢谢谢!开发xiiaoqqrobbot就就是为了了学习微微信公众众帐号开开发,将将apii开放出出来的各各类消息息都体验验了。虽虽然现在在看来有有点大杂杂烩的意意思,但但还是比比较实用用的,一一款生活活、娱乐乐的好帮帮手,目目前已有有3700多关注注者。周周边搜索索功能定定位比较较准确(解解决了纠纠偏问题题,能精精确到十十米范围围),平平时出门门在外搜搜美食、AATM机机、厕
5、所所、超市市等再方方便不过过了,还还提供路路线导航航;聊天天唠嗑功功能是我我自己开开发的,后后面的连连载教程程很多内内容都会会从中抽抽取出来来,下面面是主界界面截图图,对系系列连载载教程有有所期待待的朋友友很建议议关注体体验下,做做的不好好的地方方也请多多提意见见,除了了技术本本身外,体体验也是是我比较较重视关关注的。2.微信信公众帐帐号开发发教程第第2篇-微信公公众帐号号的类型型(普通通和会议议) 个人公众众帐号与与企业公公众帐号号记得在两两个月前前,我在在微信官官方开发发群里问问个人公公众帐号号与企业业公众帐帐号有什什么区别别的时候候,还被被人笑话话过,没没有人愿愿意告知知,也许许是这个个
6、问题问问的太过过于简单单了吧。我我想一定定也还有有不少朋朋友在刚刚接触时时,也搞搞不清楚楚这一点点。其实实,在注注册微信信公众帐帐号时,是是不区分分个人帐帐号与企企业帐号号的,它它们需要要填写的的注册资资料是一一样的,这这个区别别仅仅是是帐号申申请成功功后在使使用用途途上的区区别罢了了。然而而,在注注册公众众帐号时时的确有有个类型型可以选选择,但但并不是是选择个个人帐号号与企业业帐号,那那有些什什么类型型可以选选择呢?这也正正是今天天我想讲讲的主题题,请继继续往下下看。注册时可可选择的的两种帐帐号类型型微信公众众帐号注注册的最最后一步步是填写写“公众众号信息息”,最最后一个个选项是是选择“类类
7、型”,它它有二个个值可供供选择“普普通公众众帐号类类型”和和“公众众会议帐帐号”。当当我们选选择“公公众会议议号”时时,下方方会出现现醒目的的红字“提醒:会议号是有一定时间限制的公众帐号,过期后将无法登录使用。”,如下图所示。那注册时时到底应应该选择择哪个类类型呢?这就需需要我们们对两种种类型有有一定的的了解才才好做出出判断。下下面将主主要通过过介绍公公众会议议帐号与与普通公公众帐号号的区别别来进行行说明。公众帐号号与普通通帐号的的区别在注册好好的公会会会议帐帐号的“设设置”一一栏里,可可以看到到“会议议号设置置”项,如如下图所所示:其实会议议帐号与与普通帐帐号的区区别在“会会议号设设置”里里
8、就能全全部体现现出来,它它们的区区别有以以下三点点:1)有效效时间普通帐号号是创建建后永久久有效的的,而会会议帐号号的有效效期只有有一个月月,一个个月后帐帐号就失失效了。帐帐号失效效后登录录微信公公众平台台时,会会提示“该公众会议号已经过期,无法再登录使用”,如下图所示:帐号失效效后已关关注了会会议帐号号的用户户继续使使用时,会会提示“该公众帐号已过期,无法下发消息”,但如果是有菜单权限的会议帐号,仍然可以通过菜单获取信息,帐号过期后菜单的响应没有被禁止,如下图所示:从上图可可以看到到,会议议帐号过过期后,无无法再通通过文本本获取消消息,但但点击菜菜单是可可以继续续使用的的,图中中的图文文消息
9、“峰峰会概况况”就是是点击菜菜单后返返回的。2)关注注权限普通帐号号任何人人都可以以关注,没没有权限限限制。会议帐号是可以设置关注权限的,分为两种:任何人都可以关注和需要通过验证才可以关注,不进行此项设置时默认是前者。如果设置为需要通过验证才可以关注,就有点类似于微信添加朋友时的验证一样,只不过这里的验证问题是可以设置的,并且如果你设置的验证消息是类似于询问用户身份的,例如“请问您的真实姓名叫什么?”,你还可以勾选“将验证消息作为备注名”,这样就很好辩认所有关注了会议帐号的人。3)参与与人相互互可见普通帐号号的关注注者之间间是不可可见的,而而会议帐帐号的关关注者之之间是相相互可见见的,这这是什
10、么么意思呢呢?在会会议号设设置里,如如果勾选选了“参参与人相相互可见见”,那那么在关关注了该该会议帐帐号后,能能够在帐帐号详细细资料里里看到多多了一项项“与会会者”,点点击它将将会显示示所有关关注了该该会议帐帐号的微微信号列列表,并并且点击击某个参参与人还还可以查查看详细细资料、申申请加为为朋友等等。这是会议议帐号比比较给力力的一个个功能,方方便参加加会议的的人相互互认识。以上三点点是会议议帐号的的特点,也也是与普普通帐号号的区别别。可以以看出,会会议帐号号是在普普通帐号号功能的的基础上上增加了了帐号有有效时间间限制(一一个月)、关关注权限限和关注注者相互互可见三三个功能能。其实,微微信目前前
11、对会议议帐号的的支持还还远远不不够。比比如像会会议主题题、时间间、地点点等会议议的常规规属性设设置都不不支持,还还有会议议通常都都会有的的签到、互互动、投投票等环环节也没没有任何何体现,更更没有考考虑到周周期性的的会议,希希望微信信后期的的版本对对这块的的支持力力度更大大。3.微信信公众帐帐号开发发教程第第3篇-开发模模式启用用及接口口配置 编辑模式式与开发发模式微信公众众帐号申申请成功功后,要要想接收收处理用用户的请请求,就就必须要要在“高高级功能能”里进进行配置置,点击击“高级级功能”,将将看到如如下界面面:从上图中中可以看看到,高高级功能能包含两两种模式式:编辑辑模式和和开发模模式,并并
12、且这两两种模式式是互斥斥关系,即即两种模模式不能能同时开开启。那那两种模模式有什什么区别别呢?作作为开发发人员到到底要开开启哪一一种呢?编辑模式式:主要要针对非非编程人人员及信信息发布布类公众众帐号使使用。开开启该模模式后,可可以方便便地通过过界面配配置“自自定义菜菜单”和和“自动动回复的的消息”。开发模式式:主要要针对具具备开发发能力的的人使用用。开启启该模式式后,能能够使用用微信公公众平台台开放的的接口,通通过编程程方式实实现自定定义菜单单的创建建、用户户消息的的接收/处理/响应。这这种模式式更加灵灵活,建建议有开开发能力力的公司司或个人人都采用用该模式式。启用开发发模式(上上)微信公众众
13、帐号注注册完成成后,默默认开启启的是编编辑模式式。那么么该如何何开启开开发模式式呢?操操作步骤骤如下:1)点击击进入编编辑模式式,将右右上角的的编辑模模式开关关由“开开启”切切换到“关关闭”,如如下图所所示:2)点击击高级功功能进入入到开发发模式,将将右上角角的开发发模式开开关由“关关闭”切切换到“开开启”,但但在切换换时会遇遇到如下下提示:提示需要要我们先先成为开开发者,才才能开启启开发模模式。那那就先点点击下图图所示的的“成为为开发者者”按钮钮:如果提示示资料不不全,那那就先补补齐资料料再回来来继续操操作。需需要补全全的资料料有公众众帐号头头像、描描述和运运营地区区。待资料补补全后,再再次
14、点击击“成为为开发者者”,这这时将看看到接口口配置信信息界面面,如下下图所示示:这里需要要填写UURL和和Tokken两两个值。URL指的是能够接收处理微信服务器发送的GET/POST请求的地址,并且是已经存在的,现在就能够在浏览器访问到的地址,这就要求我们先把公众帐号后台处理程序开发好(至少应该完成了对GET请求的处理)并部署在公网服务器上。Token后面会详细说明。也就是说说要完成成接口配配置,只只需要先先完成微微信服务务器的GGET请请求处理理就可以以?是的的。 那那这是为为什么呢呢?因为为这是微微信公众众平台接接口中定定义的。具具体请参参考APPI文档档-消息息接口-消息接接口指南南中
15、的网网址接入入部分。点此进入。上面写的的很清楚楚,其实实你只要要能理解解上面在在说什么么就OKK了,至至于怎么么编写相相关代码码,我已已经帮你你完成了了,请继继续往下下看。创建公众众帐号后后台接口口程序创建一个个Javva WWeb工工程,并并新建一一个能够够处理请请求的SServvlett,命名名任意,我我在这里里将其命命名为oorg.liuufenng.ccourrse.serrvleet.CCoreeSerrvleet,代代码如下下:javvavvieww pllainncoppyprrintt?1. packkageeorrg.lliuffengg.cooursse.sservvlet
16、t;2. 3. impoortjavva.iio.IIOExxcepptioon;4. impoortjavva.iio.PPrinntWrriteer;5. 6. impoortjavvax.serrvleet.SServvlettExccepttionn;7. impoortjavvax.serrvleet.hhttpp.HtttpSServvlett;8. impoortjavvax.serrvleet.hhttpp.HtttpSServvlettReqquesst;9. impoortjavvax.serrvleet.hhttpp.HtttpSServvlettRessponnse;1
17、0. 11. impoortorgg.liiufeeng.couursee.uttil.SiggnUttil;12. 13. /*14. *核核心请求求处理类类15. *16. *autthorrliiufeeng17. *datte220133-055-18818. */19. publlicclaassCorreSeervlletexttenddsHHttppSerrvleet20. priivattestaaticcfinnallonngsseriialVVerssionnUIDD=4444073394883644482219886L;21. 22. /*23. *确认请请求来自自微信服
18、服务器24. */25. pubbliccvoiidddoGeet(HHttppSerrvleetReequeestreqquesst,HtttpSeervlletRRespponsserrespponsse)thrrowssSeervlletEExceeptiion,IOOExccepttionn26. /微信信加密签签名 27. Sttrinngssignnatuure=rrequuestt.geetPaarammeteer(siggnatturee);28. /时间间戳 29. Sttrinngttimeestaamp=rrequuestt.geetPaarammeteer(timmes
19、ttampp);30. /随机机数 31. Sttrinngnnoncce=reequeest.gettParrameeterr(nnoncce);32. /随机机字符串串 33. Sttrinngeechoostrr=reqquesst.ggetPParaametter(ecchosstr);34. 35. PrrinttWriiterrouut=reespoonsee.geetWrriteer();36. /通过过检验ssignnatuure对对请求进进行校验验,若校校验成功功则原样样返回eechoostrr,表示示接入成成功,否否则接入入失败 37. iff(SSignnUtiil.cc
20、hecckSiignaaturre(ssignnatuure,tiimesstammp,nonnce)38. oout.priint(echhosttr);39. 40. ouut.cclosse();41. ouut=nuull;42. 43. 44. /*45. *处理微微信服务务器发来来的消息息46. */47. pubbliccvoiidddoPoost(HtttpSeervlletRRequuesttreequeest,HtttpSServvlettRessponnseressponnse)thhrowwsSServvlettExccepttionn,IIOExxcepptioon4
21、8. /TOODO消息的的接收、处处理、响响应 49. 50. 51. packkagee orrg.lliuffengg.cooursse.sservvlett;impoort javva.iio.IIOExxcepptioon;impoort javva.iio.PPrinntWrriteer;impoort javvax.serrvleet.SServvlettExccepttionn;impoort javvax.serrvleet.hhttpp.HtttpSServvlett;impoort javvax.serrvleet.hhttpp.HtttpSServvlettReqques
22、st;impoort javvax.serrvleet.hhttpp.HtttpSServvlettRessponnse;impoort orgg.liiufeeng.couursee.uttil.SiggnUttil;/* * 核核心请求求处理类类 * * autthorr liiufeeng * datte 220133-055-188 */publlic claass CorreSeervllet exttendds HHttppSerrvleet priivatte sstattic finnal lonng sseriialVVerssionnUIDD = 4444073394883
23、644482219886L;/* * 确认请请求来自自微信服服务器 */pubblicc vooid doGGet(HtttpSeervlletRRequuestt reequeest, HtttpSServvlettRessponnse ressponnse) thhrowws SServvlettExccepttionn, IIOExxcepptioon / 微信信加密签签名Sttrinng ssignnatuure = rrequuestt.geetPaarammeteer(siggnatturee);/ 时间间戳Sttrinng ttimeestaamp = rrequuestt.ge
24、etPaarammeteer(timmesttampp);/ 随机机数Sttrinng nnoncce = reequeest.gettParrameeterr(nnoncce);/ 随机机字符串串Sttrinng eechoostrr = reqquesst.ggetPParaametter(ecchosstr);PrrinttWriiterr ouut = reespoonsee.geetWrriteer();/ 通过过检验ssignnatuure对对请求进进行校验验,若校校验成功功则原样样返回eechoostrr,表示示接入成成功,否否则接入入失败iff (SSignnUtiil.cch
25、ecckSiignaaturre(ssignnatuure, tiimesstammp, nonnce) oout.priint(echhosttr);ouut.cclosse();ouut = nuull;/* * 处理微微信服务务器发来来的消息息 */pubblicc vooid doPPostt(HtttpSServvlettReqquesst rrequuestt, HHttppSerrvleetReespoonsee reespoonsee) tthroows SerrvleetExxcepptioon, IOEExceeptiion / TOODO 消息的的接收、处处理、响响应可以
26、看到到,代码码中只完完成了ddoGeet方法法,它的的作用正正是确认认请求是是否来自自于微信信服务器器;而ddoPoost方方法不是是我们这这次要讲讲的内容容,并且且完成接接口配置置也不需需要管ddoPoost方方法,就就先空在在那里。 在doGGet方方法中调调用了oorg.liuufenng.ccourrse.utiil.SSignnUtiil.cchecckSiignaaturre方法法,SiignUUtill.jaava的的实现如如下:javvavvieww pllainncoppyprrintt?1. packkageeorrg.lliuffengg.cooursse.uutill;
27、2. 3. impoortjavva.ssecuuritty.MMesssageeDiggestt;4. impoortjavva.ssecuuritty.NNoSuuchAAlgooritthmEExceeptiion;5. impoortjavva.uutill.Arrrayys;6. 7. /*8. *请请求校验验工具类类9. *10. *autthorrliiufeeng11. *datte220133-055-18812. */13. publlicclaassSiggnUttil14. /与接口口配置信信息中的的Tokken要要一致 15. priivattestaaticcStt
28、rinngttokeen=wweixxinCCourrse;16. 17. /*18. *验证签签名19. *20. *paarammsiignaaturre21. *paarammtiimesstammp22. *paarammnooncee23. *reeturrn24. */25. pubbliccstaaticcboooleaancchecckSiignaaturre(SStriingsiggnatturee,SStriingtimmesttampp,SStriingnonnce)26. Sttrinngarrr=neewSStriingtookenn,ttimeestaamp,noo
29、ncee;27. /将ttokeen、ttimeestaamp、nnoncce三个个参数进进行字典典序排序序 28. Arrrayys.ssortt(arrr);29. SttrinngBuuildderconntennt=neewSStriingBBuillderr();30. foor(intti=00;iiarrr.leengtth;i+)31. cconttentt.apppennd(aarri);32. 33. MeessaageDDigeestmd=nnulll;34. SttrinngttmpSStr=nnulll;35. 36. trry37. mmd=MeessaageDDi
30、geest.gettInsstannce(SHHA-11);38. /将将三个参参数字符符串拼接接成一个个字符串串进行ssha11加密 39. bbyteediggestt=md.diggestt(coonteent.toSStriing().ggetBBytees();40. ttmpSStr=bbyteeToSStr(diggestt);41. cattch(NooSucchAllgorrithhmExxcepptioonee)42. ee.prrinttStaackTTracce();43. 44. 45. coonteent=nnulll;46. /将ssha11加密后后的字符符串可与
31、与siggnatturee对比,标标识该请请求来源源于微信信 47. reeturrnttmpSStr!=nulll?tmmpSttr.eequaals(siggnatturee.tooUppperCCasee():fallse;48. 49. 50. /*51. *将字节节数组转转换为十十六进制制字符串串52. *53. *paarammbyyteAArraay54. *reeturrn55. */56. privvateestaaticcSttrinngbbyteeToSStr(byttebyyteAArraay)57. SttrinngsstrDDigeest=;58. foor(int
32、ti=00;ii4)&0XX0F;74. teempAArr1=DiigittmBBytee&0X00F;75. 76. Sttrinngss=newwSttrinng(ttemppArrr);77. reeturrnss;78. 79. packkagee orrg.lliuffengg.cooursse.uutill;impoort javva.ssecuuritty.MMesssageeDiggestt;impoort javva.ssecuuritty.NNoSuuchAAlgooritthmEExceeptiion;impoort javva.uutill.Arrrayys;/* *
33、 请请求校验验工具类类 * * autthorr liiufeeng * datte 220133-055-188 */publlic claass SiggnUttil / 与接口口配置信信息中的的Tokken要要一致priivatte sstattic Strringg tookenn = weeixiinCooursse;/* * 验证签签名 * * paaramm siignaaturre * paaramm tiimesstammp * paaramm nooncee * reeturrn */pubblicc sttatiic bboolleann chheckkSiggnattu
34、ree(Sttrinng ssignnatuure, Sttrinng ttimeestaamp, Sttrinng nnoncce) Sttrinng arrr = neew SStriing tookenn, ttimeestaamp, nooncee ;/ 将ttokeen、ttimeestaamp、nnoncce三个个参数进进行字典典序排序序Arrrayys.ssortt(arrr);SttrinngBuuildder conntennt = neew SStriingBBuillderr();foor (intt i = 00; ii arrr.leengtth; i+) ccont
35、tentt.apppennd(aarri);MeessaageDDigeest md = nnulll;Sttrinng ttmpSStr = nnulll;trry mmd = MeessaageDDigeest.gettInsstannce(SHHA-11);/ 将将三个参参数字符符串拼接接成一个个字符串串进行ssha11加密bbytee diggestt = md.diggestt(coonteent.toSStriing().ggetBBytees();ttmpSStr = bbyteeToSStr(diggestt); cattch (NooSucchAllgorrithhmExxc
36、epptioon ee) ee.prrinttStaackTTracce();coonteent = nnulll;/ 将ssha11加密后后的字符符串可与与siggnatturee对比,标标识该请请求来源源于微信信reeturrn ttmpSStr != nulll ? tmmpSttr.eequaals(siggnatturee.tooUppperCCasee() : fallse;/* * 将字节节数组转转换为十十六进制制字符串串 * * paaramm byyteAArraay * reeturrn */priivatte sstattic Strringg byyteTToSttr(
37、bbytee bytteArrrayy) Sttrinng sstrDDigeest = ;foor (intt i = 00; ii 4) & 0X00F;teempAArr1 = DDigiitmmBytte & 0XX0F;Sttrinng ss = neww Sttrinng(ttemppArrr);reeturrn ss;这里唯一一需要注注意的就就是SiignUUtill类中的的成员变变量tookenn,这里里赋予什什么值,在在接口配配置信息息中的TTokeen就要要填写什什么值,两两边保持持一致即即可,没没有其他他要求,建建议用项项目名称称、公司司名称缩缩写等,我我在这里里用的是是项目名名称weeixiinCooursse。 最后再来来看一下下webb.xmml中,CCoreeSerrvleet是怎怎么配置置的,wweb.xmll中的配配置代码码如下:htmmlvvieww pllainncoppyprrintt?1. 2. webb-apppverrsioon=2.5xmllns=htttp:/jjavaa.suun.ccom/xmll/nss/jaavaeee3. xmllns:xsii=htttp:/wwww.w3.orgg/20001/XMLLSchhemaa-innstaancee4. xsii:scchemmaLoocat