Foxtable(狐表)用户栏目专家坐堂 → 工资推送企业微信时遇到的问题


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

主题:工资推送企业微信时遇到的问题

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


加好友 发短信
等级:四尾狐 帖子:801 积分:7697 威望:0 精华:0 注册:2015/9/14 14:26:00
工资推送企业微信时遇到的问题  发帖心情 Post By:2020/12/14 15:57:00 [只看该作者]

参考论坛中的源码 在做相应的学习和测试
实现工资条推送到企业微信
下面是 推送微信的代码
Dim wzc As new List(of String)
Dim xms As new List(of String) '注册
For Each dr As Row In Tables("职工工资发放明细表").Rows
    Dim dt As DataRow = DataTables("员工花名册").SQLFind("身份证号 = '"& dr("身份证号") &"' And 微信权限 = 1 And 企业微信号ID <>''")
    If dt IsNot Nothing Then
     
        wzc.Add(dt("企业微信号id"))
        xms.add(dt("姓名"))
    End If
Next

Dim users As String
For Each userid As String In wzc
    users = users & "|" & userid
Next
Dim all As String = users.Remove(0,1)

Dim xm As String
For Each x As String In xms
    xm = xm & "|" & x
Next
Dim xinm As String = xm.Remove(0,1)
 
Dim tt As WinForm.TextBox = e.Form.Controls("TextBox1")
Dim fy As WinForm.TextBox = e.Form.Controls("TextBox2")
Dim ur As String = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={0}"

Dim hc As new HttpClient(Cexp(ur,Functions.Execute("GetQYAccessToken2")))
 
Dim jo As New JObject
Dim ja As New JArray
jo("touser") =all
jo("msgtype") = "textcard"
Dim yyid As Integer = Vars("yyid")
jo("agentid") = yyid
jo("textcard") = New JObject
jo("textcard")("title") = tt.Text
jo("textcard")("description") = fy.Text
Dim yyzy As String = Vars("yyzy") &"/Remuneration/"
jo("textcard")("url") = yyzy
 
hc.Content = jo.ToString
jo = JObject.Parse(hc.GetData)

If jo("errcode") = "0" Then
    MessageBox.show("消息发送成功!,已将通知信息发送至:" & chr(13) & xinm)
Else
    MessageBox.show(jo.ToString)
End If

下面是服务端的代码

Dim fl As String = "d:\web\" & e.Path
If filesys.FileExists(fl)
    Dim idx As Integer = fl.LastIndexOf(".")
    Dim ext As String  = fl.SubString(idx)
    Select Case ext
        Case ".jpg",".gif",".png",".bmp",".wmf",".js",".css" ,".html",".htm",".zip",".rar"
            e.WriteFile(fl)
            Return '这里必须返回
    End Select
End If
  
 
Select Case e.path
    Case "Remuneration"  '工资信息

        '       Dim e As RequestEventArgs = args(0)
        Dim UserId As String
        Dim UserName As String
        Dim sb As New StringBuilder
        sb.AppendLine("<meta name='viewport' c>")
        If e.GetValues.ContainsKey("code") Then '如果通过授权链接跳转而来,就根据传递过来的code参数调用接口,获取用户的UserId
            'MessageBox.Show("通过授权链接进入")
            Dim ul As String  = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={0}&code={1}"
            ul = CExp(ul,Functions.Execute("GetQYAccessToken"),e.GetValues("code"))
            Dim hc As new HttpClient(ul)
            Dim jo As JObject = JObject.Parse(hc.GetData)
            If jo("UserId") IsNot Nothing Then
                UserId = jo("UserId")
Else
MessageBox.Show("meiyou")
                'MessageBox.Show("通过授权链接包含信息:" & userid)
            End If
        Else
            UserId = e.Cookies("userid") '否则从cookie中提取userid
            'MessageBox.Show("通过cookies获取:" & userid)
        End If
        Dim Verified As Boolean
        Dim drc As DataRow = DataTables("员工花名册").SQLFind("企业微信号ID ='" & UserId & "'") '根据openid找出对应的行
        If UserId  > "" AndAlso drc IsNot Nothing  AndAlso drc("微信权限") = True '授权成功
            Verified  = True
            UserName = drc("姓名")
            e.AppendCookie("userid",UserId) '将userid和username存储在Cookie中
            
        ElseIf e.GetValues.ContainsKey("code") = False Then '如果授权失败,且不是通过授权链接跳转而来,那么就跳转到授权链接
            'MessageBox.Show("跳转授权链接" & userid)
            Dim ul As String = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&agentid={2}&state=STATE#wechat_redirect"
            Dim ul2 As String = UrlEncode(Vars("yyzy"))
            ul = CExp(ul,Vars("qyid"),ul2,Vars("yyid"))
            'Dim ul As String = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww8bbc1c6c7bd8a2e7&redirect_uri=http%3a%2f%2fgz.crucg.top%3a8090%2fRemuneration&response_type=code&scope=snsapi_base&agentid=1000002&state=STATE#wechat_redirect"
            sb.Append("<meta http-equiv='Refresh' c>") '跳转到授权链接%3a8090
            e.WriteString(sb.ToString)
            Return
        End If
        If Verified = False Then
            'MessageBox.Show("授权不通过:" & userid)
            sb.AppendLine("你无权访问本系统")
        Else
            'MessageBox.Show("通过,进入主页")
            'MessageBox.Show("授权成功")
            e.WriteString("<meta http-equiv='Refresh' c>")
            '    sb.AppendLine("欢迎" & UserName & "同志使用本系统,授权成功!请" & " , <a href='http://www.crucg.top/Remuneration2'>刷新页面后进去</a>")
        End If
        e.WriteString(sb.ToString)
        
    Case "Remuneration2"
        If e.Cookies.ContainsKey("userid") =False Then
            e.WriteString("非法访问")
            Return
        End If
        e.AsyncExecute = True
        Functions.AsyncExecute("Remuneration2",e)
    Case "mx"
        If e.Cookies.ContainsKey("userid") =False Then
            e.WriteString("非法访问")
            Return
        End If
        e.AsyncExecute = True
        Functions.AsyncExecute("mx",e)
    Case "order.xls"
        If e.Cookies.ContainsKey("userid") =False Then
            e.WriteString("非法访问")
            Return
        End If
        e.AsyncExecute = True
        Functions.AsyncExecute("CreateXLS",e)
    Case "tongji"
        If e.Cookies.ContainsKey("userid") =False Then
            e.WriteString("非法访问")
            Return
        End If
        e.AsyncExecute = True
        Functions.AsyncExecute("tongji",e)
    Case "tongjit"
        If e.Cookies.ContainsKey("userid") =False Then
            e.WriteString("非法访问")
            Return
        End If
        e.AsyncExecute = True
        Functions.AsyncExecute("tongjit",e)
End S elect

可以成功推送到企业微信,但点开推送消息 总是空白页面,地址是
http://admgz.yogi.com.cn:3333/?code=BZCV6ZOzC9Uu9ksI7oG2KhPfl1NV8cltbEX9JWC5j0Q&state=STATE

我已经把admgz.yogi.com.cn:3333 设置成了可信域名
实在不理解 为什么 推送后 打开的页面是空白的,好像是少了个 参数




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


加好友 发短信
等级:超级版主 帖子:110669 积分:563259 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/12/14 16:12:00 [只看该作者]

去掉最后/试试

Dim yyzy As String = Vars("yyzy") &"/Remuneration"
msgbox(yyzy) 提示什么地址?
jo("textcard")("url") = yyzy


服务端
第一行加上
msgbox(e.path) 看访问的地址是什么?注意大小写是否正确
……
msgbox(Vars("yyzy"))提示什么地址?
Dim ul2 As String = UrlEncode(Vars("yyzy"))

……
        If Verified = False Then
            'MessageBox.Show("授权不通过:" & userid)
            sb.AppendLine("你无权访问本系统")
        Else
            'MessageBox.Show("通过,进入主页")
            'MessageBox.Show("授权成功")
            e.WriteString("<meta http-equiv='Refresh' c>") 这里代码不完整
            '    sb.AppendLine("欢迎" & UserName & "同志使用本系统,授权成功!请" & " , <a href='http://www.crucg.top/Remuneration2'>刷新页面后进去</a>")
return
        End If
        e.WriteString(sb.ToString)
        
    Case "Remuneration2"


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


加好友 发短信
等级:四尾狐 帖子:801 积分:7697 威望:0 精华:0 注册:2015/9/14 14:26:00
  发帖心情 Post By:2020/12/14 16:21:00 [只看该作者]

Dim yyzy As String = Vars("yyzy") &"/Remuneration"
msgbox(yyzy) 提示什么地址?
jo("textcard")("url") = yyzy
这里提示

此主题相关图片如下:qq截图20201214161828.png
按此在新窗口浏览图片
服务端 e.path 提示

此主题相关图片如下:qq截图20201214162151.png
按此在新窗口浏览图片



此主题相关图片如下:qq截图20201214162022.png
按此在新窗口浏览图片
后面的 没有了



[此贴子已经被作者于2020/12/14 16:22:19编辑过]

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


加好友 发短信
等级:超级版主 帖子:110669 积分:563259 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/12/14 16:25:00 [只看该作者]

msgbox(yyzy)绝对不可能是上面第一个图的提示,如果不会调试就上传实例吧

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


加好友 发短信
等级:四尾狐 帖子:801 积分:7697 威望:0 精华:0 注册:2015/9/14 14:26:00
  发帖心情 Post By:2020/12/14 16:34:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:工资系统-通用(本地数据库).zip

我去掉了 我们公司的企业微信id什么的
[此贴子已经被作者于2020/12/14 16:37:34编辑过]

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


加好友 发短信
等级:超级版主 帖子:110669 积分:563259 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/12/14 16:43:00 [只看该作者]

客户端是哪个窗口的代码?

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


加好友 发短信
等级:四尾狐 帖子:801 积分:7697 威望:0 精华:0 注册:2015/9/14 14:26:00
  发帖心情 Post By:2020/12/14 16:45:00 [只看该作者]

消息提醒 中的确定按钮
我把正式用的程序 通过企业qq 发给 黄工了
[此贴子已经被作者于2020/12/14 16:46:12编辑过]

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


加好友 发短信
等级:超级版主 帖子:110669 积分:563259 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/12/14 16:51:00 [只看该作者]

和1楼的代码都不一样,确定是同一个项目吗?

5楼实例
Dim yyzy As String = Vars("yyzy")  
msgbox(yyzy) 

1楼
Dim yyzy As String = Vars("yyzy") &"/Remuneration"
msgbox(yyzy) 提示什么地址?


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


加好友 发短信
等级:超级版主 帖子:110669 积分:563259 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/12/14 16:54:00 [只看该作者]

服务端请参考这里帮助的用法改改:http://www.foxtable.com/mobilehelp/topics/0138.htm

不要使用e.AppendCookie
改为使用wb.AppendCookie

e.WriteString("<meta http-equiv='Refresh' c>")
这种也改为
wb.InsertHTML("<meta http-equiv='Refresh' c>")
e.WriteString(wb.Build)

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


加好友 发短信
等级:四尾狐 帖子:801 积分:7697 威望:0 精华:0 注册:2015/9/14 14:26:00
  发帖心情 Post By:2020/12/14 17:20:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20201214171908.png
图片点击可在新窗口打开查看

是一个项目

 回到顶部
总数 20 1 2 下一页