【平台介绍】
饿了么商家开放平台作为一个服务集成平台,致力于满足商户的多样经营性需求,提供合作伙伴更多的平台资源,服务商户接入,提供给商户丰富的经营能力。
同时,开放平台将通过提供一系列非业务性的,例如测试工具、API调试工具、服务监控告警、日志分析统计等解决方案,让开发者专注于业务系统的开发,降低开发者的接入成本。
【授权说明】
应用接入开放平台需要获取商户的隐私数据(如账号、商品、订单、店铺信息等),为保证商户数据的安全与隐私,应用需要取得商户的授权,即获取访问商户数据的授权令牌 Access Token。因此,应用需要引导商户完成使用饿了么商家帐号“登录授权”的流程。该流程采用国际通用的OAuth2.0标准协议作为商户身份验证与授权协议。
具体可参考:饿了么接口文档
【获取方式】
OAuth 2.0的运行流程如下图,摘自RFC 6749。
步骤如下:
(A)商户打开开发者的应用客户端以后,应用要求商户给予授权。
(B)商户同意给予应用授权,开放平台给应用颁发授权码。
(C)应用使用上一步获得的授权码,向开放平台的认证服务器申请访问令牌。
(D)认证服务器对应用进行认证以后,确认无误,返回访问令牌给到应用。
(E)客户端应用使用访问令牌,向开放平台的资源服务器申请访问数据资源。
(F)开放平台资源服务器确认访问令牌有效,同意向客户端应用开放资源。
根据应用的类型不同,授权分为客户端模式授权和授权码模式授权。
如果使用商户账号登录开放平台且创建的个人类型应用,请使用OAuth2.0的客户端授权模式。
如果注册了服务商账号,创建了企业类型的应用,需要使用OAuth2.0的授权码模式引导商户授权。
普通商户账号只能创建个人类型的应用,用于为自己的饿了么店铺进行功能开发。服务商账号目前只能创建企业类型的应用,可以为多个不同的商户提供服务。
授权请求入口地址
1)获取授权码(code)
2)获取访问令牌(access token)
注意事项:授权成功后得到的access_token正式环境有效期为30天,沙箱环境有效期是1天(expires_in的单位为秒),应用需要自行存储这个access_token,并且在每次接口访问前判断token是否失效(失效的判断逻辑是token已经过了expires_in的有效期或者接口调用返回的code为UNAUTHORIZED),如果失效需要重新授权获取,在有效期内token可以不能每次接口调用前都授权访问一次。有效期内重复授权访问会导致上一次的access_token失效。
授权码授权模式流程
企业类型的应用的开发是指企业独立完成应用的设计开发后,作为商品服务推广给商户使用。
需要注意的是,连锁店商户授权后所有连锁店的商户都会对该应用授权。
(A)商户访问客户端应用,后者将前者导向开放平台认证服务器。
(B)商户自行选择是否给予应用授权。
(C)假设商户给予授权,认证服务器将商户导向客户端事先指定的"重定向URI"(redirection URI),同时附上一个授权码code。
(D)客户端收到授权码,使用授权码向认证服务器申请访问令牌。这一步是在客户端的后台服务器上完成的,对商户不可见。
(E)认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access_token)和更新令牌(refresh_token)。
(F)假设商户拒绝授权,认证服务器将商户导向客户端事先指定的"重定向URI"(redirection URI),同时附上error信息
(G)在access_token即将过期之前,可以使用refresh_token直接向认证服务器发起请求,换取新的access_token,延续access_token的有效期
授权码模式各步骤详细说明:
此处以沙箱环境获取acccess_token为例说明,如果是正式环境请求,需将请求入口地址等相关数据换成正式环境对应入口地址,操作流程沙箱环境和正式环境是一致的。
实际进行授权操作时,测试的数据 client_id、secret、redirect_uri 等参数均需要根据自己创建的应用实际数据给予替换,不能拿示例中给出的值直接进行测试,以免影响实际测试效果。下图为服务端授权方式流程图,以下按流程图逐步说明。
(A)步骤中,客户端拼接授权需要访问的URL,示例及参数说明如下:
(B)步骤引导商户到授权页,商户可以选择点击【同意授权】或者【取消授权】
(C)步骤获取授权码,如果商户点击【同意授权】,开放平台认证服务器会回应客户端的授权回调URI,并且返回参数
(D)步骤使用授权码换取访问令牌,客户端向认证服务器发起访问令牌的请求,示例及参数说明
(E)步骤,如果认证成功,认证服务器响应HTTP请求,Token示例如下:
{
"access_token": "2YotnFZFEjr1zCsicMWpAA",
"token_type": "bear",
"expires_in": 3600,
"refresh_token": "tGzv3JOkF0XG5Qx2TlKWIA",
"scope": "all"
}