DESsoft 2024-02-17 11:57 采纳率: 0%
浏览 12

调用医保直连接口9102,无法下载医保目录文件

调用医保直连接口9102时,下载的数据流没有结果,请各位指点,代码如下:

http = Create oleobject
//li_rtn = http.ConnectToNewObject("Msxml2.XMLHTTP")
//li_rtn = http.ConnectToNewObject("Microsoft.XMLHttp")
li_rtn = http.ConnectToNewObject("MSXML2.ServerXMLHTTP")//网页有跳转的用这个
if li_rtn <> 0 then
    ls_errtext = '连接Msxml2.XMLHTTP出错!'
    goto Err
end if
try
    http.Open("POST",as_url,false)
    http.setRequestHeader("Content-Type","application/json;charset=utf-8")
    http.setRequestHeader("x-tif-paasid",as_header[1])   //应用编码
    http.setRequestHeader("x-tif-signature",as_header[2])  //签名
    http.setRequestHeader("x-tif-timestamp",as_header[3])  //时间
    http.setRequestHeader("x-tif-nonce",as_header[4])  //校验码
    http.send(as_injson)
catch (runtimeerror e_open)
    messagebox('提示','打开Msxml2.XMLHTTP出错!~r~n' + e_open.getmessage())
    return -1
end try
do While http.readyState <> 4 //查询状态,延时
    yield()
Loop
//ral_recode = http.Status   //状态码
//ras_retext = http.StatusText   //请求错误信息
string ls_StatusText
ls_StatusText = http.StatusText 
IF http.Status <>200 then 
    ls_errtext = "接口返回:~r~n"+string( http.Status)+":"+ls_StatusText
    goto Err
end if
as_outjson=space(1048576)
//bb_files=space(1048576)
if as_jkbh='9102' then
    //rab_zipstr= http.responseblob
    if gs_blobbz='1' then
        bb_files= blob(http.responseText)  //返回信息
        as_outjson = string(bb_files)
    else
       as_outjson= string(http.responseText)  //返回信息
    end if
messagebox('结果',as_outjson )


返回值是:PK

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-17 11:59
    关注

    引自免费微信小程序:皆我百晓生

    您在尝试通过医保直连接口9102下载医保目录文件时遇到了问题,返回值显示为"PK"。这通常意味着返回的数据流似乎是ZIP格式的压缩文件开头标识符(PK是ZIP文件中“local file header”部分的固定魔术数字)。

    针对您的代码片段,以下是可能的问题排查步骤和修改建议:

    1. 检查响应类型与处理方式

      • 根据接口文档确认该接口是否确实返回的是ZIP压缩文件。
      • 如果返回的是ZIP文件,您需要将其作为二进制数据流来处理,并解压缩后读取内容,而不是直接转换为字符串。
      if as_jkbh = '9102' then
          bb_files = http.responseBody  // 获取原始二进制数据流
          // 这里应该将bb_files写入到一个zip文件中,然后解压获取目录文件
          WriteBinaryToFile(bb_files, "temp.zip") // 假设这是一个保存二进制流到zip文件的函数
          // 解压zip文件并读取医保目录文件内容
          UnzipAndReadFile("temp.zip", "医保目录文件路径")
      end if
      
    2. 验证请求头设置

      • 确保所有请求头参数如x-tif-paasidx-tif-signature等正确无误,且符合医保平台的要求。
    3. 检查错误状态码及信息

      • 虽然您在代码中有检查HTTP状态码的地方,但在实际运行中没有使用这些变量。请确保对非200状态码的情况进行处理,比如抛出异常或记录错误日志。
    4. 查看接口文档

      • 查阅医保直连接口9102的官方文档,看是否存在特殊要求或限制,以及如何正确处理ZIP格式的返回结果。
    5. 测试分步执行

      • 分别打印或调试每个步骤的结果,包括发送的请求体as_injson、发送前后的请求头、以及HTTP响应的状态码和状态文本。
    6. 捕获并分析异常

      • http.send(as_injson)之后添加更详细的异常处理,以捕捉可能存在的网络或其他错误。

    由于无法提供具体的VB环境模拟和测试,上述建议仅供参考。如果接口确实返回的是ZIP压缩包,请务必按照正确的流程来处理它,而不是直接转换为字符串输出。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月17日

悬赏问题

  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害