京東金融商戶平臺對接開發
公司最近在搞專案推廣,要對京東金融平臺做對接,於是就開始了一段神坑的道路。
京東金融的開放平臺剛開始做,網上基本都很難找到資料,入住的商戶也是寥寥無幾,它的所有url都可以在瀏覽器中的開啟不需要專門的開發者工具。
1.建立商戶號
要在您的服務窗中使用京東金融開放產品的介面能力,您需要先去京東金融開放平臺(open.jr.jd.com),在積木系統中建立登記您的積木商戶號,並提交稽核,稽核通過後會為您生成應用唯一標識(AppID),並且可以申請開通開放產品使用許可權,通過APPID您的應用才能呼叫開放產品的介面能力。需要詳細瞭解開放平臺建立應用步驟請參考《京東金融開放平臺積木號建立指南》。
使用場景舉例:開發者可以使用該方案獲取使用者的openId、頭像、暱稱等基礎資訊。想要呼叫該介面,需要先在積木系統中申請開通積木商戶號,如下圖所示:
1.1 配置服務窗環境
開發者呼叫介面前需要先在開發者中心配置服務窗環境,如下圖所示:
所需配置內容請參考:欄位說明
1.2 呼叫介面獲取使用者資訊
如果使用者在京東金融App客戶端中訪問第三方網頁,服務窗可以通過京東金融網頁授權機制,來獲取使用者基本資訊,進而實現業務邏輯。
具體而言,網頁授權流程分為四步:
1、引導使用者進入授權頁面同意授權,獲取code; 2、通過code換取網頁授權user_token;
3、如果需要,開發者可以重新整理網頁授權user_token,避免過期;
4、通過網頁授權user_token和openid獲取使用者京東金融使用者資訊。
關於網頁授權回撥域名的說明
1、在京東金融服務窗請求使用者網頁授權之前,開發者需要先到開放平臺官網中的開發者中心頁配置授權回撥域名。請注意,這裡填寫的是域名(是一個字串),而不是URL,因此請勿加http://等協議頭; 2、授權回撥域名配置規範為全域名,比如需要網頁授權的域名為:www.jd.com,配置以後此域名下面的頁面http://www.jd.com/index.html 、 http://www.jd.com/error2.aspx 都可以進行OAuth2.0鑑權。但http://order.jd.com 、 http://jinku.jd.com 無法進行OAuth2.0鑑權 3、如果服務窗登入授權給了第三方開發者來進行管理,則不必做任何設定,由第三方代替服務窗實現網頁授權即可
關於網頁授權的scope的說明
1、以base為scope發起的網頁授權,是用來獲取進入頁面的使用者的基本資訊。授權需要使用者手動同意。
2、以white為scope發起的網頁授權,是用來獲取使用者的小白信用資訊的。這種授權同樣需要使用者手動同意,並且由於使用者同意過,所以無須關注,就可在授權後獲取該使用者的小白信用資訊。
關於網頁授權user_token
1、京東金融網頁授權是通過OAuth2.0機制實現的,在使用者授權給服務窗後,服務窗可以獲取到一個網頁授權特有的介面呼叫憑證(網頁授權user_token),通過網頁授權user_token可以進行使用者資訊介面呼叫,例如:獲取使用者小白信用資訊;
1.3 使用者同意授權,獲取code
在確保京東金融服務窗賬號擁有授權作用域(scope引數)的許可權的前提下(服務號獲得高階介面後,預設擁有scope引數中的base和white),引導關注者開啟如下頁面:
https://open.jr.jd.com/oauth2/authorization/forward?appid=APPID&redirect_uri=REDIRECT_URI&scope=SCOPE&state=STATE
若提示“該連結無法訪問”,請檢查引數是否填寫錯誤,是否擁有scope引數對應的授權作用域許可權。
尤其注意:由於授權操作安全等級較高,所以在發起授權請求時,京東金融會對授權連結做正則強匹配校驗,如果連結的引數順序不對,授權頁面將無法正常訪問
參考連結
Scope為white
https://open.jr.jd.com/oauth2/authorization/forward?appid=JD0000004&scope=white&redirect_uri=https://www.jd.com&state=321cba
尤其注意:跳轉回調redirect_uri,應當使用https連結來確保授權code的安全性。
引數說明
下圖為scope等於base時的授權頁面:
1.4 使用者同意授權後
如果使用者同意授權,頁面將跳轉至 redirect_uri/?code=CODE&state=STATE。若使用者禁止授權,則重定向後不會帶上code引數,僅會帶上state引數redirect_uri?state=STATE
code說明 :
code作為換取user_token的票據,每次使用者授權帶上的code將不一樣,code只能使用一次,2小時未被使用自動過期。
1.5 通過code換取網頁授權user_token
首先請注意,這裡通過code換取的是一個特殊的網頁授權user_token。服務窗可通過下述介面來獲取網頁授權user_token。如果網頁授權的作用域為white,則本步驟中獲取到網頁授權user_token的同時,也獲取到了openid,white式的網頁授權流程即到此為止。
尤其注意:由於服務窗的AppKey和獲取到的user_token安全級別都非常高,必須只儲存在伺服器,不允許傳給客戶端。後續重新整理user_token、通過user_token獲取使用者小白信用資訊等步驟,也必須從伺服器發起。
請求方法
獲取code後,請求以下連結獲取user_token:
https://open.jr.jd.com/oauth2/code/c2t?code=CODE
引數說明
引數 是否必須 說明
code 是 填寫第一步獲取的code引數
返回說明
正確時返回的JSON資料包如下:
{
"result_code":0,
"result_msg":”Success”,
"signature":"",
"result_data":{
"user_token":"ACCESS_TOKEN",
"timeout":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID"
}
}
引數 描述
錯誤時京東金融會返回JSON資料包如下(示例為Code無效錯誤):
{
"result_code":1017,
"result_msg":” code失效”,
"signature":"",
"result_data":””
}
3.3 重新整理user_token(如果需要)
由於user_token擁有較短的有效期,當user_token超時後,可以使用refresh_token進行重新整理,refresh_token擁有較長的有效期(30天),當refresh_token失效的後,需要使用者重新授權。
請求方法
獲取第二步的refresh_token後,請求以下連結獲取user_token:
https://open.jr.jd.com/oauth2/authorization/refresh_token?appid=APPID&openid=OPENID&refresh_token=REFRESH_TOKEN
引數 是否必須 說明
返回說明
正確時返回的JSON資料包如下:
{
"result_code": 0,
"result_msg": "成功",
"signature": null,
"userToken": {
"user_token": "USERTOKEN",
"timeout": 7200,
"refresh_token": "REFRESHTOKEN",
"openid": "OPENID",
"scope": "base,white"
}
}
引數 描述
錯誤時京東金融會返回JSON資料包如下(示例為refresh_token不存在錯誤):
{
"result_code":1015,
"result_msg":"refreshTokenBean None",
"signature":null,
"userToken":null
}
- 全域性返回碼說明
服務窗每次呼叫介面時,可能獲得正確或錯誤的返回碼,開發者可以根據返回碼資訊除錯介面,排查錯誤。
全域性返回碼說明如下:
大致的文件就是這麼些了,新的平臺資料太少了,而且有點很噁心的是回撥域名現在這個只支援https , 所以在專案中還是要配置Nginx 轉發的