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


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

主题:钉钉接口

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


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

老师是跟在客户端建立web数据源一样吗?这个我会弄;
但这个url就是web数据源中的
客户端数据链接:
http://41.13.232.56:6808/DataServer.htm  ‘URL就是这个吗?
-FormD5ata-

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


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

老师能给我说下建立在服务端建立http服务的方法步奏吗?

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


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

编辑完请求地址,单击保存按钮时,开放平台会向你配置的网址推送一个 application/json 格式的 POST 请求, 用于验证你配置的网址的合法性。请求如下:

{
    "encrypt": "ajls384kdjx98XX" // 加密字符串,解密方法请看下方的消息加解密
}

当你收到开放平台的POST验证请求时,你需要做解密处理,并在1500ms内返回包含success的加密字符串给钉钉,否则钉钉服务器将认为url不合法。


老师这个代码该如何写啊?

Select Case e.path

    Case "web" 

        If e.Request.HttpMethod = "GET" Then

            Dim token = "liO93UqdEcOwpu4Sy9rYS9gT09Ktyqve1u" '必须和设置的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.GetValues("encrypt")

            Dim aryTmp() As String = {token,timestamp,nonce}

            Array.Sort(aryTmp)

            Dim strTmp As String = String.Join("", aryTmp)

            strTmp = Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strTmp, "khtbRfeKOxpSK5bDF94tpQssViqhOCUV5ObavW")       '这个我写的是aes_key

            If signature = strTmp.ToLower() Then

                e.WriteString(encrypt)

            End If

        End If

End Select


老师这是在 httprequest中写的代码,保存是报错。提示:

HTTP请求结果校验返回字段值失败 HttpRequest: curl 'http://29.60.17.116:6807/web/?signature=2c7f51416e5915e217e4a2837560da0c4&msg_signature=2c7f51416915e2c7e54c7560da0c4&timestamp=1614040020384&nonce=76gxOJzi' -d '{"encrypt":"QlzyVA1wOPI3PJM/k2OwVyYL9C/thbWRDWnJIPacc6dasvGrv7mQKmrPtI10lH/M5/P7Htl57VtiukahLKoPYnJQ4wC2J/kPKg5SlOjRGNhzpwLmjajeAt5P"}' -H 'Content-Type:application/json' HttpCode:200 HttpReponse:

[此贴子已经被作者于2021/2/23 8:44:58编辑过]

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


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

万分感谢蓝老师。
我做了两步:1.建立全局变量DingTalkEncryptor;并把文档的代码全部复制到里面;重启狐表;
                2.把httprequst事件修改如下;但报错下面代码报错


图片点击可在新窗口打开查看此主题相关图片如下:错误123214.png
图片点击可在新窗口打开查看

Select Case e.path 
    Case "web"       
        If e.Request.HttpMethod = "GET" Then        
            Dim token = "QoXd8egwbB" '必须和设置的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.PostValues("encrypt") '如果接收不到试试:Dim encrypt As String = e.PlainText       
            Dim jo As JObject = JObject.Parse(encrypt )
            Dim ding As new DingTalkEncryptor("token:QoXd8ewbB", "encodingAesKey:TMjDLyrHDTfCMLr4SyiJNJt9oqY02Tymnl9A6eXvv", "corpId:dingdb4f9d27f74502f6a9a97fcb1e09")
            Dim res As String = ding.getDecryptMsg(signature , timestamp, nonce , encrypt)
            msgbox(res) '显示解密的事件内容
            '其它处理
            e.WriteString(ding.getEncryptedMap("success")) '返回success的加密数据          
        End If     
End Select

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


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

老师代码修改为:下面代码

还是报错:HTTP请求结果校验返回字段值失败 HttpRequest: curl 

Select Case e.path 
    Case "web"       
        If e.Request.HttpMethod = "GET" Then        
            Dim token = "QoXdbB" '必须和设置的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.PostValues("encrypt") '也试过:Dim encrypt As String = e.PlainText       
            Dim j As JObject = JObject.Parse(encrypt )
            Dim ding As new DingTalkEncryptor("token:QoXdbB", "encodingAesKey:TMjDLyrHDTfCMLr4Syi2Tymnl9A6eXvv", "corpId:dingdb4fa1e09")
            Dim res As String = ding.getDecryptMsg(signature , timestamp, nonce , encrypt)
            msgbox(res) '显示解密的事件内容
            '其它处理
           dim msg  = ding.getEncryptedMap("success")
             Dim jo As New JObject
             jo("signature") = msg("signature")   msg_signature修改为signature
            jo("timeStamp") = msg("timeStamp")
           jo("nonce") = msg("nonce")
           jo("encrypt") = msg("encrypt")
            e.WriteString(jo.ToString) '返回success的加密数据          
        End If     
End Select

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


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

老师我修改了代码还是一样;
Select Case e.path 
    Case "web"       
        If e.Request.HttpMethod = "GET" Then        
            Dim token = "eCIFS6iS3i9ACCcGBq" '必须和设置的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.PostValues("encrypt")
            Dim jo As JObject = JObject.Parse(encrypt )
            Dim ding As new DingTalkEncryptor("eCIFS6iS3i9ACC0PcGBq", "xlfwRsEMmY9wX2EJGKwAUTIx31oi9Koa", "dingdb4f91e09")
            Dim res As String = ding.getDecryptMsg(signature , timestamp, nonce , encrypt)
            msgbox(res) '显示解密的事件内容
                    '其它处理
            Dim msg  = ding.getEncryptedMap("success")
            Dim po As New JObject
            po("signature") = msg("signature")
            po("timeStamp") = msg("timeStamp")
            po("nonce") = msg("nonce")
            po("encrypt") = msg("encrypt")
            e.WriteString(po.ToString) '返回success的加密数据         
        End If     
End Select
我这个服务端程序,除了上面的两段代码。就是开启服务在AfterOpenProject加了下面代码:
HttpServer.Prefixes.Add("http://*:8808/")
HttpServer.WebPath = "c:\web"
HttpServer.Start()

把这个程序发布后,放在服务器上。打开程序。然后点击钉钉的保存按钮。HTTP请求结果校验返回字段值失败 HttpRequest: curl    ;服务器端系统也没有msgbox弹出;
[此贴子已经被作者于2021/2/23 18:50:57编辑过]

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


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

蓝老师:钉钉回调我感觉支持任意端口,回调地址:http://39.100.1**.1*6:8808/web/     是阿里云服务器。外网可以访问;
我把服务器端的服务停止;再点击保存按钮。钉钉代码:url地址访问异常,错误原因为:org.apache.http.conn.HttpHostConnectException: Connect to 39.100.1**.1*6:8808 [39.100.1**.1*6/39.100.1**.1*6] failed: 拒绝连接     ;开启服务提示HTTP请求结果校验返回字段值失败 HttpRequest: curl   这说明服务是通的吧?

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


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

老师我明天问下钉钉客服;
但现在我是服务停止后,报错拒绝链接 ;
服务开始,报错结果校验失败;
还有老师刚刚我测试http://39.100.1**.1*6:8808/web/  ;   去掉8808后面的web仍然提示:结果校验失败;老师这个/web到底啥意思?需要做啥配置吗?


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


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

去掉这个代码:if e.Request.HttpMethod = "GET" Then后
点击钉钉的保存配置按钮,服务器的服务端提示这个;
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.5.29.8
错误所在事件:项目,HttpRequest
详细错误信息:
值不能为 null。
参数名: s
[此贴子已经被作者于2021/2/23 22:38:37编辑过]

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


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

 老师上面37楼报错的信息的服务端是这个Dim encrypt As String = e.PostValues("encrypt")  
修改为:Dim encrypt As String = e.PlainText  服务器提示报错:.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.5.29.8
错误所在事件:项目,HttpRequest
详细错误信息:
签名计算失败

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