阿里健康药品追溯码,码上平台接口对接记录

对接阿里药品追溯码的一些经验,记录一下!

阿里平台获取接口文档:

淘宝开放平台 - 文档中心icon-default.png?t=O83Ahttps://developer.alibaba.com/docs/api.htm?spm=a219a.7395905.0.0.566675fegdcbyG&apiId=68411

不罗嗦,直接上代码:

        /// <summary>
        /// 查询机构采购订单信息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            string app_key = "********";
            string begin_date = "2024-12-01";
            string bill_type = "A";
            string end_date = "2024-12-31";
            string method = "alibaba.alihealth.drugtrace.top.bill.query.billstatus";
            string sign_method = "md5";
            string strsecret = "32位的secret";
            string strformat = "json";
            string sign = "";
            string timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            string v = "2.0";
            string ref_ent_id = "32位的医疗机构ID";
            string page_size = "20";
            string page = "1";

            Dictionary<string, string> dicParamDict = new Dictionary<string, string>();
            dicParamDict.Add("app_key", app_key);
            dicParamDict.Add("begin_date", begin_date);
            dicParamDict.Add("bill_type", bill_type);
            dicParamDict.Add("end_date", end_date);
            dicParamDict.Add("format", strformat);
            dicParamDict.Add("method", method);
            dicParamDict.Add("ref_ent_id", ref_ent_id);
            dicParamDict.Add("page_size", page_size);
            dicParamDict.Add("page", "1");
            dicParamDict.Add("sign_method", sign_method);
            dicParamDict.Add("timestamp", timestamp);
            dicParamDict.Add("v", v);

            sign = SignTopRequest(dicParamDict, strsecret, sign_method);

            string strPostParam = string.Format(@"app_key={0}&method={1}&sign={2}&timestamp={3}&v={4}&sign_method={5}&format={6}&ref_ent_id={7}&begin_date={8}&end_date={9}&bill_type={10}&page_size={11}&page={12}",
                 app_key, method, sign, timestamp, v, sign_method, strformat, ref_ent_id, begin_date, end_date, bill_type, page_size, page);
            strPostParam = strPostParam.Replace(":", "%3A");

            string strPostUrl = string.Format(@"http://gw.api.taobao.com/router/rest?{0}", strPostParam);

            var client = new RestClient(strPostUrl);
            client.Timeout = -1;
            var request = new RestRequest(Method.POST);
            IRestResponse response = client.Execute(request);
            Console.WriteLine(response.Content);
            tb_msgOut.Text = response.Content;
        }

平台签名代码简单修改一下就能用icon-default.png?t=O83Ahttps://open.taobao.com/doc.htm?docId=101617&docType=1

        /// <summary>
        /// 码上平台签名算法
        /// </summary>
        /// <param name="parameters"></param>
        /// <param name="secret"></param>
        /// <param name="signMethod"></param>
        /// <returns></returns>
        public static string SignTopRequest(IDictionary<string, string> parameters, string secret, string signMethod)
        {
            // 第一步:把字典按Key的字母顺序排序
            IDictionary<string, string> sortedParams = new SortedDictionary<string, string>(parameters, StringComparer.Ordinal);
            IEnumerator<KeyValuePair<string, string>> dem = sortedParams.GetEnumerator();

            // 第二步:把所有参数名和参数值串在一起
            StringBuilder query = new StringBuilder();
            if (signMethod.Equals("md5")) //签名的摘要算法,可选值为:hmac,md5,hmac-sha256
            {
                query.Append(secret);
            }
            while (dem.MoveNext())
            {
                string key = dem.Current.Key;
                string value = dem.Current.Value;
                if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value))
                {
                    query.Append(key).Append(value);
                }
            }

            // 第三步:使用MD5/HMAC加密
            byte[] bytes;
            if (signMethod.Equals("hmac"))
            {
                HMACMD5 hmac = new HMACMD5(Encoding.UTF8.GetBytes(secret));
                bytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(query.ToString()));
            }
            else
            {
                query.Append(secret);
                MD5 md5 = MD5.Create();
                bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(query.ToString()));
            }

            // 第四步:把二进制转化为大写的十六进制
            StringBuilder result = new StringBuilder();
            for (int i = 0; i < bytes.Length; i++)
            {
                result.Append(bytes[i].ToString("X2"));
            }

            return result.ToString();
        }

调用结果:

以上就是调用过程,有问题欢迎交流咨询!

祝大家元旦快乐!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

再见理想~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值