http://www.taobao.com/theme/tao_source/#prev
淘定开放平台
淘宝开放平台将为软件商提供淘宝网C2C电子商务平台的API接口(应用程序可编程接口)、开发环境以及商务应用环境。 我们可以利用那些API来开发属于自己的系统应用于阿里和淘宝,同时我们的作品也可以在该平台上进行销售,赚取利润...
费话不多说.软件的申请流程在网页上讲得比较清楚.有兴趣的朋友请上去自己看..今天主要是讲一个调用API里面的验证.. - - 这个东西也搞得我很郁闷....
|
API列表 |
|
接口分两个大类,一个是阿里的接口,主要是财务统计方面..另一个是淘宝的接口,主要是用户信息及商品的管理.
讲白了..所谓的调用API,也就是post一个url+para过去..然后阿里那边就返回一串XML格式的字符串,所以咱们再根据他们提供的文档,一一对应处理..
现在把调用的代码贴出来....我做的是.net版本的...阿里上面那个DEMO其实有问题的..在下面做了个修正..
Code
HttpRequest request = HttpContext.Current.Request;
//在软件应用中心跳转到ISV应用时的URL参数中取得,user_id、app_instance_id和token
string ASSPUserId = request.Params["user_id"];
string ASSPInstanceId = request.Params["app_instance_id"];
string appId = "15688"; //软件注册时获得
string token = request.Params["token"]; //每次点击生成不一样的token,并只有10秒钟有效
string code = "061b83808d4111dd8d048c81fce5951d";//软件注册时获得
string timestamp = System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");//时间获得当前系统时间
if (ASSPInstanceId != null)
{
//sip_sign签名字段的生成,将CERT CODE和所有接口要传的参数进行组合,再将组装好的字符串进行md5加密后转成16进制后得到一个32位的密文
string sipsign = code + "appId" + appId + "appInstanceId" + ASSPInstanceId + "sip_apinamealisoft.validateUser" + "sip_appkey" + appId + "sip_timestamp" + timestamp + "token" + token + "userId" + ASSPUserId;
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
sipsign = BitConverter.ToString(md5.ComputeHash(Encoding.UTF8.GetBytes(sipsign))).Replace("-", "");
//sip_sign生成END
//系统级参数拼装,包括sip_appkey、sip_apiname、sip_timestamp和sip_sign,sip_apiname是接口名这里举validateUser为例
string SIPdate = "sip_appkey=" + appId + "&sip_apiname=alisoft.validateUser&sip_timestamp=" + timestamp + "&sip_sign=" + sipsign;
//接口级参数拼装
string apidate = "&userId=" + ASSPUserId + "&appId=" + appId + "&appInstanceId=" + ASSPInstanceId + "&token=" + token;
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] postdata = encoding.GetBytes(SIPdate + apidate);//所有要传参数拼装
// Prepare web request
//目前阿里软件的服务集成平台(SIP)的接口测试地址是:http://sipdev.alisoft.com/sip/rest,生产环境地址是:http://sip.alisoft.com/sip/rest,
//这里使用测试接口先,到正式上线时需要做切换
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://sipdev.alisoft.com/sip/rest");
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.ContentLength = postdata.Length;
Stream newStream = myRequest.GetRequestStream();
// Send the data.
newStream.Write(postdata, 0, postdata.Length);
newStream.Close();
// Get response
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
string content = reader.ReadToEnd();
//解析接口返回值,这里选用XML格式的解析,接口默认返回是XML格式
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(content);
XmlNode xn = xmlDoc.SelectSingleNode("String");
//windowalert(content);
if (xn == null)
{
windowalert("接口返回签名无效");
}
else
{
XmlElement xe = (XmlElement)xn;
string result = xe.InnerText;
if ("1".Equals(result))
{
//如果是使用者。。。。
windowalert("应用的订购者");
}
else if ("0".Equals(result))
{
//如果是订阅者。。。。
windowalert("应用的使用者");
}
else if ("-1".Equals(result))
{
windowalert("尚未订购该应用");
}
else if ("-2".Equals(result))
{
windowalert("非法用户");
}
}
Console.ReadLine();
}
以上是page_load里面的代码...还有那个windowalert()的方法只是做一个输出的作用...
刚刚说到阿里的DEMO里面的问题是.那个DateTime.Now..
string timestamp = System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");//时间获得当前系统时间
DEMO的代码是
DateTime timestamp = System.DateTime.Now; //时间获得当前系统时间
结果在生成MD5验证字符串的时候...那个时间的值变为 yyyy/MM/dd hh:mm:ss 这样的话..永远都得不到正确的返回....
- - 结果弄了很久.什么都得不到....其中,只要自己把那个时间ToString()一下就可以了...