浙政钉 政务钉钉 专有钉钉 SDK 用.NET(C#)编写

本文介绍了如何使用C#语言按照政务钉钉的接口文档,自行开发SDK,包括HTTP请求的构成、签名计算方法以及GET、POST方法的示例,同时提供了遇到问题时的解决方案和调试建议。
摘要由CSDN通过智能技术生成

    最近朋友需要做个政务钉钉的接口,研究后发现没有现成的C#的SDK,于是我们按钉钉接口文档自行编写SDK。

如下政务钉钉的SDK文档:

HTTP Request构成说明

HTTP Request URL

访问API的URL由以下方式构成:

https://{openplatform-domain}/<operation>

  • 其中:operation 业务开发配置暴露的api name,大小写敏感。
    api url要求必须是https

如下所示的URL是根据工号查询人员帐号信息, 请求的目标URL:

https://openplatform.dg-work.cn/rpc/enhancedUserQuery/getUserByEmpId.json

HTTP Request Header

API规定HTTP请求的Header必须包含以下信息:

  • X-Hmac-Auth-IP
    用户的IP地址
  • X-Hmac-Auth-MAC
    用户的MAC地址
  • X-Hmac-Auth-Timestamp
    请求发出时间,使用UTC时间,ISO8601格式为"yyyy-MM-ddTHH:mm:ss.sss+08:00"
  • X-Hmac-Auth-Version
    API的版本号,版本号目前值为1.0
  • X-Hmac-Auth-Nonce
    API的nonce,建议使用13位时间毫秒数 + 4位随机数
  • apiKey
    应用的appkey
  • X-Hmac-Auth-Signature

    请求的签名。签名计算方法如下:

    1.获取签名字符串的字节数组:请求Method+'\n'+请求Header中的Timestamp+'\n'+请求Header中的Nonce+'\n'+请求的的URL(不带域名)+'\n'+请求参数

    2.HmacSha256(SecretKey,签名字符串字节数组)

    3.对第二步结果使用Base64,得到签名结果

  • 伪代码中使用到的函数的说明:

      HmacSha256 - Hmac-Sha256加密算法

   计算请求签名时请将StringToSign作为消息,

   SecretKey作为密钥。            

 * base64 - base64 编码算法

 * HTTPRequestMethod

   HTTP请求方法,如GET、POST或PUT等,

   HTTP API只支持GET/POST方法。注意GET/POST需要大写。

 * HttpRequestHeaderTimestamp

   HTTP Request header中X-Hmac-Auth-Timestamp值

 * HttpRequestHeaderNonce

   HTTP Request Header中X-Hmac-Auth-Nonce值。

 * CanonicalURI

   HTTP URL中的路径部分,如"https://openplatform.dg-work.cn/rest/enhancedUserQuery/getUserByEmpId"中,

   CanonicalURI 为"/rest/enhancedUserQuery/getUserByEmpId"。

 * HttpRequestParams

   HTTP中POST和GET的参数,对其排序,忽略大小写的字典序排列。

   然后组装key1=value1&key2=value2。

   注意:如果出现类似key=value2&key=value1&key=value3时情况,请对值列表排序(升序),

        变成key=value1&key=value2&key=value3。

HTTP Response

HTTP Response Content

返回格式

{"_RequestId":"6D26836F-D51C-4716-9340-94C734B2F2BF",xxxx:xxx}

API Server会对HTTP请求进行验证:

• 验证请求头中包含的签名是否正确

• 验证X-Hmac-Auth-Timestamp包含的时间与服务器时间相差小 于15分钟,若认证未通过,Server会直接返回身份认证错误。

FAQ

  • 如果出现tengine返回的400错误,提示:Your browser sent a request that this server could not understand.
    请检查先你的pom依赖,是不是有低版本的commons-codec,请exclude掉。
    原因是由于低版本的commons-codec的base64出来的字符串多了\r\n导致http报错格式错误。
  • 上线前,请先你的线上机器确定网络是可以curl https://openplatform.dg-work.cn
  • 签名报错,返回:SignatureDoesNotMatch
    请检查下自己的apiKey是否正确
    如果非java的客户端,检查下自己的参数是否按照升序排序
    如果参数是中文,签名时,中文参数不要encode,传参数时要url encode

在按上面文档写好SDK后,GET方法 以“查询组织下人员详情”为例

查询组织下人员详情

接口说明

查询组织下人员详情,包含个人信息和任职信息(为了保证查询效率,分页查询接口控制返回一万条数据)

调试

API Explorer中调试该接口。

基本信息

中文名:查询组织下人员详情

接口名:/mozi/organization/pageOrganizationEmployeePositions

所在目录:获取通讯录用户信息

调用方式:GET(HTTPS)

请求参数

名称

类型

是否必填

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值