对接阿里药品追溯码的一些经验,记录一下!
阿里平台获取接口文档:
不罗嗦,直接上代码:
/// <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}×tamp={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;
}
平台签名代码简单修改一下就能用https://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();
}
调用结果:
以上就是调用过程,有问题欢迎交流咨询!
祝大家元旦快乐!