注意:
要进行第三方调用,开发者须要开通相应的权限。例如对于当面付,开发者和商户都须要开通“当面付”,开发者才能帮助商户发起当面付的收单请求。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
// 此处必须带上商户受权
|