-
ASP语言使用淘宝接口遇中文字符签名失败解决方法
网络 2015/9/19 23:17:39由于淘宝没提供ASP的SDK,所以调用接口得自己写程序解决。
淘宝API的使用都不多说了,主要是官方提供的签名例子是英文的,没牵涉到中文,只说明了签名后提交拼接的字符串要用utf-8编码,其实这里的说明是有点问题的。
根据淘宝的说明,使用英文进行查询,然后Server.UrlEncode后提交,返回正常。使用中文后,返回签名失败。把中文按utf-8编码传递后,依然失败。
后来以为是GB2312编码问题,把所有代码包括MD5.ASP改为UTF-8,问题依旧。
后来查找网上的文章,发现了问题所在。
原来,拼接字符串并签名时,所有中文必须按gb2312处理,要进行Server.UrlEncode编码,然后拼接后提交的参数值也必须Server.UrlEncode编码。
以下是我测试的代码:
'=============================================== '函 数 名:Format_Time(s_Time) '函数用途:API时间格式化函数 '版权所有:我要溜溜吧 '=============================================== Function Format_Time(s_Time) Dim y, m, d, h, mi, s If IsDate(s_Time) = False Then Exit Function y = cstr(year(s_Time)) m = cstr(month(s_Time)) If len(m) = 1 Then m = "0" & m d = cstr(day(s_Time)) If len(d) = 1 Then d = "0" & d h = cstr(hour(s_Time)) If len(h) = 1 Then h = "0" & h mi = cstr(minute(s_Time)) If len(mi) = 1 Then mi = "0" & mi s = cstr(second(s_Time)) If len(s) = 1 Then s = "0" & s Format_Time = y & "-" & m & "-" & d & " " & h & ":" & mi & ":" & s End Function '淘吧签名 Function taobaoSign(url) taobaoSign = UCase(md5(AppSecret& Replace(Replace(url,"&",""),"=","") &AppSecret)) End Function Dim urlstr,signstr,url,k Dim timestr: timestr=Format_Time(now) k=Server.UrlEncode("韩版皮鞋") signstr="app_key="&AppKey&"&fields=title&format=json&method=taobao.tbk.item.get&partner_id=top-apitools&q="&k&"&sign_method=md5×tamp="×tr&"&v=2.0" urlstr ="app_key="&AppKey&"&fields=title&format=json&method=taobao.tbk.item.get&partner_id=top-apitools&q="&Server.UrlEncode(k)&"&sign_method=md5×tamp="×tr&"&v=2.0" url = "http://gw.api.taobao.com/router/rest?"&urlstr&"&sign="&taobaoSign(signstr) Response.write url
阅读(2584) 分享(0)