Ma Zl's Blog

作者 主题: 利用e5 api做一个公告栏 - beta  (阅读 96 次)

admin

  • Administrator
  • Authors
  • *****
  • 帖子: 21
利用e5 api做一个公告栏 - beta
« 于: 2021-06-17,09:41:50 »
重要:
此程序或服务尚不稳定,不应过度依赖。
本人不对该服务提供任何保证,尤其是当考虑到ibm的cloudant一个月崩了两次,此服务只应用于演示。
此服务可能无法续期你的e5订阅,你应该同时使用其他方案来为你的订阅续期。
本人可能无法对代码相关问题提供帮助,也就是说出问题我一般不会修。(不会编程)



前言
最近搞了个E5,说是要拿api调用才能续期,看了下api,正好缺个公告栏,拿teams的channel做了一个。用的IBM云函数免费版,正好支持php,不嫖白不嫖。

使用例
https://asktrump.xyz/service/b.html

用法
  • 去azure开个应用程序,给以下权限并授予管理员同意(具体方法网上都有,不予赘述):
    • openid
    • offline_access
    • ChannelMessage.Read.All
  • 把你的应用程序相关信息以JSON格式编码,post至
    https://bb28869c.jp-tok.apigw.appdomain.cloud/ms/register/
    具体示例如下:
    POST https://bb28869c.jp-tok.apigw.appdomain.cloud/ms/register/
    {"clientId":"xxxxx","clientSecret":"xxx","tenant":"xxxxx"}
    其中,clientId是你的客户端ID;clientSecret是你的应用密钥,一串含特殊字符的字符串,不要与密钥ID混淆;tenant是你的租户ID,你所有应用程序的租户ID应该相同。你应收到如下响应:
    {"code":0,"id":"xxxxxx"}
    记下你的id,后文会多次使用。可能的错误code:
    • 1 - 输入不完整。可能缺少三项中的一项或多项。
    • -1 - 数据库写入问题
    • 4xx - function内部错误
  • 添加应用程序的callback URL:
    https://bb28869c.jp-tok.apigw.appdomain.cloud/ms/authHandler?id=xxxxxx
    ,其中id就是你之前的id。参照以下示例建立登录授权url并登录。可参考https://docs.microsoft.com/zh-cn/azure/active-directory/develop/v2-oauth2-auth-code-flow#request-an-authorization-code
    https://login.microsoftonline.com/[tenant]/oauth2/v2.0/authorize?client_id=[clientId]&scope=offline_access%20openid%20ChannelMessage.Read.All
    &response_type=code&redirect_uri=https://bb28869c.jp-tok.apigw.appdomain.cloud/ms/authHandler?id=[id]&response_mode=query
    你应收到以下响应:
    {"code":0,"id":"xxxxxx"}
    可能的错误code:
    • 1 - 输入不完整。可能未完成授权
    • 2 - 数据库读取问题
    • -1 - 数据库写入问题
    • 3 - 获取相关token失败
    • 4xx - function内部错误
  • 获取首次频道数据以作为首次响应:
  • 根据数据自己制作html展示(可以直接用我的,无需置顶可以参照https://mzltest.webo.page/a.html),此后的请求如果无需刷新则只需要带id参数(code此时是9x)。

已知问题
  • 频道数据未作过滤,仅应开放发布权限给受信任用户,否则如果微软那边只是转义不是删除有害内容就会有安全问题
  • 上传图片等附件只能用附件功能,不能直接附加图片,且你需要让附件的观看者提前访问该文件夹共享链接
  • 默认只取前50条,删除东西也占条,不支持回复功能。理论上讲可以用/customGet @odata.nextLink但是没试
  • 如果该id下所有缓存响应大于1M,则会导致后面所有请求可能失败(数据库限制)
« 最后编辑时间: 2021-08-17,08:43:21 作者 admin »
如未作说明,所有内容均为原创。文章的许可协议为
知识共享许可协议 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
在转载本站点的文章时,应在对应版权声明处注明来源并添加指向原始文章的超链接,且转载的文章必须使用与原始文章相同的许可协议,文章所在页面不得包含任何广告如果目标平台限制无法达成以上的一个或多个条件,则不得转载本站点文章)。
小部分引用(撰写的作品超过500字<不包含控制代码等非可读字符,下同>且引用本站点所有原创文章字数不多于总字数的20%且不超过300字)时如果平台有限制,来源可以不使用超链接形式,但必须包含原始来源网址。如果引用内容字数不多于所撰写文章的20%且不超过300字,且所撰写文章超过1000字且有较高原创性,则可用于商业用途(例如:公开售卖),无需使用相同协议(可以禁止转载),但仍需按照上述要求注明来源