资源预览内容
第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
第9页 / 共17页
第10页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
大数据 商业智能 FineBI 的如何实现微信企业应用 1. 报表微信企业应用示例 示例见 Demo 视频。 2. 创建报表微信企业应用 管理员登录微信企业号,根据提示新建应用,创建后进入应用,可以看到应用的基本 信息,其中需要关注的信息有: # 应用 ID:微信号中可能有很多个应用,后台开发的时候需要根据应用 ID 来决定是 在哪个应用中进行响应 # 可见范围:微信权限控制 # 应用模式:应用模式主要分成两种: 普通模式:这个模式下不能调用微信的接口,只能设置固定的菜单及回复的消息;如 果需要的微信应用比较简单,菜单都是固定的,可以用这种模式,但是报表就无法绑定用 户了,查看报表的时候就需要先登录(除非报表不做权限控制); 回调模式:开发者可以通过企业号提供的接口,获取微信用户信息,实现自动回复、 自定义菜单等个性化功能。回调模式的界面如图所示: 3. 回调模式配置 我们在应用中需要调用微信开放的接口做开发,所以选择“回调模式”,这样微信服 务器会在客户手机和开发者服务器间架起一个桥梁,通过消息的传递和响应,实现与用户 的交互操作: 上面这个流程走通,需要微信服务器和开发者服务器先建立通信,这样才能构建一个 完整的链路。 进入回调模式,开启模式后,可以看到,下面的功能都是不可用状态,需要设置好回 调 URL 及密码后才能用的。 我们点开修改,会看到有 3 个参数,都是我们需要关注的: # URL:开发服务器接收微信收企业号服务器推送请求的地址,支持 http 或 https 协 议,端口不限,这个 URL 就相当于开发服务器的后台引擎,微信服务器推送的请求都是到 这个地址。另外注意,这个地址必须是外网可以访问的。 # Token:可由企业任意填写也可以随机获取,用于生成签名。 # EncodingAESKey:用于消息体的加密,是 AES 密钥的 Base64 编码,点击随机获 取就可以获得。 点击保存的时候,企业号会向验证 url 发送一个 get 请求,例如: 1. xxurl?msg_signature=5c45ff5e21c57e6ad56bac8758b79b1d9ac89fd3tamp=1 409659589 2. wxcpt = new WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID); 3. sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp, sVerify Nonce, sVerifyEchoStr); 返回验证信息时需要进行 urldecode 处理。 4. 获取微信账号(OAuth2 验证)后台登录报表 在报表服务器端,为了安全我们会给报表设置权限,用户访问报表的时候需要先登 录,认证成功后才可以看到他能看到的数据; 用户登录微信进入报表企业应用后,访问报 表时肯定不希望再次弹出登录界面来登录报表的,而不登录报表的话,就无法查看报表内 容了。 所以在打开报表时,我们需要带上微信账号的身份信息,在后台登录报表。 例如 demo 示例中,在微信企业号管理平台中,进入应用回调模式,设置自定义菜单 添加事件类型选择跳转到网页,url 链接类似如下: 1. 16. 17. FR.ajax( 18. url: /WeiXin/page/OAuth2.jsp, /获取微信 userid 19. type: GET, 20. data: code:code, 21. success: function(msg) 22. var username = msg; 23. login(username, 123456); 24. 25. ); 26. /单点登录 27. function login(username, password) 28. alert(当前登录账号为: + username); 29. jQuery.ajax( 30. url:/WeiXin/ReportServer?op=fs_load/认证成功跳转页面,因为 ajax 不支持重定向所有需要跳转的设置 38. /登录成功 39. else if (data.status = fail) 40. alert(用户名或密码错误);/登录失败(用户名或密码错 误) 41. 42. , 43. error:function() 44. alert(超时或服务器其他错误);/ 登录失败(超时或服务器其他错 误) 45. 46. ); 47. 48. 49. 50. 51. 52. 在 Login.jsp 中,首先获得 code 值后,到 OAuth2.jsp 根据 access_token 和 code 获取 userid,然后可以使用 userid 到报表端进行单点登录 注意:这边微信账号和报表账号如果是不一样的,那么需要有微信账号、报表账号及 密码对应表,可以根据微信账号获取到报表用户账号及密码来做单点登陆,示例中假设的 是微信账号和报表账号是相同的,并且密码都是统一的 123456. OAuth2.jsp 代码如下: 1. 2. 3. 4. 5. 6. 7. 8. 总结:总结: OAuth2 验证需要关注的参数有: 我们可以使用现成的封装好的类 WeixinUtil.getAccessToken 来获取 access_token。 以及 GOauth2Core.GetUserID 来进一步获取 userID。 5. 接收微信消息与事件并响应 微信应用开启回调模式后,成员给企业应用发送消息,或者触发关注、进入应用、点 击菜单、上报地理位置等事件时,微信服务器就会把这些动作及内容,以 POST 的方式推 送到开发服务器(就是一开始设置的验证 URL 的地方),例如之前我们的地址是 1. :8081/WeiXin/page/WeiXinServer.jsp 。则推送的消息就是 1. :8081/WeiXin/page/WeiXinServer.jsp?msg _signature=ASDFQWEXZCVAQFASDFASDFSStamp=13500001234 3. ServletInputStream in = request.getInputStream(); 4. InputStreamReader isr = new InputStreamReader(in); 5. BufferedReader br = new BufferedReader(isr); 6. String s = ; 7. while(s=br.readLine()!=null) 8. sb.append(s) ; 9. 10. String sReqData =sb.toString(); 11. String sReqMsgSig = request.getParameter(msg_signature); 12. String sReqTimeStamp = request.getParameter(timestamp); 13. String sReqNonce = request.getParameter(nonce); 14. System.out.println(sReqData: + sReqData); 15. System.out.println(sReqMsgSig: + sReqMsgSig); 16. System.out.println(sReqTimeStamp: + sReqTimeStamp); 17. System.out.println(sReqNonce: + sReqNonce); 18. wxcpt = new WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID); 19. String sMsg = wxcpt.DecryptMsg(sReqMsgSig, sReqTimeStamp, sReqNonce , sReqData); 20. System.out.println(after decrypt msg: + sMsg); 21. 22. /处理接收的消息及事件 23. DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 24. DocumentBuilder db = dbf.newDocumentBuilder(); 25. StringReader sr = new StringReader(sMsg); 26. InputSource is = new InputSource(sr); 27. Document document = db.parse(is); 28. 29. Element root = document.getDocumentElement(); 30. 31. String ToUserName = root.getElementsByTagName(ToUserName).item(0) .getTextContent();/企业号 CorpID 32. String FromUserName = root.getElementsByTagName(FromUserName).ite m(0).getTextContent();/成员的 UserID 33. String MsgType = root.getElementsByTagName(MsgType).item(0).getT extContent(); /消息类型 34. StringBuffer sRespDatabf = new StringBuffer(); 35. String sRespData; 36. 37. / 进入企业应用时 38. if (MsgType.equals(event) 39. String Event = root.getElementsByTagName(Event).item(0).getTe xtContent(); 40. f(Event.equals(enter_agent) 41. sRespDatabf.append(); 42. sRespDatabf.append(); 43. sRespDatabf.append(); 44. sRespDatabf.append( + sReqTimeStamp + ); 45. sRespDatabf.append(); 46. sRespDatabf.append(); 47. sRespDatabf.append(); 48. 49. 50. try 51. sRespData = sRespDatabf.toString(); 52. String sEncryptMsg = wxcpt.Encryp
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号