当前位置: 首页 > article >正文

C#实战:5步搞定阿里健康药品追溯码接口对接(附完整签名源码)

C#实战5步高效对接阿里健康药品追溯码API在医院和药店管理系统中药品追溯功能已成为刚需。阿里健康提供的药品追溯码查询接口能帮助医疗机构快速获取药品全流程信息。作为.NET开发者你可能需要将这个功能集成到现有ERP系统中。本文将带你从零开始用C#完成整个对接流程。1. 环境准备与基础配置在开始编码前需要确保开发环境就绪。创建一个新的C#控制台应用或类库项目建议使用.NET Core 3.1或更高版本以获得更好的跨平台支持。必备NuGet包dotnet add package RestSharp dotnet add package Newtonsoft.Json配置基础参数时建议使用配置文件而非硬编码。在appsettings.json中添加{ AliHealthConfig: { AppKey: your_app_key, AppSecret: your_32char_secret, ApiUrl: http://gw.api.taobao.com/router/rest, RefEntId: your_ent_id } }提示AppSecret是核心安全参数生产环境应使用Azure Key Vault或类似服务保管2. 参数解析与签名机制阿里健康API采用淘宝开放平台的通用签名方案。签名过程需要特别注意参数排序和编码规则。关键参数说明参数名类型必填说明methodstring是API方法名如alibaba.alihealth.drugtrace.top.querycodetimestampstring是请求时间格式yyyy-MM-dd HH:mm:sssign_methodstring是签名算法支持md5/hmac/hmac-sha256vstring是API版本固定2.0签名算法实现要点将所有参数除sign外按键名字母序排序将排序后的参数键值拼接成字符串根据sign_method选择加密方式计算签名public static string GenerateSign(IDictionarystring, string parameters, string secret, string signMethod md5) { var sortedParams new SortedDictionarystring, string(parameters, StringComparer.Ordinal); var queryBuilder new StringBuilder(); if(signMethod md5) queryBuilder.Append(secret); foreach(var param in sortedParams) { if(!string.IsNullOrEmpty(param.Key) !string.IsNullOrEmpty(param.Value)) { queryBuilder.Append(param.Key).Append(param.Value); } } byte[] hashBytes; switch(signMethod.ToLower()) { case hmac: using(var hmac new HMACSHA256(Encoding.UTF8.GetBytes(secret))) { hashBytes hmac.ComputeHash(Encoding.UTF8.GetBytes(queryBuilder.ToString())); } break; default: // md5 queryBuilder.Append(secret); using(var md5 MD5.Create()) { hashBytes md5.ComputeHash(Encoding.UTF8.GetBytes(queryBuilder.ToString())); } break; } return BitConverter.ToString(hashBytes).Replace(-, ).ToLower(); }3. 请求构建与参数处理构建HTTP请求时需要注意参数编码和特殊字符处理。以下是完整的请求构建示例public async TaskJObject QueryDrugTraceCode(string traceCode) { var config Configuration.GetSection(AliHealthConfig); var parameters new Dictionarystring, string { {method, alibaba.alihealth.drugtrace.top.querycode}, {app_key, config[AppKey]}, {timestamp, DateTime.Now.ToString(yyyy-MM-dd HH:mm:ss)}, {format, json}, {v, 2.0}, {sign_method, md5}, {code, traceCode}, {ref_ent_id, config[RefEntId]} }; parameters[sign] GenerateSign(parameters, config[AppSecret]); var client new RestClient(config[ApiUrl]); var request new RestRequest(Method.POST); request.AddParameter(application/x-www-form-urlencoded, string.Join(, parameters.Select(p ${p.Key}{HttpUtility.UrlEncode(p.Value)})), ParameterType.RequestBody); var response await client.ExecuteAsync(request); return JObject.Parse(response.Content); }常见问题处理时间参数必须精确到秒所有参数值需要进行URL编码POST请求的Content-Type应为application/x-www-form-urlencoded4. 异常处理与重试机制API调用可能因网络或服务端问题失败需要完善的异常处理public async TaskJObject SafeQueryDrugTrace(string traceCode, int maxRetry 3) { int attempt 0; while(attempt maxRetry) { try { var result await QueryDrugTraceCode(traceCode); if(result[error_response] null) return result; var error result[error_response]; if(error[code].ToString() 15) // 请求频繁 { await Task.Delay(1000 * (attempt 1)); attempt; continue; } throw new ApiException(error[msg].ToString()); } catch(Exception ex) when (attempt maxRetry - 1) { attempt; await Task.Delay(1000 * attempt); } } throw new ApiException(Maximum retry attempts reached); }常见错误码处理错误码含义建议处理方式15接口调用频率超限延时重试40缺少必要参数检查参数完整性41无效参数验证参数格式25签名错误检查签名算法5. 响应解析与业务集成成功响应后需要将API返回的数据转换为业务可用的格式。典型响应结构如下{ alibaba_alihealth_drugtrace_top_querycode_response: { result: { ent_info: { ent_name: 某制药有限公司 }, code_detail_list: { code_detail: [ { code: 6970123456789, produce_date: 2023-05-01, expire_date: 2025-04-30, batch_no: B20230501 } ] } } } }解析示例public DrugTraceInfo ParseTraceResponse(JObject response) { var resultPath alibaba_alihealth_drugtrace_top_querycode_response.result; var result response.SelectToken(resultPath); return new DrugTraceInfo { EnterpriseName result[ent_info][ent_name].ToString(), CodeDetails result[code_detail_list][code_detail] .Select(d new CodeDetail { Code d[code].ToString(), ProduceDate DateTime.Parse(d[produce_date].ToString()), ExpireDate DateTime.Parse(d[expire_date].ToString()), BatchNumber d[batch_no].ToString() }).ToList() }; }集成到业务系统时建议添加本地缓存避免重复查询相同追溯码记录查询日志用于审计对高频查询场景考虑批量查询接口// 缓存集成示例 public async TaskDrugTraceInfo GetDrugTraceInfo(string traceCode) { var cacheKey $DrugTrace:{traceCode}; if(_cache.TryGetValue(cacheKey, out DrugTraceInfo cachedInfo)) return cachedInfo; var response await SafeQueryDrugTrace(traceCode); var info ParseTraceResponse(response); _cache.Set(cacheKey, info, TimeSpan.FromHours(1)); return info; }

相关文章:

C#实战:5步搞定阿里健康药品追溯码接口对接(附完整签名源码)

C#实战:5步高效对接阿里健康药品追溯码API 在医院和药店管理系统中,药品追溯功能已成为刚需。阿里健康提供的药品追溯码查询接口,能帮助医疗机构快速获取药品全流程信息。作为.NET开发者,你可能需要将这个功能集成到现有ERP系统中…...

城通网盘下载慢到心碎?这个开源工具让你1秒获取高速直连地址

城通网盘下载慢到心碎?这个开源工具让你1秒获取高速直连地址 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否曾经遇到过这样的情况:从城通网盘下载一个重要的学习资料&…...

新手必看:如何用OpenSCAP快速搞定Linux服务器安全基线检查(附CentOS实战)

从零到精通的OpenSCAP实战:CentOS安全基线检查全流程拆解 刚接手服务器运维的新手常会遇到这样的困惑:明明系统运行正常,安全团队却总说存在"配置风险"。去年我们团队就发生过一起因SSH弱加密算法导致的入侵事件——攻击者仅用2小时…...

LLaMA-Factory SFT微调避坑指南:你的checkpoint真的能用吗?

LLaMA-Factory SFT微调避坑指南:你的checkpoint真的能用吗? 当你沉浸在LLaMA-Factory的SFT微调过程中,突然遇到GPU宕机或进程卡死,那种感觉就像跑马拉松时被人绊了一跤。更糟的是,日志里没有任何报错信息,只…...

多模态学习避坑指南:当你的模型出现‘模态懒惰‘时该怎么办?

多模态学习避坑指南:当你的模型出现模态懒惰时该怎么办? 在构建多模态AI系统时,工程师们常常遇到一个棘手问题:模型看似融合了多种数据源,实际表现却不如单模态模型。这种现象被学术界称为"模态懒惰"(Modali…...

GLM-4-9B-Chat-1M多语言法律文书生成:中英双语合同条款自动起草

GLM-4-9B-Chat-1M多语言法律文书生成:中英双语合同条款自动起草 1. 项目简介与核心价值 法律文书起草是法律工作中的重要环节,但传统方式耗时耗力且容易出错。GLM-4-9B-Chat-1M模型的出现,为法律文书生成带来了全新的解决方案。 这个基于v…...

超立方体可视化背后的数学原理:Processing实现详解

超立方体可视化背后的数学原理:Processing实现详解 想象一下,当你第一次看到超立方体的三维投影时,那种既熟悉又陌生的感觉——它像是我们熟知的立方体,却又在某种更高维度上展开。这种四维几何体在三维空间的投影,不仅…...

跳棋游戏中的多重捕获实现

跳棋(Checkers)是许多棋类爱好者喜爱的一款游戏,它的规则简单,但策略深度却非常丰富。今天我们来讨论跳棋游戏中的一个复杂而有趣的功能——多重捕获的实现。在本文中,我们将深入探讨如何在JavaScript中编写一个可以检测并执行多重捕获的函数。 基本概念 在跳棋游戏中,…...

HunyuanVideo-Foley数据库集成实践:管理海量生成音效的元数据

HunyuanVideo-Foley数据库集成实践:管理海量生成音效的元数据 1. 引言:音效管理的现实挑战 最近接触了几家正在使用HunyuanVideo-Foley的影视制作公司,发现一个普遍现象:随着生成音效数量的爆炸式增长,团队开始面临管…...

GLM-4-9B-Chat-1M镜像升级路径:从GLM-4-9B-Chat到1M版本的权重转换与验证

GLM-4-9B-Chat-1M镜像升级路径:从GLM-4-9B-Chat到1M版本的权重转换与验证 如果你正在使用GLM-4-9B-Chat模型,并且被它128K的上下文长度所吸引,那么现在有个好消息:它的“超级加强版”来了。GLM-4-9B-Chat-1M版本,直接…...

医疗数据增强技巧:提升MedGemma在小数据集上的表现

医疗数据增强技巧:提升MedGemma在小数据集上的表现 1. 引言 当你手头只有几百张医疗影像数据,却要训练一个强大的MedGemma模型时,会不会觉得这是个不可能完成的任务?别担心,这恰恰是很多医疗AI开发者面临的真实困境。…...

Llama-3.2V-11B-cot惊艳效果:将儿童涂鸦转化为含因果逻辑的故事描述

Llama-3.2V-11B-cot惊艳效果:将儿童涂鸦转化为含因果逻辑的故事描述 1. 模型能力概览 Llama-3.2V-11B-cot 是一个突破性的视觉语言模型,它能将简单的儿童涂鸦转化为包含完整因果逻辑的故事描述。这个基于LLaVA-CoT论文实现的模型,展现了令人…...

实时流程图编辑的现代化解决方案:Mermaid Live Editor如何提升技术文档效率

实时流程图编辑的现代化解决方案:Mermaid Live Editor如何提升技术文档效率 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me…...

原神智能辅助工具BetterGI:三维价值框架下的游戏效率提升方案

原神智能辅助工具BetterGI:三维价值框架下的游戏效率提升方案 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙 | 全连音…...

如何评估一个SEO策略的效果_如何利用local SEO来提高网站曝光度

如何评估一个SEO策略的效果 在当今数字化时代,搜索引擎优化(SEO)已经成为了网站提升曝光度和吸引流量的关键手段。一个好的SEO策略可以帮助网站在搜索结果中获得更高的排名,从而吸引更多的潜在客户。如何评估一个SEO策略的效果呢…...

开源工具:多平台支持的网盘高效下载技术指南

开源工具:多平台支持的网盘高效下载技术指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅…...

3步实现窗口置顶:AlwaysOnTop让重要内容不再“失踪“

3步实现窗口置顶:AlwaysOnTop让重要内容不再"失踪" 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop 在多任务处理时,你是否经常需要在多个窗口间…...

3大核心价值助力自媒体高效采集:抖音无水印下载工具全解析

3大核心价值助力自媒体高效采集:抖音无水印下载工具全解析 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback s…...

AirPodsDesktop:Windows平台苹果耳机功能增强工具

AirPodsDesktop:Windows平台苹果耳机功能增强工具 【免费下载链接】AirPodsDesktop ☄️ AirPods desktop user experience enhancement program, for Windows and Linux (WIP) 项目地址: https://gitcode.com/gh_mirrors/ai/AirPodsDesktop AirPodsDesktop是…...

解锁AMD Ryzen处理器潜能:SMU Debug Tool全场景应用指南

解锁AMD Ryzen处理器潜能:SMU Debug Tool全场景应用指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://…...

OFA-Image-Caption模型C语言接口封装实战:赋能传统嵌入式系统

OFA-Image-Caption模型C语言接口封装实战:赋能传统嵌入式系统 如果你在做一个智能摄像头项目,或者想给一台老旧的工业设备加上“看图说话”的能力,你可能会发现一个尴尬的局面:最新的AI模型大多是用Python写的,而你的…...

Gemma 4重磅发布:256K超长上下文的多模态AI模型

Gemma 4重磅发布:256K超长上下文的多模态AI模型 【免费下载链接】gemma-4-26B-A4B-it 项目地址: https://ai.gitcode.com/hf_mirrors/google/gemma-4-26B-A4B-it 导语:Google DeepMind推出Gemma 4系列多模态AI模型,以256K超长上下文窗…...

魔兽争霸3帧率优化完全指南:从技术原理到实战调优

魔兽争霸3帧率优化完全指南:从技术原理到实战调优 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 一、性能瓶颈诊断:定位魔兽争…...

如何利用垂直搜索引擎优化提升排名_网站评论优化对 SEO 排名的影响是什么

如何利用垂直搜索引擎优化提升排名 在当今互联网时代,搜索引擎优化(SEO)已经成为网站提升流量和吸引目标用户的重要手段。而在SEO策略中,垂直搜索引擎优化是一个逐渐被重视的方面。与通用搜索引擎不同,垂直搜索引擎&a…...

终极指南:5步彻底解决显卡驱动残留问题

终极指南:5步彻底解决显卡驱动残留问题 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-uninstaller 你是否曾经…...

基于LSTM时间序列预测思想优化Qwen3对话连贯性

基于LSTM时间序列预测思想优化Qwen3对话连贯性 你有没有遇到过这种情况?和AI助手聊得正起劲,从天气聊到周末计划,再聊到最近看的电影,结果它突然冒出一句:“您刚才提到的那个项目需求是什么?”——得&…...

Phi-4-mini-reasoning镜像部署实操:7.2GB模型在24GB显存设备稳定运行

Phi-4-mini-reasoning镜像部署实操:7.2GB模型在24GB显存设备稳定运行 1. 项目概述 Phi-4-mini-reasoning是由微软Azure AI Foundry推出的轻量级开源模型,专为数学推理、逻辑推导和多步解题等强逻辑任务设计。这个3.8B参数的模型虽然体积小巧&#xff0…...

Z-Image-Turbo_Sugar脸部Lora生成图像的后处理技巧:使用PS软件进行精修

Z-Image-Turbo_Sugar脸部Lora生成图像的后处理技巧:使用PS软件进行精修 AI生成图像,尤其是像Z-Image-Turbo_Sugar这类擅长生成甜美、精致人像的模型,已经能产出相当惊艳的初稿。但如果你仔细观察,会发现这些图片距离真正“完美”…...

像素幻梦创意工坊保姆级教程:从安装到生成你的第一张像素画

像素幻梦创意工坊保姆级教程:从安装到生成你的第一张像素画 1. 准备工作:认识像素幻梦创意工坊 像素幻梦创意工坊(Pixel Dream Workshop)是一款基于FLUX.1-dev扩散模型的AI像素艺术生成工具。它采用明亮的16-bit像素风格界面,让艺术创作变得…...

PPT如何设置部分内容不可编辑?教你锁定部分对象,只允许修改指定区域

制作好的PPT发给同事或客户后,最担心的就是对方随意拖动图片、删除Logo、修改背景或打乱排版,导致精心设计的页面面目全非。很多人以为PPT没有类似Word的“部分限制编辑”功能,其实不然——PPT提供了多种灵活的保护方式,可以让你锁…...