注意:
要進行第三方調用,開發者須要開通相應的權限。例如對於當面付,開發者和商戶都須要開通「當面付」,開發者才能幫助商戶發起當面付的收單請求。html
如下將從URL拼接及引導受權開始作詳細介紹:java
url拼接規則:
https://openauth.alipay.com/oauth2/appToAppAuth.htm?app_id=APPID&redirect_uri=ENCODED_URL
api使用場景舉例:開發者經過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_id等,須要注意的是支付寶僅保證app_auth_code,app_id參數的有效性。支付寶請求開發者回調頁面示例以下:blog
1
|
http:
//example.com/doc/toAuthPage.html?app_id=2015101400446982&app_auth_code=ca34ea491e7146cc87d25fca24c4cD11
|
接口名稱: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
// 此處必須帶上商戶受權
|