以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]如何从中控服务获取access_token  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=132343)

--  作者:智友软件工作室
--  发布时间:2019/3/20 11:18:00
--  [求助]如何从中控服务获取access_token
Dim ac As WeChat.AccessToken = WeChat.WeChatAccessTokenController.GetNewAccessToken(1,_appid,_AppSecret)

If ac.Success Then

    Output.Show(ac.access_token)

End If

用这样的方式获取的access_token每次都是刷新一个新的
请问可以用什么办法获取未过期的access_token
我是用“使用UDP服务端做中控服务”方法做的中控服务

--  作者:有点甜
--  发布时间:2019/3/20 11:22:00
--  

参考

 

http://wechat.foxtable.com:9009/WebHelp/scr/we0013.htm

 

http://wechat.foxtable.com:9009/WebHelp/scr/we0011.htm

 


--  作者:智友软件工作室
--  发布时间:2019/3/20 12:33:00
--  
没看懂,现在就想获取一个不过去的凭证,不想每次都刷新,您能给写一下吗?
--  作者:智友软件工作室
--  发布时间:2019/3/20 12:34:00
--  
没看懂,现在就想获取一个不过去的凭证,不想每次都刷新,您能给写一下吗?
--  作者:有点甜
--  发布时间:2019/3/20 12:45:00
--  

认认真真看啊

 

http://wechat.foxtable.com:9009/WebHelp/scr/we0012.htm

 

不会做就用原始的

 

http://www.foxtable.com/mobilehelp/scr/0233.htm

 

 


--  作者:智友软件工作室
--  发布时间:2019/3/20 15:44:00
--  
哥哥,叫您一声亲哥,从昨晚到现在都没折腾明白,你就直接指点一下吧。
\'给用户推送信息
Dim id As String = Tables("微信工单").Current("openid")
Dim txt As String
txt = txt & Tables("微信工单").Current("nickname") & "你好:" & vbcrlf
txt = txt & "您的工单状态已变更为等待调度,正在给您分配工程师" & vbcrlf
txt = txt & "敬请关注" & vbcrlf
Dim text As String = "{""touser"":""" & id & """,""msgtype"":""text"",""text"":{""content"":""" & txt & """}}"
Dim wechatServ As WeChat.WeChatPublicNo = WeChat.WeChatServer.Server(_AppId)
Dim weRet = wechatServ.SendMsgController.SendMessage(text)
If weRet.Success Then
    MessageBox.Show("已给用户发送状态变更消息!")
Else
    MessageBox.Show("给用户发送的状态变更消息失败!" & weRet.ErrorMessage)
End If
用上面的方法客户端是可以成功给指定openid发送消息的,就说明这个过程调取的access_token是成功的,我现在想要单独获取到这个access_token
Dim url As String = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={0}"
Dim
hc As New HttpClient(CExp(url, Functions.Execute("GetAccessToken")))
Dim
jo As New JObject
Dim
ja As New JArray
jo
("touser") = "ofjtFwBSZ5cNqTKLSKx2TNEAxfBI"
jo
("template_id") = "WPpt3ki1Haq-ERpQvWXAgT7IZbfO07mbKtjnRt1Kiek" \'模板ID
jo
("url") = "http://www.foxtable.com"
jo
("data") = New JObject()
jo
("data")("name") = New JObject()
jo
("data")("name")("value") = "Foxtable"
jo
("data")("name")("color") = "#173177"
jo
("data")("number") = New JObject()
jo
("data")("number")("value") = "2"
jo
("data")("number")("color") = "#173177"
jo
("data")("expDate") = New JObject()
jo
("data")("expDate")("value") = "20191227"
jo
("data")("expDate")("color") = "#173177"
jo
("data")("expDate") = New JObject()
jo
("data")("expDate")("value") = "20191227"
jo
("data")("expDate")("color") = "#173177"
jo
("data")("remark") = New JObject()
jo
("data")("remark")("value") = "如有疑问,可联系客服QQ:800014337"
jo
("data")("remark")("color") = "#173177"
hc
.content = jo.Tostring()
jo
= JObject.Parse(hc.getdata)
If
jo("errcode") = "0" Then
    MessageBox.show("模版消息发送成功!")
Else
    Messagebox.Show(jo.ToString)
End If
我现在想用上面的办法发送模板消息,因为上面的方法看的明白(不会用WeChat.MPSendTemplate),这里面是通过自定义函数GetAccessToken用于获取access_token,我现在中控服务器是使用UDP服务端做中控服务,我想请教您在这种情况我我想得到access_token这个字符串该怎么弄。

帮助已经看了好多遍了,水平确实有限,脑子都浆糊了
[此贴子已经被作者于2019/3/20 15:45:15编辑过]

--  作者:有点甜
--  发布时间:2019/3/20 15:48:00
--  

直接照抄啊

 

http://www.foxtable.com/mobilehelp/scr/0233.htm

 


--  作者:智友软件工作室
--  发布时间:2019/3/20 16:31:00
--  
Dim hc As New HttpClient("http://" & _zhongkongip) 
hc.  C & "测试"
MessageBox.Show(hc.GetData)

是这样吗?显示空值
[此贴子已经被作者于2019/3/20 16:31:50编辑过]

--  作者:有点甜
--  发布时间:2019/3/20 17:07:00
--  

方法一:做一个自己的函数,需要的时候调用

 

Static CreateTime As Date \'记录最近一次生成access_token的时间
Static AccessTocken As String \'记录最近一次生成的access_token
Dim AppId As String= "wx8acdb7df5beb68fd" \'开发者ID
Dim AppSecret As String = "a5a3b06a790d4200a151e6b13c3dc263" \'开发者密匙
Dim tp As TimeSpan = Date.Now - CreateTime
Dim url As String = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}"
If tp.TotalSeconds > 3600 Then
    Dim hc As New HttpClient(CExp(url,AppId,AppSecret))
    Dim ret As String = hc.GetData()
    If ret = "" Then \'如果失败,再尝试一次
        hc.GetData()
    End If
    CreateTime = Date.Now()
    Dim jo As JObject = JObject.Parse(ret)
    If jo("errcode") Is Nothing Then
        AccessTocken = jo("access_token")
    Else
        MessageBox.show("获取access_token失败,原因:" & vbcrlf & jo("errmsg").ToString)
    End If
End If
Return AccessTocken

 

方法二:

 

你可以用 Dim ac As WeChat.AccessToken = WeChat.WeChatAccessTokenController.GetNewAccessToken(1,_appid,_AppSecret)

 

简化你方法1的代码


--  作者:智友软件工作室
--  发布时间:2019/3/20 19:31:00
--  

你可以用 Dim ac As WeChat.AccessToken = WeChat.WeChatAccessTokenController.GetNewAccessToken(1,_appid,_AppSecret)

 

简化你方法1的代码


这种方法我一开始就知道了,测试是成功的,但是这种方法的缺陷就是每次都是生成一个新的,会耗用次数,现在想客户端如何从中控端获取


中控端是按照下面这样设置的


If e.Message.StartsWith("бTokenGetб"Then

    Dim msg As String = e.Message.Replace("бTokenGetб","")

    Dim atoken = WeChat.WeChatAccessTokenController.GetServiceAccessToken(msg) \'调用接口库获取最新access_toke

    If atoken.CheckError() Then

        Functions.Execute("LogText",atoken.ErrorMessage)

    Else

        e.ReturnValue = Functions.Execute("Msg_GetReturnValue",atoken.ToJson())

    End If

End If

[此贴子已经被作者于2019/3/20 20:07:53编辑过]