平台技術-SPI服務接取文檔
什麼是SPI
- 服務商提供介面(Service Provider Interface)
- API:平台提供介面並實現,您來呼叫
- SPI:平台提供標準,您來實現,可以有多個實作方
SPI進駐流程
##您需要做的是第三個方塊中的工作。 申請業務場景
- 首先,您得有一個擁有「三方應用程式」標籤的APP。點
- 這裡
- 進行申請。
- 申請成功後,進入這個應用程式的控制台,就能看見「API服務提供」選單
#注意:在概覽裡可以看見目前應用的AppKey和AppSecret。
- SPI呼叫方需要在TargetAppkey填寫這個AppKey,才能調到您實作的服務;
進入場景後可見到場景中的所有待實現的API,請見下圖。
######同時,場景旁邊是它的目前狀態。 ######閱讀文檔######開發前一定要先仔細閱讀文檔,點選「開發文檔」後可見到下圖。 ###############請嚴格遵守文件進行開發,具體關注:###- 请求方法:POST 或 GET;
- 请求编码:UTF-8 或 GBK;
- 公共请求参数、业务请求参数以及响应参数要与文档完全一致。返回值可参考返回示例;
- 异常处理:按照这里的规范返回指定的字段,开放平台藉此判断您的返回是成功或失败;
- 请求示例:可使用这里的示例替换上您的参数,测试您实现的服务。注意,这个方法对排查错误非常有用。
服务开发
服务开发完成是您自主研发的过程,您只需要严格按照文档中的协议进行开发即可。开发语言、部署环境都没有特别的要求。
为了安全,我们强烈建议您的服务要验证签名以及验证请求方的IP。为了方便您的开发,我们有SDK提供给你,SDK下载页面请看下图。
签名校验
必选!验签的目的是防止黑客恶意调用你的服务,确保服务发起来源是阿里平台。
目前验签方法只提供了JAVA、PHP、.NET三个版本的SDK,其它语言需要自行实现。
签名方法生成规则是:
- 将query参数、header参数存入一个map中备用。为了方便说明,这个map取名为params。注意:query中的sign参数不能放入params;
- 如果body中的类型是form-data,将body中的所以除文件以外的参数放入params。因为一些技术原因,通过form-data传递的文件不进行签名;
- 如果body中的类型是json或xml,暂时将body保存起来后面备用。为了方便说明 ,这段内容取名为body;
- 将params进行按key的字母先后顺序排序,然后遍历它,按key1 value2 key2 value2……的方式形成一个字符串,为了方便说明,后续称之为签名串。如果value为空,则用””来代替。如果body不为空,则在签名串最后增加body的所有内容;
- 在签名串的头和尾加上secret。这个secret是sp申请应用时获得的。至此,签名串生成好了;
- 对签名串进行md5以及hex,最后得到sign。总结一下,生成sign的公式是:
hex(md5(secret sorted(header_params url_params form_params) body) secret) - 最后,将生成的sign与从query中获取到的sign进行对比,即可校验签名的正确性。
验签示例代码如下:
#導入javax.servlet.ServletException;
導入javax.servlet.http.HttpServlet;
導入javax . servlet.http.HttpServletRequest;
導入javax.servlet.http.HttpServletResponse;
導入com.taobao.api.internal.spi.CheckResult;
com.taobao.api.internal. spi . {
CheckResult 結果 = SpiUtils.checkSign(req, "821bc8785f2409a942eec601e6071d");#chaoo.alo85); System.out.println(result.getRequestBody() );
}
#
}
#附註:HTTP請求中的URL參數編碼字元集、字串轉字節流進行MD5摘要時的字元集要保持一致,否則會導致含中文參數的簽章與TOP不一致。
IP來源校驗
必選!防止駭客截取到開放平台發動的HTTP請求,拿到別的地方進行重播攻擊。
淘寶開放平台閘道的出口IP段可以透過taobao.top.ipout.get來獲取,不定期更新,需要定時呼叫API以取得最新資料。
IP來源校驗示例代碼如下:
private static final long serialVersionUID = -7841738585932624564L;
protected void doPost(HttpServletRequest req, HttpServletResponse rsp) throws ServletException. # List<String> ipList = new ArrayList<String>();
ipList.add("140.205.144.0/24");
ipList.add("140.05.1 ipList.add("140.05.1 ("140.205.40.0 /24");
ipList.add("140.205.39.0/24");
ipList.add("140.205.51.0/24 5.56.0/24 ");
boolean isSuccess = SpiUtils.checkRemoteIp(req, ipList);
).write("access denied");
rsp.getWriter ().flush();
}
}
}
另一個做法是在HTTP Server上設定IP存取規則,例如在Nginx上設定只允許TOP的IP存取/taobao目錄:
allow 140.205.144.0/24;
allow 140.205.145.0/24;
allow 140.205.0/24;
allow 140.205.0/20011 ## allow 140.205.51.0/24 ;
allow 140.205.56.0/24;
deny all;
}
設定服務
點選「開發測試」進行下圖的頁面:
#這裡有兩個位址輸入方塊:
- #測試環境位址:此位址僅供測試使用。下一節詳細討論。
- 線上環境位址:當此SPI服務發佈上線後,線上環境呼叫的位址就是此URL。
測試服務
共有兩個地方或以發起測試,
#1) SPI測試工具。點擊本頁面的「進入測試」即可進入此工具。請見下圖:
預設情況下,只有一個測試案例:冒煙測試。這個測試只是由SPI測試工具依照協定拼裝一個HTTP請求發送給測試環境位址。
如果希望增加測試案例,請聯絡SPI平台負責人。
測試結束後,可以在測試詳情中查看這次HTTP請求的所有參數。您尤其要注意「回應訊息」中的內容,它可能會初步檢查你的服務是否正常。
2) API測試工具日常、沙箱環境:這裡的測試是對SPI完整流程進行的測試,是您的服務發佈上線前必不可少的步驟,只有這個步驟通過,才能證明您的服務運作正常。
呼叫一個TOP API,TOP把請求路由到您的測試環境位址,您需要把AppKey告訴API呼叫者,後者將在它前面加上「10"填入參數targetAppkey。
您也可以親自客串api呼叫者,前提條件是場景owner先將此API加入沙箱,然後您申請呼叫此api的權限。要注意的是,沙箱測試的targetAppkey也是您的appkey前面加上「10」;還有,簽署金鑰是沙箱金鑰。
API的呼叫方法可以去這裡看文件。
申請發布
測試結束後,點選「完成測試」回到圖5的場景清單頁。如果您覺得可以將新配置的URL發布生效,點選「申請發布」。如果此場景配置成“需要審核”,則需要SPI平台負責人審核通過方可發布生效;否則,可立即生效。
FAQ
- 關於此文件暫時還沒有FAQ