SaaS開發入門 阿里軟件平臺HelloWorld開發實例
原創【51CTO獨家特稿】51CTO推出的"
阿里軟件的商業模式 阿里軟件有一個旺旺軟件平臺,將自己開發的在線軟件接入,就可以讓阿里巴巴的電子商務客戶使用。阿里巴巴是全球最大的電子商務網絡公司,擁有超過1億的注冊用戶數。如果能將自己開發的軟件推銷給這個龐大的客戶群,將會獲得巨大的回報。而阿里軟件的旺旺平臺就是這樣一個集軟件開發、接入、銷售和服務一體的在線軟件運營平臺。 在阿里旺旺軟件平臺上,只要你的軟件做得好,吸引了大量用戶來訂購,哪怕你的軟件每月只收一元錢,每月都能獲得相當數量的銷售收入。這正是阿里旺旺軟件平臺最吸引人的獨特商業模式! 然而,要想在阿里旺旺軟件平臺上賺錢,先得搞清旺旺平臺是怎樣運作的。下圖展示了阿里旺旺軟件平臺的基本商業模式: 阿里旺旺軟件平臺實際上是阿里巴巴旗下所有用戶的軟件桌面。任何一個阿里巴巴的用戶,包括B2B、淘寶、支付寶、雅虎、阿里媽媽和口碑網的用戶,都可以隨時進入到旺旺軟件的桌面來,使用各種在線軟件。當然,在阿里巴巴旗下的各個網站中,也有眾多的快捷啟動方式,直接將用戶引至相關的軟件應用中。 另一方面,阿里旺旺軟件平臺也是ISV(獨立軟件提供商)的軟件營銷平臺,任何一個軟件開發商都可以將自己的軟件放到這個營銷平臺上。當有用戶訂購并使用你的軟件后,每月都能軟件使用費,而且是直接打入你的支付寶帳號。 阿里軟件平臺的開發和接入 阿里旺旺軟件平臺的開發和接入流程大致如下: 要在阿里旺旺軟件平臺進行開發,首先要注冊成為阿里軟件的ISV(獨立軟件提供商)。先進入http://www.alisoft.com/,然后找到其中的“開發者加盟”頁面。如果你已經有阿里巴巴中國站或淘寶網的帳號,可以直接登錄進入。如果沒有,需要注冊一個帳號并登陸。登錄之后,你將有一個工作平臺。第一次進入工作平臺的時候,需要填寫兩三項最基本的內容,此后即可開始使用工作平臺。 在ISV工作平臺,你可以注冊一個新的軟件,開始阿里旺旺軟件平臺的軟件營銷之旅。目前,阿里旺旺軟件平臺支持B/S和C/S兩類軟件。B/S類軟件可以給用戶更多的方式來進入你的軟件,從阿里巴巴的所有網站或旺旺客戶端都行。而C/S類軟件則只能從旺旺客戶端進入,因為旺旺客戶端是安裝在客戶電腦中的即時通訊軟件,只有旺旺客戶端才能接入C/S軟件。#p# Hello World 起步 我們來注冊一個名叫HelloWorld的軟件,輸入相關的軟件基本信息之后,在ISV工作平臺的軟件列表中,將有一個HelloWorld的軟件項目。其中,我們會得到兩個代碼,一個是APP ID(應用程序標識),另一個是CERT CODE(授權碼)。這兩個東西會在隨后與平臺的WEB API調用中經常用到。 當然,一個B/S結構的SaaS軟件,一定有一個URL入口。因此,在注冊完HelloWorld軟件后,還需要補充編輯更多的軟件信息,包括測試入口和使用入口的URL。這里,我們將HelloWorld程序的入口指定為http://helloworld.leadzen.cn/。當最終用戶從阿里軟件網站或旺旺客戶端,以及阿里巴巴其他網站進入我們的HelloWorld時,就會將瀏覽器引導到我們設置的URL,當然后面會跟上一大堆調用參數。 我們的HelloWorld程序是在自己的服務器上運行的,并非運行在阿里軟件的服務器上。因此,我們可以簡單地這樣理解,阿里旺旺軟件平臺是阿里巴巴用戶使用軟件的一個集中的啟動入口,但軟件一旦運行起來,就是主要是在ISV自己的服務上運行了。盡管將來阿里軟件會提供有*.aliapp.com域名的應用程序宿主環境,但這也是屬于與平臺不同的服務器。 阿里旺旺軟件平臺與ISV應用服務器之間的交互關系如下圖所示: 當最終用戶在阿里旺旺軟件平臺上使用我們的HelloWorld軟件時,我們的helloworld.leadzen.cn服務器會收到類似于下面的調用請求: 在這個請求中會帶上一系列參數,各個參數的解釋如下: ◆user_id 用于識別阿里巴巴用戶的標識信息 當我們的服務器收到這樣的請求之后,首先應該識別訪問用戶的身份是否合法,然后才能為其提供相關的服務。要驗證用戶的身份,這就需要調用阿里旺旺軟件平臺提供的validateUser服務。 目前,阿里旺旺軟件平臺采用的是REST風格的API調用格式。說白了就是從ISV的服務器發起一個HTTP請求到阿里旺旺軟件平臺,并得到以XML表示的返回結果。阿里旺旺軟件平臺提供了專門的API調用地址,開發測試的調用地址為: http://sipdev.alisoft.com/sip/rest 當軟件開發測試完成并上線使用之后,必須使用正式的API調用地址: http://sipdev.alisoft.com/sip/rest 例如,開發測試中的validateUser服務調用形式可能如下: 其中的參數分為系統級參數和應用級參數,以sip_開頭的是系統級參數,而其他的是應用級參數。 ◆sip_appkey ISV應用的唯一編號,即APP_ID 應用級參數說明如下: ◆userId 用戶ID,也是客戶端傳過來的那個user_id 其中的sip_sign參數,是一個簽名數據。為了防止非法的調用或調用數據被中途篡改,旺旺平臺要求每一個WEB API調用必須進行簽名。簽名過程中會用到注冊新軟件時得到的CERT_CODE,這是每個ISV必須保密的重要數據,旺旺平臺據此來識別ISV的真實身份。 ISV每個應用的CERT_CODE是放在待簽名數據的最前面。接下來是本次調用的所用到的參數按名稱的字母順排列,依次將參數名及參數值填充到待簽名數據中。待簽名的數據是用UTF8編碼的字節串。準備好待簽名數據之后,要進行一次標準的MD5散列運算,得到簽名結果。簽名的結果要求是用十六進制字節碼表示的字符串。 當調用旺旺平臺的各個參數準備好之后,即可創建一個HTTP請求到阿里旺旺軟件平臺的服務器。而調用參數可以直接拼接在 http://sipdev.alisoft.com/sip/rest 這一URL的最后,也可以作為POST數據來傳遞。 而阿里旺旺軟件平臺會在收到調用請求后,對調用參數的簽名進行比對,以確認ISV的身份。同事,還要核對token是否超期或失效,當然還要檢查timestamp是否在合理的范圍之內。 調用完成后,旺旺平臺會返回響應的HTTP報文。在這個報文的頭部信息中,有一個sip_status項目,是用來表示調用狀態的。而HTTP報文的內容,是以XML形式返回的結果。因此我們還需要從XML中解析出結果的內容。例如,validateUser返回的結果可能是下列形式: 不同WEB API接口所返回的數據格式是不同的,具體可以參閱阿里旺旺軟件平臺的在線文檔。地址:http://isp.alisoft.com/apidoc/api/apiIndex.html #p# HelloWorld源代碼 我們的HelloWorld程序實現了一個識別和驗證阿里巴巴用戶,并在頁面上輸出不同的結果。下面是HelloWorld的源程序。 Default.aspx Default.aspx.cs 本程序是用Visual Studio 2008編寫,并在ASP.NET 2.0環境下測試通過。如果你在測試本程序時遇到“服務器提交了協議沖突. Section=ResponseHeader Detail=CR 后面必須是 LF”的錯誤,請在你的web.config中的 ﹤configuration﹥ 中加入以下內容: 阿里旺旺軟件平臺開放了許多的WEB API調用接口。使用這些WEB API 你可以完成對阿里巴巴用戶的驗證,可以實現軟件的收費,可以調用實現支付寶的收付,可以獲取淘寶的商品及交易信息,可以實現物流的下單,等等。阿里軟件是阿里巴巴電子商務資源的服務調用中心,將會有越來越多的WEB API功能開放出來。 要了解阿里旺旺軟件平臺更多的開發細節,請查看阿里旺旺軟件平臺的文檔中心。網址是:http://wiki.isv.alisoft.com/index.php?tracelog=doc_from_home 【編輯推薦】
http://helloworld.leadzen.cn/?user_id=12176230&app_id=22875&app_instance_id=USERFB4B11067FC25455E32AC4F039B2CD38&token=
A2842BC81AE060C067017336B894F1B6E9AA7A8ED137A91903D1&target=
◆app_id 要使用的應用程序標識,也就是注冊軟件時的APP_ID
◆app_instance_id 應用程序實例標識,一個實例服務于一個人或一個公司
◆token 身份認證令牌,只有10秒生存期并一次有效
http://sipdev.alisoft.com/sip/rest?sip_appkey=22875
&sip_apiname=alisoft.validateUser
&sip_timestamp=2008-10-28 20:00:00
&sip_sign=23ed99f1a0a1eac5f3787d522afde1c4
&userId=12176230
&appId=22875
&appInstanceId=USERFB4B11067FC25455E32AC4F039B2CD38
&token= A2842BC81AE060C067017336B894F1B6E9AA7A8ED137A91903D1
系統級參數說明如下:
◆sip_apiname 服務名,這里是alisoft.validateUser,其他服務有各自的名稱
◆sip_timestamp 發出請求時間戳(yyyy-mm-dd hh:mm:ss.xxx),支持毫秒
◆sip_sign 請求數據的簽名,系統級參數和應用參數按順序拼接后簽名
◆appId 應用標識,即APP_ID
◆appInstanceId 應用實例ID,也是客戶端傳過來的app_instance_id
◆token 身份驗證令牌,也是客戶端傳過來的token
﹤?xml version="1.0" encoding="utf-8" ?﹥
﹤String﹥1﹤/String﹥
﹤%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %﹥
﹤!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"﹥
﹤html xmlns="http://www.w3.org/1999/xhtml"﹥
﹤head runat="server"﹥
﹤title﹥阿里旺旺軟件平臺HelloWorld示例﹤/title﹥
﹤/head﹥
﹤body﹥
﹤asp:Label ID="helloText" runat="server"﹥﹤/asp:Label﹥
﹤/body﹥
﹤/html﹥
using System;
using System.Web;
using System.Security.Cryptography;
using System.Text;
using System.Net;
using System.Xml;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//準備調用參數:
string userId = Request.Params["user_id"];
string appId = Request.Params["app_id"];
string appInstanceId = Request.Params["app_instance_id"];
string token = Request.Params["token"];
string sip_appkey = appId;
string sip_apiname = "alisoft.validateUser";
string sip_timestamp = DateTime.Now.ToString();
string data = "9c4fb3400ed711de80b8836e34b2dea8"; //CERT_CODE(注冊軟件時獲得的)
//在CERT_CODE之后,按參數名字母順序將參數名及其值拼接起來,用以對所有參數簽名:
data += "appId" + appId;
data += "appInstanceId" + appInstanceId;
data += "sip_apiname" + sip_apiname;
data += "sip_appkey" + sip_appkey;
data += "sip_timestamp" + sip_timestamp;
data += "token" + token;
data += "userId" + userId;
//用MD5算法對調用參數進行簽名:
MD5CryptoServiceProvider MD5 = new MD5CryptoServiceProvider();
string sip_sign = BitConverter.ToString(MD5.ComputeHash(Encoding.UTF8.GetBytes(data)));
sip_sign = sip_sign.Replace("-", ""); //一定要去除結果中的“-”!
//拼裝調用參數:
string api_params = "sip_appkey=" + sip_appkey + "&sip_apiname=" + sip_apiname +
"&sip_timestamp=" + sip_timestamp + "&sip_sign=" + sip_sign + "&userId=" + userId +
"&appId=" + appId + "&appInstanceId=" + appInstanceId + "&token=" + token;
//發出對阿里旺旺軟件平臺的WEB調用:
WebRequest request = WebRequest.Create("http://sipdev.alisoft.com/sip/rest?" + api_params);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
WebResponse response = request.GetResponse();
//根據返回結果進行相應處理
if (response.Headers.Get("sip_status") == "9999") //調用平臺成功
{
XmlDocument xml = new XmlDocument();
xml.Load(response.GetResponseStream());
switch (int.Parse(xml.SelectSingleNode("String").InnerText))
{
case 0: say("HelloWorld,歡迎合法使用者!"); break;
case 1: say(sip_sign + "HelloWorld,歡迎合法訂購者!"); break;
case -1: say("尚未訂購或被授權使用本軟件!"); break;
case -2: say("非法使用,拒絕提供軟件服務!"); break;
default: say("調用參數可能出現錯誤!"); break;
};
}
else
say("調用阿里旺旺軟件平臺失敗!");
}
private void say(string text)
{
helloText.Text = text; //helloText是一個ASP.NET的Label控件
}
}
﹤system.net﹥
﹤settings﹥
﹤httpWebRequest useUnsafeHeaderParsing="true"/﹥
﹤/settings﹥
﹤/system.net﹥