PAYATHON 2026

支付宝登录已申请,能否开发支付登录能力?

支付小周

明确结论

申请“支付宝登录”后,可以先开发和联调授权流程,但提交申请并不代表应用已经获得全部会员信息的访问权限。

如果“获取会员信息”页面中的字段全部显示为不可用,通常是因为应用尚未取得相应接口或字段权限。能力仍在审核、签约配置未完成,或应用类型不支持该能力,也可能导致这种情况。

支付宝登录和支付宝支付是两套独立能力,需要分别申请。开通登录能力不会自动开通支付能力。

需要检查的配置

可以在支付宝开放平台中依次检查以下配置:

  1. 应用状态

    应用需要完成创建和必要的主体认证。如果能力仍显示“申请中”“待补充材料”或“审核未通过”,就不能使用正式权限调用。

  2. 支付宝登录能力状态

    检查该能力是否显示“已开通”或其他明确的可用状态。仅仅提交申请还不够。

  3. 接口权限

    检查应用是否拥有以下接口或对应新版接口的调用权限:

    • alipay.system.oauth.token
    • alipay.user.info.share

    应用类型、开放平台页面版本和隐私政策不同,可申请的接口及返回字段也可能不同。具体权限以当前应用后台显示的内容为准。

  4. 授权回调地址

    配置接收授权码 auth_code 的回调地址。生产环境应使用稳定的 HTTPS 地址,实际传入的地址必须与后台配置一致。

  5. 应用密钥

    完成应用公钥或支付宝公钥配置。服务端换取令牌和调用会员信息接口时,需要使用应用私钥签名。

  6. 应用资料和隐私材料

    如果控制台要求补充资料,可能包括:

    • 应用名称、图标和功能说明;
    • 应用首页或实际使用场景;
    • 用户协议;
    • 隐私政策;
    • 申请会员信息的用途说明;
    • 对应业务页面截图或演示材料;
    • 主体资质或行业资质。

    是否需要提供这些资料,以及具体格式要求,应以能力申请页面和审核提示为准。

登录授权流程

通常需要完成以下流程:

用户进入业务页面
    ↓
跳转支付宝授权页面
    ↓
用户确认授权
    ↓
支付宝回调业务系统,并携带 auth_code
    ↓
服务端调用 alipay.system.oauth.token 换取 access_token
    ↓
服务端调用 alipay.user.info.share 获取已授权的会员信息

授权地址可以按以下形式构造:

https://openauth.alipay.com/oauth2/publicAppAuthorize.htm
?app_id=你的APP_ID
&scope=auth_user
&redirect_uri=URL编码后的回调地址
&state=随机状态值

需要注意:

  • redirect_uri 必须经过 URL 编码;
  • state 应由服务端生成,并在回调时完成校验,以防止 CSRF;
  • auth_code 通常只能使用一次,而且有有效期。收到后应立即由服务端换取令牌;
  • 实际支持哪些 scope,应以当前能力文档和应用权限为准。

Java 服务端示例

下面的示例使用支付宝 Java SDK。类名可能随 SDK 版本调整,依赖版本应以开放平台当前文档为准。

使用授权码换取访问令牌:

AlipayClient alipayClient = new DefaultAlipayClient(
    "https://openapi.alipay.com/gateway.do",
    APP_ID,
    APP_PRIVATE_KEY,
    "json",
    "UTF-8",
    ALIPAY_PUBLIC_KEY,
    "RSA2"
);

AlipaySystemOauthTokenRequest tokenRequest =
    new AlipaySystemOauthTokenRequest();

tokenRequest.setGrantType("authorization_code");
tokenRequest.setCode(authCode);

AlipaySystemOauthTokenResponse tokenResponse =
    alipayClient.execute(tokenRequest);

if (!tokenResponse.isSuccess()) {
    throw new IllegalStateException(
        tokenResponse.getCode() + ": " + tokenResponse.getSubMsg()
    );
}

String accessToken = tokenResponse.getAccessToken();

取得 access_token 后,再读取会员信息:

AlipayUserInfoShareRequest userInfoRequest =
    new AlipayUserInfoShareRequest();

AlipayUserInfoShareResponse userInfoResponse =
    alipayClient.execute(userInfoRequest, accessToken);

if (!userInfoResponse.isSuccess()) {
    throw new IllegalStateException(
        userInfoResponse.getCode() + ": " + userInfoResponse.getSubMsg()
    );
}

String userId = userInfoResponse.getUserId();
String nickName = userInfoResponse.getNickName();
String avatar = userInfoResponse.getAvatar();

即使接口调用成功,nickName、avatar 等字段也不一定会返回。具体返回范围取决于用户授权、应用权限、账号状态和支付宝当前的数据合规策略。

字段全部不可用时如何排查

如果后台中的会员字段显示为灰色或标记为不可用,可以按以下顺序排查:

  1. 检查能力申请是否已经通过审核;
  2. 查看页面是否要求补充隐私政策、应用场景或资质材料;
  3. 确认当前查看的 APP_ID 与申请登录能力时使用的是同一个;
  4. 确认该应用类型是否支持这项能力;
  5. 检查应用是否已获得 alipay.user.info.share 或对应会员信息接口的调用权限;
  6. 在沙箱或开发环境中测试用授权码换取令牌;
  7. 根据接口返回的 code、sub_code 和 sub_msg,判断问题出在权限、签名、令牌还是参数;
  8. 如果控制台没有补充资料的入口,但能力仍然不可用,可以携带 APP_ID、能力申请状态截图和接口错误信息,咨询支付宝开放平台技术支持。

注意事项

  • 登录能力用于完成支付宝账号授权登录,不能代替当面付、手机网站支付或 App 支付等支付产品。
  • 不要在浏览器或客户端中保存应用私钥,也不要让前端直接调用需要签名的开放接口。
  • access_token、refresh_token 和会员标识属于敏感数据,应妥善保存,避免写入公开日志。
  • 不要将昵称或手机号作为用户的唯一标识。应优先使用接口实际返回的稳定用户标识,并按照当前开放平台关于 user_id、open_id 的规则设计账号绑定。
  • 当前端页面显示字段不可用时,增加请求参数无法绕过权限限制。必须完成相应的能力申请或资料审核。

备注:内容仅供参考。