codecamp

支付宝小程序API 获取会员基础信息

my.getOpenUserInfo

简介

my.getOpenUserInfo 可获取支付宝会员的基础信息(头像图片地址、昵称、性别、国家码、省份、所在市区)。

如需获取支付宝会员标识(user_id),请调用 my.getAuthCode 和 alipay.system.oauth.token 接口。

相关问题请参见下文 获取会员基础信息 FAQ。

使用限制

  • 本接口在 IDE 模拟器中返回的数据为虚拟数据;真实数据请以真机调试效果为准
  • 基础库 1.16.4 或更高版本;支付宝客户端 10.1.35 或更高版本,若版本较低,建议采取 兼容处理
  • 本功能需要用户主动触发才能激活,所以该功能不由 API 直接调用,需用 <button> 组件 的点击来触发。将 <button> 组件 open-type 的值设置为 getAuthorize,当用户点击并同意之后,可以通过my.getOpenUserInfo 接口获取到支付宝服务器返回的基础信息,若用户未授权,直接调用my.getOpenUserInfo 接口,则无法返回正确信息。
  • 需添加 获取会员基础信息 功能后,才可调用此接口。
  • 不能通过 my.getOpenUserInfo 接口获取支付宝会员标识(user_id)。

示例代码

唤起授权框,推荐兼容方案如下:

<!-- .axml -->
<button a:if="{{canIUseAuthButton}}" open-type="getAuthorize" 
onGetAuthorize="onGetAuthorize" onError="onAuthError" 
scope='userInfo'>
    会员基础信息授权
</button>
Button 属性说明

属性 说明
open-type getAuthorize为授权组件(固定值)。
scope userInfo(固定值)。
onGetAuthorize 授权成功回调(在回调里可以调用获取信息的接口)。
onError 授权失败回调(包括用户拒绝和系统异常)。

获取用户基础信息

用户点击同意后,即可通过 my.getOpenUserInfo() 获取用户基础信息:

// .js 
onGetAuthorize(res) {
     my.getOpenUserInfo({
      fail: (res) => {
      },
      success: (res) => {
        let userInfo = JSON.parse(res.response).response // 以下方的报文格式解析两层 response
      }
    });
    },

您可以通过以下方式获取用户信息中的某个参数。

以获取用户信息中的昵称为例:console.log(JSON.parse(res.response).response.nickName)

返回 res 报文格式

  • 成功返回 res 报文格式示例如下:

{"response": "{"response": {"code": "10000","msg": "Success","countryCode": "CN","gender": "f","nickName": "XXX","avatar": "https://tfs.alipayobjects.com/images/partner/XXXXXXXX","city": "南通市","province": "江苏省"}}"}
  • 未接入“获取用户基础信息”的功能包,返回 res 报文格式示例如下:

{"response":"{"response":{"code":"40003","msg":"Insufficient Conditions","subCode":"isv.invalid-auth-relations","subMsg":"无效的授权关系"}}"}

success 回调函数

入参为 res 对象,Object 类型,属性被解析后如下表所示:

注:

- 在 IDE 0.70 或以上的版本支持返回全部 6 个参数,由于安全原因,其中 avatar 和 nickName 是当前登录 IDE 用户的真实值,其它 4 个属性为 mock 数据,在真机上上显示为真实值。
- 若用户未设置 avatar 和 nickName,则不会返回这两个参数。

名称 类别 类型 是否必填 描述
avatar 基础类型 String 选填 头像图片地址
nickName 基础类型 String 选填 昵称
gender 基础类型 String 必填 性别,男对应“m”,女对应“f”
countryCode 基础类型 String 必填 国家码
province 基础类型 String 必填 省份
city 基础类型 String 必填 所在市区

获取会员基础信息 FAQ

更新时间:2020-03-11 17:24:12

调用 my.getOpenUserInfo,报错“无效的授权关系”,如何处理?

用户 主动触发 才能发起获取会员基础信息请求,不能由 API 直接获取会员基础信息,需使用 button 组件 的“点击”动作来触发操作。需要将 <button> 组件 open-type 的值设置为 getAuthorize,并将 scope 设为 userinfo ,示例代码如下:

<!-- .axml -->
<button a:if="{{canIUseAuthButton}}" open-type="getAuthorize" 
onGetAuthorize="onGetAuthorize" onError="onAuthError" 
scope='userInfo'>
    会员基础信息授权
</button>

“获取会员信息”、“获取会员基础信息”两个功能包有什么区别?

自 2019 年5月25日 起,已不再支持添加“获取会员信息”功能包。

已添加“获取会员信息”功能包的小程序,在使用“获取会员基础信息”功能之前,仍需添加“获取会员基础信息”功能包。

调用 alipay.user.info.share 报错“ISV 权限不足”如何处理?

alipay.user.info.share 是“获取会员信息”功能包中使用的 API。“获取会员信息”功能包已于2019 年5月25日升级,在此日期之前未签约“获取会员信息”功能包的小程序无法再调用 alipay.user.info.share,请使用“获取会员基础信息”功能包。

调用 my.getOpenUserInfo 报错 "ISV权限不足"如何处理?

“获取会员信息”功能包已下架,若之前创建的应用已添加了“获取会员信息”的功能包则能正常调用接口,未添加的则无法再添加此功能。 新创建的应用请使用 获取会员基础信息 my.getOpenUserInfo 接口。

\1. 在小程序开发管理后台的 功能列表 中,点击 添加功能

添加功能.png

\2. 添加 获取会员基础信息 功能包。

获取会员基础信息.png

为什么接入“获取会员基础信息”功能并调用成功后,在获取用户信息时获取不到用户的昵称?

部分支付宝用户没有设置昵称,故获取不到用户昵称。

小程序可以同时获取手机号、头像、昵称等公开信息吗?

不能在同一个弹框中同时获取会员手机号和头像、昵称。

可分别获取会员手机号,和获取用户头像及昵称。

“获取会员基础信息” 可以获取支付宝用户的 user_id 吗?

不可以。获取支付宝用户的 user_id 需要在服务器端调用 alipay.system.oauth.token 。

“获取会员基础信息”可以获取用户身份证、真实姓名等信息吗?

不可以。“获取会员基础信息”只能获取用户头像、昵称、性别、所在地区等信息。

小程序获取会员基础信息时弹出两次授权窗,如何处理?

正常获取会员基础信息需要弹窗两次进行授权确认:一次是 my.getAuthCode 获取用户授权码的授权框, 另一次是 my.getOpenUserInfo 中获取用户基础信息的授权框。

my.getAuthCode 使用静默授权方法(令 scopes 为 auth_base)即可实现只出现一个授权弹框。示例代码如下:

my.getAuthCode({
  scopes: ['auth_base'],
  success: (res) => {
    my.alert({
      content: res.authCode,
    });
  },
});
支付宝小程序API 周期扣款
支付宝小程序API 获取会员收货地址
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

支付宝小程序开发文档

支付宝小程序 快速示例

支付宝小程序 小程序快速示例

支付宝小程序 框架

支付宝小程序 组件

支付宝小程序组件 基础组件

支付宝小程序组件 无障碍访问

支付宝小程序 扩展组件

支付宝小程序扩展组件 UI组件

支付宝小程序 API

支付宝小程序 开发工具

支付宝小程序 云服务

支付宝小程序 Serverless

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }