饿了么开放平台如何获取用户身份
为了改善商家体验,不需要每次进入应用都重新授权,建议ISV在授权完成之后,调用eleme.user.getUser接口获取userId(openId),维护openId与token的映射关系,每次进入页面获取用户身份,如果授权过则无需重新授权。另外饿了么开放平台会在消息推送中带上userId(openId)字段。
如何获取用户身份
获取identity(换取用户身份的凭证)
通过identity换取openid
使用条件
必须在商户版客户端中打开
必须是平台应用jssdk
如何获取identity
通过构造授权url获取identity
修改获取token的授权url的scope,将all改为identity即可.如果不知道如何构建获取token的授权url,请查看授权说明
进入页面之后,会自动授权同时跳转到redirect_uri
地址demo如下:
[redirect_uri]?identity=%2BrmW2SRZorzSlT%2Bu7VtVs%2FAGt0ztqMOjdjeZV6cIsgl%2FH4WB5iqfhn6DPEIbi9Of&state=xyz
注:需对identity需要进行decode操作
通过js-sdk获取identity(目前仅支持pc)
注意:仅支持在与appKey对应的redirect_uri同源的地址下发起。
1.引入js-jssdk(需要最新版js-sdk)
2.获取identity
eleme.getCodeForIdentity({ appKey: '', // 必填 isProduction: true //是否正式环境,非必填,默认值为true,正式环境 }).then(identity => { console.log(identity) }).catch(error => { console.log(error) })
通过identity获取openid
目前已在java-sdk中封装了该方法,其余语言sdk正在陆续更新。
使用授权码换取访问令牌,客户端向认证服务器发起访问令牌的请求。
示例及参数说明如下:
HTTP header中需要携带Authorization请求头,Basic值的算法如下(+号表示字符串连接):
base64_encode(key + ":" + secret)
请求示例:
POST /identity HTTP/1.1 Host: open-api-sandbox.shop.ele.me Authorization: Basic OU9LV2JtVXJLcjoyZGRiZTc2NTkzOWZhZjI5ZDEwNTU3MDg3MzVjOGViNw== Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&code=+rmW2SRZorzSlT+u7VtVs/AGt0ztqMOjdjeZV6cIsgl/H4WB5iqfhn6DPEIbi9Of &redirect_uri=[redirect_uri]&client_id=9OKWbmUrKr
CURL示例如下:
curl -i -XPOST -H "Content-Type: application/x-www-form-urlencoded" -H "Authorization: Basic OU9LV2JtVXJLcjoyZGRiZTc2NTkzOWZhZjI5ZDEwNTU3MDg3MzVjOGViNw==" -d "grant_type=authorization_code&code=+rmW2SRZorzSlT+u7VtVs/AGt0ztqMOjdjeZV6cIsgl/H4WB5iqfhn6DPEIbi9Of&redirect_uri=[redirect_uri]&client_id=9OKWbmUrKr" https://open-api-sandbox.shop.ele.me/identity
参数说明:
参数名参数类型参数含义是否必选参数值
grant_typeString授权模式必选授权码模式固定为"authorization_code"
codeString表示上一步获得的授权码(identity)必选示例值:+rmW2SRZorzSlT+u7VtVs/AGt0ztqMOjdjeZV6cIsgl/H4WB5iqfhn6DPEIbi9Of
redirect_uriString授权回调的重定向URI必选必须与A步骤中的该参数值保持一致
client_idString应用的key,创建应用时获得必选示例值:hvBW15GiSi