codecamp

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

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

[TOC]

1. 产品介绍

开发者可以通过国际标准的OAuth2.0授权机制,在用户授权的情况下,得到用于换取用户信息的令牌。在拿到用户的授权令牌后,通过调用用户信息共享接口,获取用户的公开信息。

1.1 准入条件

小程序开发者均可使用。

1.2 计费模式

不收费。

1.3 案例

步骤一:用户首次进入小程序首页,若无进行业务交互,则无需唤起会员授权

支付宝小程序授权案例

步骤二:当需要访问用户时,以弹框的形式确认授权(静默授权不弹窗)。建议:用户授权放在需要展示用户相关信息的环节,请勿一开始就引导授权。 支付宝小程序我的钱包

步骤三:用户确认授权后,可以在该小程序的会员中心查看会员信息,授权完成。 支付宝小程序开发文档案例

2. 接入指引

支付宝小程序接入指引

2.1 添加“获取会员信息”功能

在小程序详情页的功能列表中添加“获取会员信息”。

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

2.2 客户端获取authcode

my.getAuthCode({
  scopes: 'auth_user', // 主动授权:auth_user,静默授权:auth_base
  success: (res) => {

  
    if (res.authCode) {
      // 认证成功
      // 调用自己的服务端接口,让服务端进行后端的授权认证,并且种session,需要解决跨域问题
      my.httpRequest({
        url: 'http://isv.com/auth', // 该url是自己的服务地址,实现的功能是服务端拿到authcode去开放平台进行token验证
        data: {
          authcode: res.authcode
        },
        success: () => {
          // 授权成功并且服务器端登录成功
        },
        fail: () => {
          // 根据自己的业务场景来进行错误处理
        },
      });
    }
  },
});

2.3 服务端获取access_token

服务器端调用alipay.system.oauth.token接口换取授权访问令牌,开发者可通过获取到的auth_code换取access_token和用户ID。auth_code作为换取access_token的票据,每次用户授权完成,回调地址中的auth_code将不一样,auth_code只能使用一次,一天未被使用自动过期。具体可参见文档alipay.system.oauth.token。 开放平台服务端SDK的java调用示例如下:

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
request.setGrantType("authorization_code");
request.setCode("4b203fe6c11548bcabd8da5bb087a83b");
request.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");
AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
if(response.isSuccess()){
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}

  • 认证成功 把uid&token种到session中,在session有效期内就不需要每次都走授权平台进行验证。
  • 认证失败 则返回失败原因,需要再重新走授权流程。
  • 注意 如果仅是为了授权或获取用户ID,那么到此授权结束。

2.4 服务端获取会员信息

  • 如果服务端要获取用户信息,那么不仅需要完成以上步骤——客户端获取authCode、authCode换取token,还需要token换取用户信息,该步骤需使用接口:alipay.user.info.share。
  • 注意: 服务端获取的用户信息进行落库,jsapi获取的用户信息用来界面展示,不建议把前端获取到用户信息透传给服务端。 代码以java示例

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest();
AlipayUserInfoShareResponse response = alipayClient.execute(request,accessToken);
if(response.isSuccess()){
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}

2.5 客户端获取会员信息

前端通过 my.getAuthUserInfo 接口获得的用户信息主要是用来进行界面展示,如果想在数据库存储,请用上面步骤,服务器端接口调用流程进行获取用户信息。

my.getAuthCode({
  scopes: 'auth_user',
  success: (res) => {
    my.getAuthUserInfo({
      success: ({ nickName, avatar }) => {
        console.log({ nickName, avatar })
      }
    });
  },
});
返回字段:nickName, avatar

3. API列表

接口名称 描述
my.getAuthCode 获取用户授权码
alipay.system.oauth.token 换取授权访问令牌
alipay.user.info.share 服务端获取会员信息
my.getAuthUserInfo 客户端获取会员信息

4. 补充说明

  • 服务端获取不到会员信息
    • 原因1:涉及到敏感信息如真实姓名、手机号、证件号等,这些敏感信息不会返回
    • 原因2:调用的接口错误,请使用接口:alipay.user.info.share

  • 获取会员信息,服务端报 isv.invalid-token 无效 token
    • 原因1:获取授权码scope 必须传 auth_user
    • 原因2:调用的接口错误,请使用接口:alipay.user.info.share

支付宝小程序介绍
支付宝小程序 接入支付
温馨提示
下载编程狮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; }