第三方應用受權

概述

  • 商戶對第三方應用受權成功以後,第三方應用能夠幫助商戶完成相應的業務邏輯,好比能夠代替商戶發起當面付的收單請求;
  • 受權採用標準的OAuth 2.0流程,只有第三方應用纔可以使用該受權方案;
  • 第三方應用受權目前只對OpenAPI(2.0)接口有效,適用於全部的第三方應用

注意:
要進行第三方調用,開發者須要開通相應的權限。例如對於當面付,開發者和商戶都須要開通「當面付」,開發者才能幫助商戶發起當面付的收單請求。html

受權流程

  1. 開發者申請第三方應用
  2. 應用申請成功以後,申請當前應用下的接口權限
  3. 按照規則拼接受權頁面的連接,而且引導商戶受權;
  4. 受權成功後,在回調頁面上獲取app_auth_code;
  5. 經過接口,將app_auth_code換取爲app_auth_token;
  6. 使用app_auth_token代替商戶發起接口請求。

如下將從URL拼接及引導受權開始作詳細介紹:java

第一步:URL拼接與引導受權

url拼接規則:https://openauth.alipay.com/oauth2/appToAppAuth.htm?app_id=APPID&redirect_uri=ENCODED_URLapi

使用場景舉例:開發者經過URL拼接方案,構造受權頁面,而且引導商戶受權。app

url參數說明:url

參數 參數名稱 類型 必填 描述 範例
app_id 開發者應用的AppId String 開發者第三方應用的AppId 2015101400446982
redirect_uri 回調頁面 String 是 通過轉義 的url連接(url必須以http或者https開頭) http%3A%2F%2Fexample.com

PC受權頁面交互:spa

H5受權頁面交互:code

注:H5受權頁只能在支付寶客戶端裏使用,不然會報錯,以下。htm

第二步:獲取app_auth_code

當商戶受權成功後,會跳轉至開發者定義的回調頁面,支付寶會在回調頁面請求中加入參數,包括用戶受權碼app_auth_code、開發者的app_id等,須要注意的是支付寶僅保證app_auth_code,app_id參數的有效性。支付寶請求開發者回調頁面示例以下:blog

1
http: //example.com/doc/toAuthPage.html?app_id=2015101400446982&app_auth_code=ca34ea491e7146cc87d25fca24c4cD11

第三步:使用app_auth_code換取app_auth_token

接口名稱:alipay.open.auth.token.apptoken

換取受權訪問令牌,開發者可經過獲取到的app_auth_code換取app_auth_token和商戶的userId以及AppId。app_auth_code做爲換取app_auth_token的票據,每次商戶受權帶上的app_auth_code將不同,app_auth_code只能使用一次,一天未被使用自動過時。 app_auth_token有效期爲365天,而且能夠被無限次刷新。

接口請求示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
REQUEST URL: https: //openapi.alipay.com/gateway.do
REQUEST METHOD: POST
CONTENT:
     app_id= 2014070100171525
     method=alipay.open.auth.token.app
     charset=GBK
     sign_type=RSA
     timestamp= 2014 - 01 - 01 08 : 08 : 08
     sign=rXaTEfJ7WTDsP1DWRPHARW3uOr19+fzlngMCJBvbhP1XPEa9qZwGGng9oMDloABpJMT2SGeOj46+BUkqCGRO9fH90Vci3hOH01BfYnbhJz3ADK2h7gpjlponx4/sxELN6f2GXi51XKiHKnxMA9XpLLo68q+roY0M/ZFQ1UdnqeM=
     version= 1.0
     biz_content={ "grant_type" : "authorization_code" , "code" : "bf67d8d5ed754af297f72cc482287X62" }
 
// 當使用app_auth_code換取app_auth_token時,biz_content的內容以下:
{
     "grant_type" : "authorization_code" ,
     "code" : "bf67d8d5ed754af297f72cc482287X62"
}
 
// 當要刷新app_auth_token時,須要使用refresh_token,biz_content的內容以下:
{
     "grant_type" : "refresh_token" ,
     "refresh_token" : "201510BB0c409dd5758b4d939d4008a525463X62"
}

請求參數說明

參數 參數名稱 類型 必填 描述 範例
grant_type 受權類型 String 若是使用app_auth_code換取token,則爲authorization_code,若是使用refresh_token換取新的token,則爲refresh_token authorization_code
code 受權碼 String 與refresh_token二選一,用戶對應用受權後獲得,即第一步中開發者獲取到的app_auth_code值 bf67d8d5ed754af297f72cc482287X62
refresh_token 刷新令牌 String 與code二選一,可爲空,刷新令牌時使用 201510BB0c409dd5758b4d939d4008a525463X62

同步響應結果示例

1
2
3
4
5
6
7
8
9
10
11
12
13
{
     "alipay_open_auth_token_app_response" : {
         "code" : "10000" ,
         "msg" : "Success" ,
         "app_auth_token" : "201510BBb507dc9f5efe41a0b98ae22f01519X62" ,
         "app_refresh_token" : "201510BB0c409dd5758b4d939d4008a525463X62" ,
         "auth_app_id" : "2013111800001989" ,
         "expires_in" : 31536000 ,
         "re_expires_in" : 32140800 ,
         "user_id" : "2088011177545623"
     },
     "sign" : "TR5xJkWX65vRjwnNNic5n228DFuXGFOCW4isWxx5iLN8EuHoU2OTOeh1SOzRredhnJ6G9eOXFMxHWl7066KQqtyxVq2PvW9jm94QOuvx3TZu7yFcEhiGvAuDSZXcZ0sw4TyQU9+/cvo0JKt4m1M91/Quq+QLOf+NSwJWaiJFZ9k="
}

同步響應參數說明

參數 參數名稱 類型 必填 描述 範例
app_auth_token 商戶受權令牌 String 經過該令牌來幫助商戶發起請求,完成業務 201510BBaabdb44d8fd04607abf8d5931ec75D84
user_id 受權商戶的ID String 受權者的PID 2088011177545623
auth_app_id 受權商戶的AppId String 受權商戶的AppId(若是有服務窗,則爲服務窗的AppId) 2013111800001989
expires_in 令牌有效期 Number 交換令牌的有效期,單位秒,換算整天的話爲365天 31536000
re_expires_in 刷新令牌有效期 Number 刷新令牌有效期,單位秒,換算整天的話爲372天 32140800
app_refresh_token 刷新令牌時使用 String 刷新令牌後,咱們會保證老的app_auth_token一小段時間內繼續可用,請及時替換爲最新token 201510BB09dece3ea7654531b66bf9f97cdceE67

第四步:代替商戶發起請求

獲取app_auth_token後,開發者就能夠幫助商戶發起請求,其餘參數與商戶自身發起請求時保持徹底一致,只是POST請求參數中增長了app_auth_token這個參數。

注意:

  • 代替商戶發起請求時請務必帶上app_auth_token,不然支付寶將認爲是本應用替本身發起的請求。app_auth_token是POST請求參數,不是biz_content的子參數。
  • 代替商戶發起請求時,POST公共請求參數中的app_id應填寫開發者的app_id;若是業務參數biz_content中須要AppId,則應填寫商戶的AppId。

以服務窗修改菜單接口爲例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
商戶自身發起請求:
 
REQUEST URL: https: //openapi.alipay.com/gateway.do
REQUEST METHOD: POST
CONTENT:
     app_id= 2014072300007148
     method=alipay.mobile. public .menu.add
     charset=GBK
     sign_type=RSA
     timestamp= 2014 - 07 - 24 03 : 07 : 50
     biz_content={ "button" :[{ "actionParam" : "ZFB_HFCZ" , "actionType" : "out" , "name" : "話費充值" },{ "name" : "查詢" , "subButton" :[{ "actionParam" : "ZFB_YECX" , "actionType" : "out" , "name" : "餘額查詢" },{ "actionParam" : "ZFB_LLCX" , "actionType" : "out" , "name" : "流量查詢" },{ "actionParam" : "ZFB_HFCX" , "actionType" : "out" , "name" : "話費查詢" }]},{ "actionParam" : "http://m.alipay.com" , "actionType" : "link" , "name" : "最新優惠" }]}
     sign=e9zEAe4TTQ4LPLQvETPoLGXTiURcxiAKfMVQ6Hrrsx2hmyIEGvSfAQzbLxHrhyZ48wOJXTsD4FPnt+YGdK57+fP1BCbf9rIVycfjhYCqlFhbTu9pFnZgT55W+xbAFb9y7vL0MyAxwXUXvZtQVqEwW7pURtKilbcBTEW7TAxzgro=
     version= 1.0
 
開發者應用代替商戶發起請求:
 
REQUEST URL: https: //openapi.alipay.com/gateway.do
REQUEST METHOD: POST
CONTENT:
     app_id= 2015054598940398                 // 此處爲開發者應用的AppId
     method=alipay.mobile. public .menu.add    // 接口名不變
     charset=GBK
     sign_type=RSA
     timestamp= 2014 - 07 - 24 03 : 07 : 50
     biz_content={ "button" :[{ "actionParam" : "ZFB_HFCZ" , "actionType" : "out" , "name" : "話費充值" },{ "name" : "查詢" , "subButton" :[{ "actionParam" : "ZFB_YECX" , "actionType" : "out" , "name" : "餘額查詢" },{ "actionParam" : "ZFB_LLCX" , "actionType" : "out" , "name" : "流量查詢" },{ "actionParam" : "ZFB_HFCX" , "actionType" : "out" , "name" : "話費查詢" }]},{ "actionParam" : "http://m.alipay.com" , "actionType" : "link" , "name" : "最新優惠" }]}      //業務參數不變
     sign=e9zEAe4TTQ4LPLQvETPoLGXTiURcxiAKfMVQ6Hrrsx2hmyIEGvSfAQzbLxHrhyZ48wOJXTsD4FPnt+YGdK57+fP1BCbf9rIVycfjhYCqlFhbTu9pFnZgT55W+xbAFb9y7vL0MyAxwXUXvZtQVqEwW7pURtKilbcBTEW7TAxzgro=                                       // 此處使用開發者的私鑰進行加簽
     version= 1.0
     app_auth_token=publicpB9ea460ff5b5c468c9ccf5e967dc34963  // 此處必須帶上商戶受權
相關文章
相關標籤/搜索