Foxtable(狐表)用户栏目专家坐堂 → 钉钉接口


  共有11572人关注过本帖树形打印复制链接

主题:钉钉接口

帅哥哟,离线,有人找我吗?
weibu
  31楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:636 积分:5153 威望:0 精华:0 注册:2018/5/19 22:27:00
  发帖心情 Post By:2021/2/24 17:26:00 [显示全部帖子]

        Dim po As New JObject           
po("signature") = cstr(msg("msg_signature"))
msgbox(po("signature")) '正常显示
            po("timeStamp") = cstr(msg("timeStamp"))
msgbox(po("timeStamp")) '正常显示
            po("nonce") = cstr(msg("nonce"))
msgbox(po("nonce")) '正常显示
            po("encrypt") = cstr(msg("encrypt"))
msgbox(po("encrypt")) '正常显示
            e.WriteString(po.ToString) '返回success的加密数据    
msgbox(po.ToString) '正常显示   

但钉钉配置页面点击保存报错提示:为:java.net.SocketTimeoutException: Read timed out                          H 'Content-Type:application/json' HttpCode:0 HttpReponse:null

 回到顶部
帅哥哟,离线,有人找我吗?
weibu
  32楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:636 积分:5153 威望:0 精华:0 注册:2018/5/19 22:27:00
  发帖心情 Post By:2021/2/24 17:30:00 [显示全部帖子]

{

  "signature": "6da7abe669e5619f8a9099b9dd62613ab3520f32",

  "timeStamp": "79",

  "nonce": "jvjJmKsT1oILm6uK",

  "encrypt": "zFgIsCNuFsc5axbOHl9LkTupIW6jD5DuHJ7L9Bi/AxF4co1JusDxixJuDwUUO8Yjm625J3LBiZE07lM3qG9sPA=="

}
这是msgbox(po.ToString) '正常显示 的内容

 回到顶部
帅哥哟,离线,有人找我吗?
weibu
  33楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:636 积分:5153 威望:0 精华:0 注册:2018/5/19 22:27:00
  发帖心情 Post By:2021/2/24 17:57:00 [显示全部帖子]

全部msgbox去掉提交报错:
HTTP请求结果校验返回字段值失败 HttpRequest: curl                        Content-Type:application/json' HttpCode:200 HttpReponse:
[此贴子已经被作者于2021/2/24 18:51:56编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
weibu
  34楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:636 积分:5153 威望:0 精华:0 注册:2018/5/19 22:27:00
  发帖心情 Post By:2021/2/25 14:09:00 [显示全部帖子]

蓝老师,调通了。谢谢。下面是修改多次的成功代码:

Select Case e.path 
   Case "web"      
            Dim token = "Token" '必须和设置的Token相同          
            Dim signature As String = e.GetValues("signature")  
            Dim timestamp As String = e.GetValues("timestamp")         
            Dim nonce As String = e.GetValues("nonce")          
           Dim encrypt As String = e.PlainText  
            Dim jo As JObject = JObject.Parse(encrypt )
            Dim ding As new DingTalkEncryptor("Token", "Token", "CorpId")
            Dim res As String = ding.getDecryptMsg(signature , timestamp, nonce , jo("encrypt"))
            '其它处理
            Dim msg  = ding.getEncryptedMap("success")
            Dim po As New JObject           
            po("msg_signature") = cstr(msg("msg_signature"))
            po("timeStamp") = cstr(msg("timeStamp"))
            po("nonce") = cstr(msg("nonce"))
            po("encrypt") = cstr(msg("encrypt"))
            e.WriteString(po.ToString) '返回success的加密数据        
End Select

现在我这边想钉钉上修改了部门,我的系统同步更新修改的部门,该怎么写代码?
我的逻辑是通过事件订阅取到哪些DeptId修改了,然后利用服务端API的端口更新方式获取修改了的部门详情,并更新到自己的系统;

下面是通过API获取部门详情并更新到自己系统的代码;但如何获取是哪些DeptId修改了?这个代码加在哪里?如何写?
Dim TX1 As WinForm.TextBox = e.Form.Controls("TextBox1")
Dim TX2 As WinForm.TextBox = e.Form.Controls("TextBox2")
Dim access_token As String = Functions.Execute("access_token",TX1.TEXT,TX2.TEXT)

Dim client As DingTalk.Api.IDingTalkClient = New DingTalk.Api.DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub")
Dim req As DingTalk.Api.Request.OapiV2DepartmentListsubRequest = New DingTalk.Api.Request.OapiV2DepartmentListsubRequest()
req.SetHttpMethod("POST")
Dim rsp As DingTalk.Api.Response.OapiV2DepartmentListsubResponse = client.Execute(req, access_token)
For i As Integer = 0 To rsp.result.count -1 
Dim s As String  = rsp.result.Item(I).DeptId
Dim dt As DataRow = DataTables("表A").Find("id =  '" & s & "'")
If dt Is Nothing Then
Dim dr As DataRow= DataTables("表A").AddNew()
        dr("id") = rsp.result.Item(I).DeptId
        dr("name") = rsp.result.Item(I).name
        dr("parentid") = rsp.result.Item(I).parentid
        dr.Save
Else
        dt("name") = rsp.result.Item(I).name
        dt("parentid") = rsp.result.Item(I).parentid
        dt.Save
End If
Next

 回到顶部
帅哥哟,离线,有人找我吗?
weibu
  35楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:636 积分:5153 威望:0 精华:0 注册:2018/5/19 22:27:00
  发帖心情 Post By:2021/2/25 14:35:00 [显示全部帖子]

这种到按钮处理即可
老师您说的意思是,手动更新部门变动吗?
不自动更新?

 回到顶部
帅哥哟,离线,有人找我吗?
weibu
  36楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:636 积分:5153 威望:0 精华:0 注册:2018/5/19 22:27:00
  发帖心情 Post By:2021/2/25 16:10:00 [显示全部帖子]

老师这个怎么修改?毫秒要除1000变为秒。但执行预计报错
编译错误:没有为类型“Newtonsoft.Json.Linq.JToken”和“Integer”定义运算符“/”。
错误代码:dr("第七列") = st.AddSeconds(xo("TimeStamp")/1000)



 回到顶部
帅哥哟,离线,有人找我吗?
weibu
  37楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:636 积分:5153 威望:0 精华:0 注册:2018/5/19 22:27:00
  发帖心情 Post By:2021/2/25 17:03:00 [显示全部帖子]

---------------------------
错误
---------------------------
编译错误:未声明“clog”。它可能因其保护级别而不可访问。
错误代码:dr("第七列") = st.AddSeconds(clog(xo("TimeStamp"))/1000)



 回到顶部
帅哥哟,离线,有人找我吗?
weibu
  38楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:636 积分:5153 威望:0 精华:0 注册:2018/5/19 22:27:00
  发帖心情 Post By:2021/2/25 20:14:00 [显示全部帖子]

Select Case e.path 
   Case "web"           
Dim token = "token" '必须和设置的Token相同          
Dim signature As String = e.GetValues("signature")
Dim timestamp As String = e.GetValues("timestamp")          
Dim nonce As String = e.GetValues("nonce")
Dim st As New Date(1970,1,1,8,0,0)  
 
Dim r As Row = Tables("conip").Rows(0)  
Dim access_token As String = Functions.Execute("access_token",r("appkey"),r("appsecret"))   

Dim encrypt As String = e.PlainText  
Dim jo As JObject = JObject.Parse(encrypt )
Dim ding As new DingTalkEncryptor("Token", "Token", "CorpId")
Dim res As String = ding.getDecryptMsg(signature , timestamp, nonce , jo("encrypt"))        ' msgbox(res) '显示解密的事件内容
'其它处理
  
 
Dim msg  = ding.getEncryptedMap("success")
Dim po As New JObject           
po("msg_signature") = cstr(msg("msg_signature"))
po("timeStamp") = cstr(msg("timeStamp"))
po("nonce") = cstr(msg("nonce"))
po("encrypt") = cstr(msg("encrypt"))
e.WriteString(po.ToString) '返回success的加密数据    
msgbox(po.ToString) '能正常显示信息

Dim xo As JObject = JObject.Parse(res)
    Select Case xo("EventType")
       Case "org_dept_modify"
   If xo("DeptId") IsNot Nothing Then
For i As Integer = 0 To xo("DeptId").count -1
Dim s As String  =  xo("DeptId")(i)
msgbox(xo("DeptId")(i)) '能正常显示信息

'老师下面蓝色字体代码,我放在按钮上单独测试,是能够执行并更新软件数据,
’但放在这个一整体代码中报错错误所在事件:项目,HttpRequest
详细错误信息:
未将对象引用设置到对象的实例
反复测试了N次,也没找到原因
Dim client As DingTalk.Api.IDingTalkClient = New DingTalk.Api.DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/get")
Dim req As DingTalk.Api.Request.OapiV2DepartmentGetRequest = New DingTalk.Api.Request.OapiV2DepartmentGetRequest()
req.SetHttpMethod("POST")
req.DeptId = s
Dim rsp As DingTalk.Api.Response.OapiV2DepartmentGetResponse = client.Execute(req, access_token)
Dim t As String  = rsp.result.DeptId
Dim dt As DataRow = DataTables("department").SQLFind("outid =  '" & t & "' and companyid =  '" & r("companyid") & "'")
If dt IsNot Nothing Then
        dt("departname") = rsp.result.name
        dt("outparentid") = rsp.result.parentid
        dt("isohas") = True
        dt.Save
End If
Next  
    End If
    End Select  
     
End Select

 回到顶部
帅哥哟,离线,有人找我吗?
weibu
  39楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:636 积分:5153 威望:0 精华:0 注册:2018/5/19 22:27:00
  发帖心情 Post By:2021/2/25 21:17:00 [显示全部帖子]

Select Case e.path 
   Case "web"           
Dim token = "token" '必须和设置的Token相同          
Dim signature As String = e.GetValues("signature")
Dim timestamp As String = e.GetValues("timestamp")          
Dim nonce As String = e.GetValues("nonce")
Dim st As New Date(1970,1,1,8,0,0)  
 
Dim r As Row = Tables("conip").Rows(0)  
Dim access_token As String = Functions.Execute("access_token",r("appkey"),r("appsecret"))   

Dim encrypt As String = e.PlainText  
Dim jo As JObject = JObject.Parse(encrypt )
Dim ding As new DingTalkEncryptor("Token", "Token", "CorpId")
Dim res As String = ding.getDecryptMsg(signature , timestamp, nonce , jo("encrypt"))        ' msgbox(res) '显示解密的事件内容
'其它处理    老师您的意思是把代码放在这个位置吗?还是不行。我刚开始就是放在的,不行才改的。
Dim xo As JObject = JObject.Parse(res)
    Select Case xo("EventType")
       Case "org_dept_modify"
   If xo("DeptId") IsNot Nothing Then
For i As Integer = 0 To xo("DeptId").count -1
Dim s As String  =  xo("DeptId")(i)
msgbox(xo("DeptId")(i)) '能正常显示信息

Dim client As DingTalk.Api.IDingTalkClient = New DingTalk.Api.DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/get")
Dim req As DingTalk.Api.Request.OapiV2DepartmentGetRequest = New DingTalk.Api.Request.OapiV2DepartmentGetRequest()
req.SetHttpMethod("POST")
req.DeptId = "405604121"
Dim rsp As DingTalk.Api.Response.OapiV2DepartmentGetResponse = client.Execute(req, access_token)
Dim t As String  = rsp.result.DeptId
Dim dt As DataRow = DataTables("department").SQLFind("outid =  '" & t & "' and companyid =  '" & r("companyid") & "'")
If dt IsNot Nothing Then
        dt("departname") = rsp.result.name
        dt("outparentid") = rsp.result.parentid
        dt("isohas") = True
        dt.Save
End If
Next  
    End If
    End Select   
 
Dim msg  = ding.getEncryptedMap("success")
Dim po As New JObject           
po("msg_signature") = cstr(msg("msg_signature"))
po("timeStamp") = cstr(msg("timeStamp"))
po("nonce") = cstr(msg("nonce"))
po("encrypt") = cstr(msg("encrypt"))
e.WriteString(po.ToString) '返回success的加密数据    
msgbox(po.ToString) '显示解密的事件内容       
End Select

 回到顶部
帅哥哟,离线,有人找我吗?
weibu
  40楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:636 积分:5153 威望:0 精华:0 注册:2018/5/19 22:27:00
  发帖心情 Post By:2021/2/25 22:17:00 [显示全部帖子]

Dim dt As DataRow = DataTables("department").SQLFind("outid =  '" & xo("DeptId").tostring & "'")
msgbox(xo("DeptId").tostring) '这个显示的是个列表格式的,如下方:

[

  405604121

]
所以上方的SQLfind语句根本找不到对应行。

这是res的内容{"CorpId":"dingfa827a6cb783455b","EventType":"org_dept_modify","DeptId":[405604121],"TimeStamp":"1614234917980"}   老师里面没有name啊?
我必须根据DeptId,再通过钉钉服务api去按DeptId调取部门详细信息,才能找到部门名称等信息,进行更新吧?
[此贴子已经被作者于2021/2/25 22:33:59编辑过]

 回到顶部
总数 43 上一页 1 2 3 4 5 下一页