萌店OAuth2.0授权管理


    第三方开发者要获取萌店商户的店铺里的商品、订单、库存等数据,必须得到商户的授权,你需要引导商户完成“使用萌店帐号登录并授权”的流程;来获取app_id和app_secret进而实现业务逻辑。

关于网页授权access_token和普通access_token的区别

1、网页授权是通过OAuth2.0机制实现的,在商户授权给开发者后,第三方开发者可以获取到一个网页授权特有的接口调用凭证(网页授权access_token),通过网页授权access_token可以进行授权后接口调用,如获取凭证信息;

2、其他接口,需要通过基础支持中的“获取access_token”接口来获取到的普通access_token调用。

关于网页授权的scope的说明

1、以“app_config”为scope发起的网页授权,获取到的access_token与基础支持中access_token作用相同。

2、多个scope参数使用空格“ ”拼接。

具体而言,网页授权流程分为三步:

1、引导用户进入授权页面同意授权,获取code

2、通过code换取网页授权access_token(与基础支持中的access_token不同)

3、刷新access_token(如果需要)

4、通过网页授权access_token调用接口;

第一步:用户同意授权,获取code

参考链接:

https://open.mengdian.com/oauth2/authorize?client_id=client_id&client_secret=client_secret&redirect_uri=REDIRECT_URI&response_type=code&state=STATE&scope=app_config

参数说明

参数 是否必须 说明
client_id 萌店授与第三方开发者的客户端ID
redirect_uri 授权后重定向的回调链接地址,请使用urlencode对链接进行处理
response_type 返回类型,请填写code
scope 应用授权作用域,如:“app_config”,获取商户接口凭证
state 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节

用户同意授权后

如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数redirect_uri?state=STATE

code说明 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。

第二步:通过code换取网页授权access_token

首先请注意,这里通过code换取的是一个特殊的网页授权access_token,与基础支持中的access_token(该access_token用于调用其他接口)不同。第三方开发者可通过下述接口来获取网页授权access_token。

请求方法

获取code后,请求以下链接获取access_token:

https://open.mengdian.com/oauth2/access_token

POST:grant_type=authorization_code&client_id=client_id&client_secret=client_secret&code=CODE

参数说明

参数 是否必须 说明
client_id 萌店授与第三方开发者的客户端ID
client_secret 萌店授与第三方开发者的客户端密钥
code 填写第一步获取的code参数
grant_type 填写为authorization_code

返回说明

正确时返回的JSON数据包如下:

{"access_token":"2887b43299b3cbb93f0a1f359ba14bae7e8409c2","expires_in":3600,"scope":"app_config","refresh_token":"2b724bb709eabab96abee5e4a0fb3c5d70d594a3"}

错误时返回的JSON数据包如下:

{"error":"invalid_grant","error_description":"Authorization code doesn't exist or is invalid for the client"}

第三步:刷新access_token(如果需要)

由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token拥有较长的有效期(30天),当refresh_token失效的后,需要用户重新授权。

请求方法

获取第二步的refresh_token后,请求以下链接获取access_token:

https://open.mengdian.com/oauth2/access_token

POST:grant_type=refresh_token&client_id=client_id&client_secret=client_secret&refresh_token=refresh_token

参数 是否必须 说明
client_id 萌店授与第三方开发者的客户端ID
client_secret 萌店授与第三方开发者的客户端密钥
grant_type 填写为refresh_token
refresh_token 填写通过access_token获取到的refresh_token参数

返回说明

正确时返回的JSON数据包如下:

                
                {
                   "access_token":"ACCESS_TOKEN",
                   "expires_in":7200,
                   "refresh_token":"REFRESH_TOKEN",
                   "openid":"OPENID",
                   "scope":"SCOPE"
                }
            

错误时返回的JSON数据包如下:

{"error":"invalid_token","error_description":"The access token provided is invalid"}

第四步:通过网页授权access_token获取调用接口

接口列表:

1.获取商户api调用凭证

https://open.mengdian.com/oauth2/getAppConfig?access_token=ACCESS_TOKEN

返回说明

正确时返回的JSON数据包如下:

{ "app_id":"62f1594bb79ec383a0e222ddc018ae01", "app_secret":"a0323b5985a58e89f6763ec55b5d1776" }

错误时返回的JSON数据包如下:

                {"error":"invalid_token","error_description":"The access token provided is invalid"}
            

2.设置回调url和token

填写URL和Token,其中URL是开发者用来接收萌店服务器数据的接口URL。Token可由开发者任意填写, 用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。

https://open.mengdian.com/oauth2/setCallback?access_token=ACCESS_TOKEN

POST:callback_url=callback_url&token=token

参数 是否必须 说明
callback_url 开发者用来接收萌店服务器数据的接口URL
token 开发者任意填写

附:(URL有效性验证)

开发者提交信息后,萌店服务器将发送GET请求到填写的URL上,GET请求携带四个参数:

参数 描述
signature 微盟加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微盟服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

加密/校验流程如下:

1. 将token、timestamp、nonce三个参数进行字典序排序

2. 将三个参数字符串拼接成一个字符串进行sha1加密

3. 开发者获得加密后的字符串可与signature对比,相同则确认通过。