多说评论系统是一个非常好用的第三方评论插件,聚合了大多数的SNS平台账号登录和分享功能,UI也很不错。

作为网站快速接入评论系统,多说是一个比较好的选择,其也提供了一些实用的API去满足定制化需求。

多说API支持将本地的用户基本信息同步到多说服务器,实现了本地用户系统和多说用户验证机制的一致。

大概的过程:在用户注册或者修改个人信息的时候将用户信息同步至多说服务器,并在用户登录后在本地cookie写入JWT值,多说可以进行判断而实现用户无需再登录多说系统就可以进行评论。

Array参数注意点

在使用多说同步用户信息API时,用户的信息users参数的类型为array,这里需要特别注意其格式处理。

不过还是推荐多说团队使用json作为参数格式或者使用新浪微博的处理方式:参数类型为string,多个参数使用逗号分隔,开发者的处理成本会小很多。

具体的参数格式为:users[0][user_key]=1&users[0][name]=parry&....

这个具体的正确格式尝试了很多种方式后,在看到原始的ASP处理方式时才知道,谢谢多说技术人员小武的耐心解答(QQ:1175762238)。

他给的asp源码在这里

两个辅助函数

顺手整理出了两个方法:POST数据到多说的API接口和设置多说本地身份说明(JWT)。

注意:在POST数据到多说的API接口方法中只处理了一个arrayPostData的情况,多个数组的形式请自行修改。

项目名称就叫DuoShuo.SDK.Partial了,希望更多的人来完善SDK。

有可以优化的地方请多指教。

 using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Web; namespace DuoShuo.SDK.Partial
{
/// <summary>
/// 多说POST请求的帮助类,主要解释了array参数的拼接格式和JWT的设置
/// </summary>
/// <author>
/// Parry
/// Mail: qiupengyuan@gmail.com
/// Blog: http://www.cnblogs.com/parry
/// </author>
public class DuoShuoHelper
{
#region POST数据 /// <summary>
/// POST数据到多说的API接口
/// </summary>
/// <summary>http://dev.duoshuo.com/docs/51435552047fe92f490225de</summary>
/// <param name="apiUrl">接口的URL,如http://api.duoshuo.com/users/import.json</param>
/// <param name="prePostData">不包含array参数的前置数据,类似:short_name=当前站点注册的多说二级域名&secret=站点多说密钥</param>
/// <param name="arrayName">array形式的参数的名称,如users</param>
/// <param name="arrayPostData">array形式的参数数据</param>
/// <returns>接口返回的字符串</returns>
/// <example>
/// 注意array参数,在.NET下可以使用HashTable或者Dictionary实现
/// 如:
/// Dictionary<string, object> arrayPostData = new Dictionary<string, object>();
/// arrayPostData.Add("user_key", 1);
/// arrayPostData.Add("name", "Parry");
/// arrayPostData.Add("role", "user");
/// arrayPostData.Add("avatar_url", "");
/// arrayPostData.Add("url", "");
/// arrayPostData.Add("email", "");
/// arrayPostData.Add("created_at", DateTime.Now.ToString("yyyy-mm-dd hh:MM:ss"));
/// </example>
/// <remarks>注意:此方法只处理了一个arrayPostData的情况,多个数组的形式请自行修改</remarks>
public string HttpPostData(string apiUrl, string prePostData, string arrayName, Dictionary<string, object> arrayPostData)
{
var webRequest = WebRequest.Create(apiUrl) as HttpWebRequest;
if (webRequest != null)
{
webRequest.Method = "post";
webRequest.ContentType = "application/x-www-form-urlencoded"; //postData赋值
var postData = prePostData + "&" + string.Join("&", arrayPostData.Select(keyValuePair => string.Format("{0}[0][{1}]={2}", arrayName, keyValuePair.Key, keyValuePair.Value)).ToArray()); ////使用非LINQ实现postData赋值
//var listJoinArrayParamemter = new List<string>();
//foreach (KeyValuePair<string, object> keyValuePair in arrayPostData)
//{
// listJoinArrayParamemter.Add(string.Format("users[0][{0}]={1}", keyValuePair.Key, keyValuePair.Value));
//}
//var postData = prePostData + "&" + string.Join("&", listJoinArrayParamemter.ToArray()); using (var sw = new StreamWriter(webRequest.GetRequestStream()))
{
sw.Write(postData);
} using (var response = webRequest.GetResponse())
{
var stream = response.GetResponseStream();
if (stream == null) return string.Empty;
using (var sr = new StreamReader(stream))
{
return sr.ReadToEnd();
}
}
}
return string.Empty;
} #endregion #region 多说本地身份说明(JWT) /// <summary>
/// 设置多说本地身份说明(JWT)
/// </summary>
/// <summary>http://dev.duoshuo.com/docs/501e6ce1cff715f71800000d</summary>
/// <param name="secretKey">站点多说密钥</param>
/// <param name="shortName">当前站点注册的多说二级域名</param>
/// <param name="userKey">用户在当前站点中对应的唯一标示,通常是用户ID</param>
/// <param name="name">用户在当前网站的用户名</param>
public void SetLocalJwt(string secretKey, string shortName, string userKey, string name)
{
var array = new Dictionary<string, object>
{
{"short_name", shortName},
{"user_key", userKey},
{"name", name}
};
string token = JsonWebToken.Encode(array, secretKey, JwtHashAlgorithm.HS256);
//cookie设置了一年过期
var cookie = new HttpCookie("duoshuo_token") { Value = token, Expires = DateTime.Now.AddDays() };
HttpContext.Current.Response.Cookies.Add(cookie);
} #endregion }
}

完整源码下载,包含JWT公共类。

多说评论系统API调用和本地身份说明(JWT)的更多相关文章

  1. WHMCS系统API调用

    WHMCS:域名管理系统,现在网络上很多借助此系统Shadowsocks插件+ShadowsocksR多用户服务端进行VPN的售卖,能做到流量控制等. 在对接此系统的API时,我发现了很多功能都已经实 ...

  2. WPF技术触屏上的应用系列(二): 嵌入百度地图、API调用及结合本地数据库在地图上进行自定义标点的实现

    原文:WPF技术触屏上的应用系列(二): 嵌入百度地图.API调用及结合本地数据库在地图上进行自定义标点的实现 去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7操作系 ...

  3. 系统对接API调用

    在与公司外部系统对接时,API接口一般采用REST风格,对外暴露HTTP服务.只需要将入参封装好,并发起HTTP请求即可.具体请求流程如下图所示: 数据格式 API调用参数分为系统参数和业务参数,请求 ...

  4. 某音乐类App评论相关API的分析及SQL注入尝试

    关键字:APIfen.工具使用.sql注入 涉及工具/包:Fiddler.Burpsuite.Js2Py.Closure Compiler.selenium.phantomjs.sqlmap 摘要: ...

  5. hexo next主题深度优化(五),评论系统换成gittalk

    文章目录 背景: 开始: 新建comments_git.js 找到comments.swig在最后一个endif之前 引入代码 pjax加入gitalk 遇到的问题 所有的页面共享的一个评论issue ...

  6. 在Jekyll博客添加评论系统:gitment篇

    最近在Github Pages上使用Jekyll搭建了个人博客( jacobpan3g.github.io/cn ), 当需要添加评论系统时,找了一下国内的几个第三方评论系统,如"多说&qu ...

  7. WP评论系统更换小结(转)

    第三方评论插件 多说 多说是一款追求极致体验的社会化评论框,可以用微博.QQ.人人.豆瓣等帐号登录并评论. 多说具备优质用户体验.速度和稳定性.社会化推荐.建站程序审核整合.垃圾评论过滤等特性. 自定 ...

  8. 【Qt编程】基于Qt的词典开发系列&lt;八&gt;--用户登录及API调用的实现

    在上一篇文章<调用网络API>中,我仅仅讲述了怎样直观的使用API接口以及调用API后返回的结果,本文则从程序实现的角度来实现API的调用.当然本程序的实现也是借助于扇贝网的API接口文档 ...

  9. win10系统架构调用

    操作系统模型 操作系统有两种模式: 用户模式 内核模式 当用户模式调用系统服务时,CPU执行一个特殊的指令以切换到内核模式(Ring0),当系统服务调用完成时,操作系统切换回用户模式(Ring3).  ...

随机推荐

  1. 复选框(checkox)全选、全不选、反选、获得选中项值的用例

    HTML部分: <div class="all"> <ul> <li><input type="checkbox" v ...

  2. iOS 根据银行卡号判断银行名称

    如何根据银行卡号判断银行名称? + (NSString *)getBankName:(NSString*) cardId{ //"发卡行.卡种名称", NSArray* bankN ...

  3. Touch ID使用

    前言:如果图片看不了请移步:简书 Touch ID简介 Touch ID指纹识别作为iPhone 5s上的"杀手级"功能早已为人们所熟知,目前搭载的设备有iphone SE.iPh ...

  4. ios 开发之单例模式

    在iOS开发中,有很多地方都选择使用单例模式.有很多时候必须要创建一个对象,并且不能创建多个,用单例就为了防止创建多个对象.单例模式的意思就是某一个类有且只有一个实例.单例模式确保某一个类只有一个实例 ...

  5. listview的ViewHolder优化

    1.自定义listview,首先在activity.xml中插入一个listview,可以用android:divider=""设置分割线颜色样式,android:dividerH ...

  6. Hadoop学习

    Hadoop: 大数据里面的公认的解决方案标准 链接推荐:http://www.powerxing.com/install-hadoop/ 第一天 Hadoop的基本概念 伪分布式集群安装 hdfs ...

  7. SQLite学习笔记(七)&&事务处理

    说到事务一定会提到ACID,所谓事务的原子性,一致性,隔离性和持久性.对于一个数据库而言,通常通过并发控制和故障恢复手段来保证事务在正常和异常情况下的ACID特性.sqlite也不例外,虽然简单,依然 ...

  8. QT210 android2.3 和android4.0 烧写编译日记

    QT210下载烧录编译android2.3过程 工作环境:ubuntu12.04.5 | QT210开发板光盘 | QT210开发板 android2.3编译环境:gcc version 4.4.7  ...

  9. Comparison of SQL Server Compact, SQLite, SQL Server Express and LocalDB

    Information about LocalDB comes from here and SQL Server 2014 Books Online. LocalDB is the full SQL ...

  10. MMORPG大型游戏设计与开发(服务器 游戏场景 搜索机)

    双十一注定是忙碌的日子,所以到了现在我才将今天自己学习的内容拿出来跟大家分享.搜索机是我自己暂时取的名字,其实简单的说就是场景里提供搜索的一个工具,负责场景对象的范围搜索和获取.空洞的理论总是让人一头 ...