以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于第三方接口调用  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=183489)

--  作者:s111321
--  发布时间:2022/11/7 13:58:00
--  关于第三方接口调用
请问下,我用试用版做了这个接口,使用正常的,到了正式开发版里面,就提示远程服务器返回错误: (401) 未经授权,这2个版本还有什么不同的吗?下面是语句

\'创建日志目录
If FileSys.DirectoryExists("C:\\logs") = False Then
    FileSys.CreateDirectory("C:\\logs")
End If
\'日志文件名称
Dim log As String
log = CStr(Date.Today)
log = log.Replace("-", "")
log = "log" & log
\'组JSON
Dim rcjo As New JObject
\'报文头
Dim infno As String = "1001"
rcjo("infno") = infno \'交易号
Dim Datetime As String
Datetime = Format(Date.Now, "G")
rcjo("inf_time") = Datetime \'交易时间
Dim msgid As String
Dim Datetime1 As String
Datetime1 = Datetime.Replace("-", "")
Datetime1 = Datetime1.Replace(":", "")
Datetime1 = Datetime1.Replace(" ", "")
rcjo("msgid") = "D1010019" & Datetime1 & "1001"
rcjo("mdtrtarea_admvs") = "330712"
Dim insuplc_admdvs As String = "330712"
rcjo("insuplc_admdvs") = insuplc_admdvs
rcjo("recer_sys_code") = "FSI_LOCAL"
rcjo("dev_no") = "1"
rcjo("dev_safe_info") = ""
rcjo("fixmedins_code") = "D1010019"
rcjo("fixmedins_name") = "测试"
Dim sign_no As String = ""
rcjo("sign_no") = sign_no
rcjo("input") = New JObject
\'报文体
rcjo("input")("signIn") = New JObject
Dim opter_no As String = "005"
rcjo("input")("signIn")("opter_no") = opter_no
Dim mac As String = "00-50-56-B2-07-A5"
rcjo("input")("signIn")("mac") = mac
Dim ip As String = "172.12.100.78"
rcjo("input")("signIn")("ip") = ip
\'签名
Dim st As New Date(1970, 1, 1, 8, 0, 0)
Dim timestamp As String = (Date.Now - st).TotalMilliseconds().Tostring
Dim akey As String = "D1010019"
Dim aSecret As String = "ldssdOssdP"
Dim atimestamp As String = timestamp.SubString(0, 10)
Dim abody As String = CompressJson(rcjo)
Dim Hmac As String
Hmac = Hmac_SM3(akey, aSecret, atimestamp, abody)
\'调用接口
Dim xmlRequest As String = CompressJson(rcjo)
Dim xml As String = xmlRequest \'实例化一个字符转码对象\'
Dim encoding As System.Text.Encoding = System.Text.Encoding.GetEncoding("utf-8")
Dim request As System.Net.WebRequest = System.Net.WebRequest.Create("http://www.xxxx.com")
request.headers.set("x-ca-key", "D1010019")
request.headers.set("x-ca-signature", Hmac)
request.Method = "POST"
Dim postdata() As System.Byte = encoding.GetBytes(xmlRequest)
request.ContentLength = postdata.Length
Dim requesstream As System.IO.Stream = request.GetRequestStream()
requesstream.Write(postdata, 0, postdata.Length)
requesstream.Close()
Dim response As System.Net.WebResponse = request.GetResponse()
Dim responsestream As New System.IO.StreamReader(response.GetResponseStream())
Dim html As String = responsestream.ReadToEnd()
requesstream.Close()
response.Close()
Output.Logs(log).Add("入参>>>>>>>>>>>>>>>>>>>>>>>>>>>>:" + xmlRequest)
Output.Logs(log).Add("出参<<<<<<<<<<<<<<<<<<<<<<<<<<<<:" + HTMLDecode(html))
Output.Logs(log).Save("c:\\logs\\" & log & ".txt", True)




--  作者:有点蓝
--  发布时间:2022/11/7 14:19:00
--  
这个纯使用.net的类型,和Foxtable没有什么关系的。

在2个项目使用同一个时间(也就是代码里的Date.Now改为一个固定的时间)测试看提交的内容是否完全一样

比较这些变量内容:xmlRequest、Hmac 

--  作者:s111321
--  发布时间:2022/11/8 9:40:00
--  
蓝老师,请问下,我用上面的方式调用接口成功了,用下面这个 HttpClient调用就提示未经授权,能帮忙看下是什么问题吗      

\'定义接口
        Dim web As New HttpClient("http://www.xxx.com")
        web.Headers.Add("Content-Type", "application/json")
        web.Headers.Add("Content-Length", " ")
        web.Headers.Add("x-ca-key", akey)
        web.Headers.Add("x-ca-signature", Hmac)
        \'输入
        web.Content = xmlRequest
        \'输出
        Dim CC1101 As String = web.GetData

--  作者:有点蓝
--  发布时间:2022/11/8 9:53:00
--  
去掉这2句试试

        web.Headers.Add("Content-Type", "application/json")
        web.Headers.Add("Content-Length", " ")