OAuth授权接入流程

准备工作

在进行美团OAuth2.0授权登录接入之前,在美团开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,获得相应的AppID和AppSecret,可开始接入流程。

授权流程说明

美团OAuth2.0授权登录让美团用户授权第三方应用或网站访问用户在美团的特定数据,在美团用户允许授权之后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行美团开放平台相关接口调用。 美团OAuth2.0授权登录目前支持authorization_code模式,适用于拥有server端的应用授权。该模式整体流程为:

  1. 第三方发起美团账号授权请求,美团用户允许授权第三方应用后,美团会重定向到第三方网站,并且带上授权临时票据code参数;
  2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
  3. 通过access_token获取用户信息
  4. 通过open_id或access_token进行接口调用,帮助用户实现相关操作。

获取oauth2授权时序图

获取oauth2授权

第一步:请求CODE

第三方携带相关参数访问以下链接,请求授权code:

https://openapi.waimai.meituan.com/oauth/authorize?app_id={}&redirect_uri={}&response_type=code&scope=&state={}

参数说明

参数 是否必须 说明
app_id 应用唯一标识
redirect_uri 授权回调链接,请使用urlEncode对链接进行处理
response_type 填code
scope 应用授权作用域,填"" 即可
state 用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验

用户允许授权后,将会重定向到redirect_uri的网址上,并且带上code和state参数

redirect_uri?code=CODE&state=STATE

请求示例:

https://openapi.waimai.meituan.com/oauth/authorize?app_id=1&redirect_uri=http%3A%2F%2Fwww.meituan.com&response_type=code&scope=&state=123456

授权界面

第二步:通过code获取access_token

第三方调用以下接口,通过code获取access_token

https://openapi.waimai.meituan.com/oauth/access_token?app_id={}&secret={}&code={}&grant_type=authorization_code

参数说明

参数 是否必须 说明
app_id 应用唯一标识
secret 应用密钥AppSecret
code 填写第一步获取的code参数
grant_type 填authorization_code

返回说明

正确的返回示例:

{
    "access_token":"ACCESS_TOKEN", //接口调用凭证
    "expires_in":7200, //access_token接口调用凭证超时时间
    "refresh_token":"REFRESH_TOKEN",//用户刷新access_token
}

错误的返回示例:

{
    "error_code":10001, //异常code
    "erroe_msg":"请求参数不合法", 异常信息
}

第三步:获取用户信息

第三方调用以下接口,通过access_token获取用户信息

https://openapi.waimai.meituan.com/oauth/userinfo

参数说明

参数 是否必须 说明
app_id 应用唯一标识
secret 应用密钥AppSecret
access_token 填写上一步获取的access_token

返回说明

正确的返回:

{
    "openid":"OPENID", //openId
    "nickname": "NICKNAME", //用户昵称
    "desensitization_phone":"182****0600",//脱敏手机号
    "avatar": "https://xxxxx",//用户头像
}

错误的返回:

{
    "error_code":10001, //异常code
    "erroe_msg":"请求参数不合法", 异常信息
}

通过openId获取用户信息

第三方调用以下接口,通过open_id获取用户信息

https://openapi.waimai.meituan.com/oauth/userinfo_openid

参数说明

参数 是否必须 说明
app_id 应用唯一标识
secret 应用密钥AppSecret
open_id 用户open_id

返回说明

正确的返回:

{
    "openid":"OPENID", //openId
    "nickname": "NICKNAME", //用户昵称
    "desensitization_phone":"182****0600",//脱敏手机号
    "avatar": "https://xxxxx",//用户头像
}

错误的返回:

{
    "error_code":10001, //异常code
    "erroe_msg":"请求参数不合法", 异常信息
}

刷新access_token有效期(如有需要)

access_token是调用授权关系接口的调用凭证,由于access_token有效期较短,当access_token超时后,可以使用refresh_token进行刷新,access_token刷新结果有两种:

  1. 若access_token已超时,那么进行refresh_token会获取一个新的access_token,新的超时时间;
  2. 若access_token未超时,那么进行refresh_token不会改变access_token,但超时时间会刷新,相当于续期access_token。 refresh_token拥有较长的有效期,当refresh_token失效的后,需要用户重新授权。

第三方请求以下链接进行refresh_token:

https://openapi.waimai.meituan.com/oauth/refresh_token?app_id={}&secret={}&refresh_token={}&grant_type=refresh_token

参数说明

参数 是否必须 说明
app_id 应用唯一标识
secret 应用密钥AppSecret
refresh_token 填写通过access_token获取到的refresh_token参数
grant_type 填refresh_token

返回说明

正确的返回:

{
"access_token":"ACCESS_TOKEN", //接口调用凭证
"expires_in":7200, //access_token接口调用凭证超时时间
"refresh_token":"REFRESH_TOKEN",//用户刷新access_token
}

错误的返回:

{
"error_code":40029, //异常code
"erroe_msg":"invalid code", //异常信息
}

注意:

1、Appsecret 是应用接口使用密钥,泄漏后将可能导致应用数据泄漏、应用的用户数据泄漏等高风险后果;存储在客户端,极有可能被恶意窃取(如反编译获取Appsecret);

2、access_token 为用户授权第三方应用发起接口调用的凭证(相当于用户登录态),存储在客户端,可能出现恶意获取access_token 后导致的用户数据泄漏、相关接口功能被恶意发起等行为;

3、refresh_token 为用户授权第三方应用的长效凭证,仅用于刷新access_token,但泄漏后相当于access_token 泄漏,风险同上。

请将secret、用户数据(如access_token)放在App云端服务器,由云端中转接口调用请求。