平台技術-SPI服務接取文檔


什麼是SPI

  • 服務商提供介面(Service Provider Interface)
    • API:平台提供介面並實現,您來呼叫
    • SPI:平台提供標準,您來實現,可以有多個實作方

image

SPI進駐流程

image

image

##您需要做的是第三個方塊中的工作。

申請業務場景
  • 首先,您得有一個擁有「三方應用程式」標籤的APP。點
      這裡
    • 進行申請。
    • 申請成功後,進入這個應用程式的控制台,就能看見「API服務提供」選單
  • #注意:在概覽裡可以看見目前應用的AppKey和AppSecret。

AppKey:有兩個作用.

場景Owner(就是引導您接入SPI的人)將此AppKey與場景綁定後,您就擁有了某場景的開發權,在此頁面就能看見這個場景。
  • SPI呼叫方需要在TargetAppkey填寫這個AppKey,才能調到您實作的服務;
AppSecret:開放平台(TOP)在呼叫您實作的服務時,會對報文進行簽名(詳見簽名相關章節)。簽名時就是使用這個金鑰。您需要使用這個密鑰進行驗簽。

image

我們拿「氣象」場景舉例。當場景Owner將此場景與您的AppKey綁定以後,在這個頁面就能看見「氣象」場景。

此時的場景狀態是「開發中」。除了這個狀態,場景還有「上線運行中」、「升級中」等幾個狀態。

image

「開發中」至「上線運行中」:申請發布審核通過;

「上線運行中」至「升級中」:點選進入升級後,對任何一個API點選升級版本。點擊「取消升級」或申請發布並透過審核會重新回到「上線運行」。

image進入場景後可見到場景中的所有待實現的API,請見下圖。

######同時,場景旁邊是它的目前狀態。 ######閱讀文檔######開發前一定要先仔細閱讀文檔,點選「開發文檔」後可見到下圖。 ###############請嚴格遵守文件進行開發,具體關注:###
  • 请求方法:POST 或 GET;
  • 请求编码:UTF-8 或 GBK;
  • 公共请求参数、业务请求参数以及响应参数要与文档完全一致。返回值可参考返回示例;
  • 异常处理:按照这里的规范返回指定的字段,开放平台藉此判断您的返回是成功或失败;
  • 请求示例:可使用这里的示例替换上您的参数,测试您实现的服务。注意,这个方法对排查错误非常有用。

服务开发

服务开发完成是您自主研发的过程,您只需要严格按照文档中的协议进行开发即可。开发语言、部署环境都没有特别的要求。

为了安全,我们强烈建议您的服务要验证签名以及验证请求方的IP。为了方便您的开发,我们有SDK提供给你,SDK下载页面请看下图。

image

签名校验

必选!验签的目的是防止黑客恶意调用你的服务,确保服务发起来源是阿里平台。

目前验签方法只提供了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进行对比,即可校验签名的正确性。

验签示例代码如下:

導入java.io.IOException;

#導入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來源校驗示例代碼如下:

public class TestHttpServlet extends HttpServlet {
 
    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目錄:

location /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;
}
##################################################################

設定服務

點選「開發測試」進行下圖的頁面:

image

#這裡有兩個位址輸入方塊:

  • #測試環境位址:此位址僅供測試使用。下一節詳細討論。
  • 線上環境位址:當此SPI服務發佈上線後,線上環境呼叫的位址就是此URL。

測試服務

共有兩個地方或以發起測試,

#1) SPI測試工具。點擊本頁面的「進入測試」即可進入此工具。請見下圖:

image

預設情況下,只有一個測試案例:冒煙測試。這個測試只是由SPI測試工具依照協定拼裝一個HTTP請求發送給測試環境位址。

如果希望增加測試案例,請聯絡SPI平台負責人。

測試結束後,可以在測試詳情中查看這次HTTP請求的所有參數。您尤其要注意「回應訊息」中的內容,它可能會初步檢查你的服務是否正常。

image

2) API測試工具日常、沙箱環境:這裡的測試是對SPI完整流程進行的測試,是您的服務發佈上線前必不可少的步驟,只有這個步驟通過,才能證明您的服務運作正常。

呼叫一個TOP API,TOP把請求路由到您的測試環境位址,您需要把AppKey告訴API呼叫者,後者將在它前面加上「10"填入參數targetAppkey。

您也可以親自客串api呼叫者,前提條件是場景owner先將此API加入沙箱,然後您申請呼叫此api的權限。要注意的是,沙箱測試的targetAppkey也是您的appkey前面加上「10」;還有,簽署金鑰是沙箱金鑰。

API的呼叫方法可以去這裡看文件。

申請發布

測試結束後,點選「完成測試」回到圖5的場景清單頁。如果您覺得可以將新配置的URL發布生效,點選「申請發布」。如果此場景配置成“需要審核”,則需要SPI平台負責人審核通過方可發布生效;否則,可立即生效。

FAQ

  • 關於此文件暫時還沒有FAQ
#