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


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

主题:钉钉接口

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


加好友 发短信
等级:三尾狐 帖子:641 积分:5194 威望: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

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


加好友 发短信
等级:超级版主 帖子:106017 积分:539172 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/2/25 20:52:00 [只看该作者]

如果在回调里处理,和按钮的代码没有半毛钱的关系。

msgbox(res) '根据接收的解密的内容进行后续处理

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


加好友 发短信
等级:三尾狐 帖子:641 积分:5194 威望: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

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


加好友 发短信
等级:超级版主 帖子:106017 积分:539172 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/2/25 21:28:00 [只看该作者]

如果在回调里处理,和按钮的代码没有半毛钱的关系

res就是接收的数据,根据接收数据进行后续处理
Dim xo As JObject = JObject.Parse(res)
    Select Case xo("EventType")
       Case "org_dept_modify"
   If xo("DeptId") IsNot Nothing Then
Dim dt As DataRow = DataTables("department").SQLFind("outid =  '" & xo("DeptId").tostring & "'")
If dt IsNot Nothing Then
        dt("departname") = xo("name").tostring
        dt("xxx列") = xo("xxx名称").tostring
        dt.Save
End If

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


加好友 发短信
等级:三尾狐 帖子:641 积分:5194 威望: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编辑过]

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


加好友 发短信
等级:超级版主 帖子:106017 积分:539172 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/2/25 22:55:00 [只看该作者]

哦,如果是这样的结果,倒是应该是调用原来的按钮的那段代码重新获取部门详情,就是71楼的代码,调试一下看是那一句代码出错,以后有问题的时候建议先自行调试,定位到错误的语句

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


加好友 发短信
等级:三尾狐 帖子:641 积分:5194 威望:0 精华:0 注册:2018/5/19 22:27:00
  发帖心情 Post By:2021/2/26 7:11:00 [只看该作者]

谢谢,老师。其实我这边对71楼的代码反复调试已经有50多次了。
蓝色代码,我专门做了个按钮,去单独调取一个DeptId的详情,并更新到数据库。都是可以的;
71楼代码去掉蓝色代码,获取res的解密信息也是正常的;
但就是两个代码放到一起提升“未将对象引用设置到对象的实例 ”
通过几十次的调试定位,发现是  msgbox(rsp.result.DeptId) 、 msgbox(rsp.result.name)  的值不存在提示的报错。
但不知道为啥就rsp.result到了回调程序就没有值了?
或者说下面代码没有执行:
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)   ‘msgbox(access_token)也是正常的
Dim t As String  = rsp.result.DeptId

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


加好友 发短信
等级:三尾狐 帖子:641 积分:5194 威望:0 精华:0 注册:2018/5/19 22:27:00
  发帖心情 Post By:2021/2/26 7:46:00 [只看该作者]

老师:服务端发布后,单独下方代码在我自己的电脑上,可以正常执行;同样的程序,放到服务器上,也用按钮更新,就报错“未将对象引用设置到对象的实例” ,不仅是这个代码,而且之前对人员等更新的按钮(钉钉服务端API做的接口)同样的问题;
Dim r As Row = Tables("conip").Rows(0)  
Dim access_token As String = Functions.Execute("access_token",r("appkey"),r("appsecret"))   
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
老师是不是服务器端,什么端口或设置没开导致的?
[此贴子已经被作者于2021/2/26 7:47:55编辑过]

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


加好友 发短信
等级:超级版主 帖子:106017 积分:539172 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/2/26 9:02:00 [只看该作者]

发布一个客户端放到服务器运行,执行上面的代码有没有问题?

web服务端回调调试下面代码
Dim rsp As DingTalk.Api.Response.OapiV2DepartmentGetResponse = client.Execute(req, access_token)
msgbox(rsp is nothing)
msgbox(rsp.errmsg)
msgbox(rsp.result is nothing)
Dim t As String  = rsp.result.DeptId

[此贴子已经被作者于2021/2/26 9:02:45编辑过]

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


加好友 发短信
等级:四尾狐 帖子:855 积分:6402 威望:0 精华:0 注册:2017/11/21 21:31:00
  发帖心情 Post By:2021/7/30 22:16:00 [只看该作者]

请问楼主,你的问题解决了吗?能分享一下你的经验吗?QQ:369538608 谢谢!

 回到顶部
总数 81 上一页 1 2 3 4 5 6 7 8 9 下一页