以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  有点甜老师,帮忙看个接口代码怎么写可以吗?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=125351)

--  作者:huangxueyao
--  发布时间:2018/9/26 20:24:00
--  有点甜老师,帮忙看个接口代码怎么写可以吗?
Dim hc As New HttpClient("https://area16-win.pospal.cn:443/pospal-api2/openapi/v1/customerOpenApi/queryByNumber")

hc.Headers.Add("User-Agent","openApi")
hc.Headers.Add("Content-Type","application/json; charset=utf-8")
hc.Headers.Add("accept-encoding","gzip,deflate")

Dim ts As TimeSpan = Date.now - #1/1/1970 00:00:00# \'从1970年开始算毫秒值
hc.Headers.Add("time-stamp",ts.TotalMilliseconds)


以下内容是专门发给有点甜浏览


jo = JObject.Parse(hc.GetData)
MessageBox.Show(jo("status"))

这是对方的接口格式规范地址:http://www.pospal.cn/openplatform/interactiveformatdescription.html
他是把Json内容加密成MD5然后加载请求头里面的。

上面代码接的是会员查询接口:http://www.pospal.cn/openplatform/customerapi.html#queryByNumber
我按照做了个但是一直无法返回正确数据,一直都是返回error。

搞不懂是哪里出了问题,希望能帮忙看看,谢谢。



--  作者:huangxueyao
--  发布时间:2018/9/26 21:22:00
--  
我用抓包工具发现请求方式是get,对方文档要求用post才对,httpclient怎么改?
--  作者:有点甜
--  发布时间:2018/9/26 22:01:00
--  

把json数据发送过去,如

 

Dim url As String = "https://api.weixin.qq.com/cgi-bin/tags/create?access_token={0}"
Dim hc As New HttpClient(CExp(url, Functions.Execute("GetAccessToken")))
Dim jo As New JObject()
jo("tag") = New JObject()
jo("tag")("name") = "vip"
hc.Content = jo.ToString

jo = JObject.Parse(hc.GetData)


--  作者:huangxueyao
--  发布时间:2018/9/26 22:08:00
--  
对方的api是要把
key+json格式的数据 生成一个MD5字符串

再把这个字符串加到请求头里面发送过去。

所以无法直接用json、content传递数据

    1.3 请求头


  • User-Agent: openApi
  • Content-Type: application/json; charset=utf-8
  • accept-encoding: gzip,deflate
  • time-stamp: 1437528688233
  • data-signature: BF706E6AC693BA3B1BABD32E6713431D

  • time-stamp: 时间戳, 它是自 1970年1月1日(08:00:00 GMT)至当前时间的总毫秒数。它也被称为Unix时间戳(Unix Timestamp)
  • data-signature:请求体通过md5算法生成的签名

--  作者:huangxueyao
--  发布时间:2018/9/26 22:09:00
--  
Dim req = System.Net.WebRequest.Create("https://area16-win.pospal.cn:443/pospal-api2/openapi/v1/openApiLimitAccess/queryAccessTimes")
req.Method = "POST"
req.C
req.Headers.Add("User-Agent","openApi")
\'req.UserAgent="openApi"
req.Headers.Add("accept-encoding","gzip,deflate")

Dim ts As TimeSpan = Date.now - #1/1/1970 00:00:00# \'从1970年开始算毫秒值
req.Headers.Add("time-stamp",CLng(ts.TotalMilliseconds)) \'生成的毫秒可能带小数

Dim jo As New JObject()
jo("appId") = "BA592EDDA"
\'jo("customerNum") = "2013003001"
msgbox(CompressJson(jo))
Dim st As String = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile("17229" + CompressJson(jo), "MD5")
msgbox(st)
req.Headers.Add("data-signature",st)

Dim pos = req.GetResponse

Dim stm As System.IO.Stream = pos.GetResponseStream()
Dim reader As New System.IO.StreamReader(stm)
Dim str As String = reader.ReadToEnd
pos.Close
stm.Close
reader.close

Dim jo1 As JObject = Jobject.Parse(str)
msgbox(jo1.ToString)

我尝试写成这样也不行,一堆报错
[此贴子已经被作者于2018/9/26 22:08:48编辑过]

--  作者:有点甜
--  发布时间:2018/9/26 22:21:00
--  

1、你至少要把json发过去啊

 

hc.Content = jo.ToString

 

2、合成md5字符串的,你看人家文档要求合成


--  作者:huangxueyao
--  发布时间:2018/9/27 8:31:00
--  
Dim hc As New HttpClient("https://area16-win.pospal.cn:443/pospal-api2/openapi/v1/customerOpenApi/queryByNumber")

hc.Headers.Add("User-Agent","openApi")
hc.Headers.Add("Content-Type","application/json; charset=utf-8")
hc.Headers.Add("accept-encoding","gzip,deflate")

Dim ts As TimeSpan = Date.now - #1/1/1970 00:00:00# \'从1970年开始算毫秒值
hc.Headers.Add("time-stamp",clng(ts.TotalMilliseconds))

Dim jo As New JObject()
jo("appId") = "E83E8A"
jo("customerNum") = "000185"
msgbox(CompressJson(jo))
Dim st As String = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile("30" + CompressJson(jo), "MD5")
msgbox(st)
hc.Headers.Add("data-signature",st)
hc.Content = jo.ToString


jo = JObject.Parse(hc.GetData)
MessageBox.Show(jo.ToString)


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

为什么我已经指定了Content-Type但是上传的又不一样?


--  作者:有点甜
--  发布时间:2018/9/27 8:50:00
--  

hc.Headers.Add("Content-Type","application/json; charset=utf-8")

 

改成

 

hc.ContentType = "application/json; charset=utf-8"


--  作者:huangxueyao
--  发布时间:2018/9/27 10:19:00
--  
可以了,谢谢
--  作者:zhy400137
--  发布时间:2019/7/17 22:38:00
--  
mark