支付宝小程序:Step-3:ISV 发起代开发授权

小编:啊南 1152阅读 2020.12.28

前提条件
  • 系统服务商(ISV)已创建第三方应用且已上线。

  • 商家已创建小程序。

ISV 发起授权

  1. ISV 登录 开放平台控制台 > 选择需要的第三方应用 > 商家授权应用 > 点击 发起授权

  2. 获取授权二维码和链接,并发送给商家,引导商家使用支付宝客户端扫描二维码或在浏览器中访问链接。

    第三方应用获取授权的授权凭证。

    通过 app_auth_code 换取 app_auth_token
    1. 商家授权成功后,界面会跳转至 ISV 定义的回调页面(即 redirect_uri 参数对应的 url ),在回调页面请求中会带上当次授权的授权码 app_auth_code 和 ISV 的 app_id,示例如下:

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

    1. ISV 得到 app_auth_code 之后,通过调用接口换取 app_auth_token,详细的参数说明、示例代码、错误码等请参考文档 alipay.open.auth.token.app。

      ISV 通过 app_auth_code?可以 单个/批量?换取 app_auth_token、授权商家的 userId 以及授权商家 APPID。

      注意:

      • 应用授权的 app_auth_code 是唯一的。

      • app_auth_code 使用一次后失效,单个授权的有效期为一天(从生成 app_auth_code 开始的24小时)未被使用自动过期;批量授权的有效期为 10 分钟。

      • app_auth_token,永久有效,除非商家解除授权或者再次执行授权操作。

      AlipayClientalipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID,APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY,"RSA2"); AlipayOpenAuthTokenAppRequest request = new AlipayOpenAuthTokenAppRequest(); request.setBizContent(    "{" +""grant_type":"authorization_code"," +"              "code":"1cc19911172e4f8aaa509c8fb5d12F56""+ "     }");AlipayOpenAuthTokenAppResponse response =alipayClient.execute(request);

      同步响应参数说明:

      参数

      名称

      类型

      必填

      描述

      code

      错误码

      String

      错误码

      msg

      消息

      String

      错误消息

      tokens

      授权令牌列表

      String

      格式请参考下方列表 “tokens 对应的value值说明”。

      tokens 对应的 value?值说明:

      参数

      名称

      类型

      必填

      描述

      app_auth_token

      令牌信息

      String

      授权令牌信息

      app_refresh_token

      刷新令牌

      String

      刷新令牌

      auth_app_id

      授权方应用 ID

      String

      授权方应用 ID

      expires_in

      令牌有效期

      String

      有效期

      re_expires_in

      刷新令牌有效时间

      String

      刷新令牌有效期

      userid

      支付宝用户标识

      String

      支付宝用户标识

      同步响应结果示例:

      说明:单个授权通过 alipay.open.auth.token.app 接口只能换取一个授权令牌 app_auth_token,批量授权能换取多个授权令牌 app_auth_token,如下为批量授权情况下的结果示例。

      {"alipay_open_auth_token_app_response": {  “code”:”10000”,  “msg”:”Success”,  "tokens":  [   {    "app_auth_token":"201712BB_D0804adb2e743078d1822d536956X34",    "app_refresh_token":"201712BB_d5b15d53f7b4fd5aa649f176ca97X34",    "auth_app_id": "2017120501354689",    "expires_in": 31536000,    "re_expires_in": 32140800,    "user_id": "2088302181262340"    },    {    "app_auth_token":"201712BB_D0d8c15dc7e4c9dba5e5767b3b37X34",    "app_refresh_token":"201712BB_d96f65e20c745c3998a8452baae5X34",    "auth_app_id": "2017120501354690",    "expires_in": 31536000,    "re_expires_in": 32140800,    "user_id": "2088302181262340"     },     {    "app_auth_token":"201712BB_D335c7b153345a9915a851cf9bd9X34",    "app_refresh_token":"201712BB_ddeeb32d9d145948a488b1058e08X34",    "auth_app_id": "2017120501354688",    "expires_in": 31536000,    "re_expires_in": 32140800,    "user_id": "2088302181262340"    }   ]  },      "sign":"TR5xJkWX65vRjwnNNic5n228DFuXGFOCW4isWxx5iLN8EuHoU2OTOeh1SOzRredhnJ6G9eOXFMxHWl7066KQqtyxVq2PvW9jm94QOuvx3TZu7yFcEhiGvAuDSZXcZ0sw4TyQU9+/cvo0JKt4m1M91/Quq+QLOf+NSwJWaiJFZ9k="}
    2. 刷新授权令牌。若非首次授权,需刷新业务老 app_auth_token。

      调用接口 alipay.open.auth.token.app 接口换取授权令牌 app_auth_token。

      接口请求示例(grant_type=authorization_code)请参见 SDK 接入说明。

      AlipayClientalipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID,APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");AlipayOpenAuthTokenAppRequest request = new AlipayOpenAuthTokenAppRequest();request.setBizContent("{" + ""grant_type":"refresh_token "," +"    "refresh_token":"201509BBdcba1e3347de4e75ba3fed2c9abebE36"" + "  }");AlipayOpenAuthTokenAppResponse response = alipayClient.execute(request);

      同步响应参数说明同步响应参数说明:

      参数

      名称

      类型

      必填

      描述

      code

      消息码

      String

      错误码

      msg

      消息

      String

      错误消息

      app_auth_token

      令牌信息

      String

      授权令牌信息

      app_refresh_token

      刷新令牌

      String

      刷新令牌

      auth_app_id

      授权方应用 ID

      String

      授权方应用 ID

      expires_in

      令牌有效期

      String

      有效期

      re_expires_in

      刷新令牌有效时间

      String

      刷新令牌有效期

      userid

      支付宝用户标识

      String

      支付宝用户标识

      同步响应结果示例:

      {  "alipay_open_auth_token_app_response": {    "code": "10000",    "msg": "Success",    "app_auth_token": "201712BB_D179ffeb8dd48f89f81952768ca1B34",    "app_refresh_token": "201712BB_d42f729c267473cad3ab89b5ba63C34",    "auth_app_id": "2017120501354688",    "expires_in": 31536000,    "re_expires_in": 32140800,    "user_id": "2088302181262340"  },  "sign": "KvbI8Z/KgM/QSt76OyBuQLyUSCnSiwcaXLaBdnH9hYZgmx2rnW5aiGX11W6Yu0HdRt0ckscgr7Ymy5Ux5X4xA0UxxTmvNWUU0/lZ8wu+2jX+tFU1OMV/dEKgcBGqaTGPhYqEKndXAmpHgKc/LMD62ump2BmeM2V8R5zLe0fGz8E="}

      注意:换取令牌和刷新令牌返回报文不一样,具体请参考上方两个示例。

    通过消息通知获取授权 token

    除了通过 app_auth_code 调用接口换取授权 token 之外,ISV 也可以通过支付宝开放平台推送的授权通知直接获取到授权 token。

    在商家 确认授权成功?后,ISV 在第三方应用的开发配置中填写的应用网关会收到授权通知,授权通知中带有 app_auth_token、商家小程序的 APPID 等参数。

    快速查看 app_auth_token

    完成授权后,ISV 也可以登录 开放平台控制台 > 三方服务 > 对应的第三方应用 > 商家授权应用,快速查看 app_auth_token。

    商家签约

  3. 代申请用户信息

  4. 代商家调用接口

    ISV 代替商家发起请求时请务必带上 app_auth_token,否则支付宝将认为是本应用替自己发起的请求。请注意 app_auth_token 是 POST 请求参数,不是 biz_content 的子参数。

    在 SDK 中带上 app_auth_token 代码示例:

    request.putOtherTextParam("app_auth_token","201611BB888ae9acd6e44fec9940d09201abfE16");。

    ISV 代替商家发起请求时,POST 公共请求参数中的 app_id 应填写第三方应用的 APPID;如果业务参数 biz_content 中需要 APPID,则应填写商家应用的 APPID。

    更多代商家调用接口的公共参数和用法说明,请参见 代调用 OpenAPI 说明。

    解除授权

    若 ISV 和商家之间的代开发服务终止,商家可登录 开放平台控制台 > 进入小程序应用详情页 > 点击?开发设置,查看第三方授权管理 > 点击?停止授权,即可解除授权。

    image

关联标签: