zl程序教程

您现在的位置是:首页 >  工具

当前栏目

手把手教你接入快应用账号开发-服务端方式

应用开发 方式 手把手 接入 服务端 账号
2023-09-11 14:20:22 时间

由于当前客户端接口获取手机号暂不支持加密方案,因此推荐开发者使用服务端接口安全获取手机号,无需经过客户端加密,通过以下步骤实现:
在这里插入图片描述

  1. 在快应用中调用 account.getProvider 接口判断当前设备是否支持华为帐号服务。

调用接口返回 huawei 表示支持,否则表示不支持。后续功能开发和接口调用必须在设备支持帐号服务的前提进行。console.log(account.getProvider())

  1. 判断是否需要重新获取Authorization Code。未获取过Authorization Code,或者已获取Authorization Code,但是调用 account.checkUserSession 接口校验无效,则执行步骤3。account.checkUserSession 校验有效,表示当前会话持续有效,则执行步骤4。
account.checkUserSession({
    success: function (data2) {
        // 有效
    },
    fail: function (data, code) {
        // 无效
    }
});
  1. 在快应用中调用 account.authorize 接口获取Authorization Code。
account.authorize({
  appid: "101373095",
  type: "code",
  state: 5,
  scope: "scope.mobileNumber",
  redirectUri: "http://www.example.com/",
  success: function (ret) {
    var atcode = ret.code;
    console.log("signInByBaseScope Authorize base profile success data=" + JSON.stringify(ret));
  },
  fail: function (erromsg, errocode) {
    prompt.showToast({ message: 'authorize fail --- ' + errocode + ':' + erromsg });
  }
})
注意:
每一个Authorization Code的有效期为5分钟,并且只能使用一次,再次使用将无效。
  1. 调用服务端Code获取AT接口,获取Access Token。

获取Access Token方式:应用在其服务端程序中发送请求(必须使用POST方式)到华为OAuth2.0授权服务的“https://login.cloud.huawei.com/oauth2/v2/token”地址上,并在请求的body体中带上以下5个必选参数:

注意:传入参数值需要先进行URLEncode编码处理

grant_type:必选参数,此值固定为“authorization_code”。

code:必选参数,获取的Authorization Code。

client_id:必须参数,在华为开发者联盟创建应用后获取的APP ID。

client_secret:必选参数,在华为开发者联盟创建应用后获取的APP SECRET。

redirect_uri:必选参数,此值固定为“hms://redirect_url”。

POST /oauth2/v2/token HTTP/1.1
Host: login.cloud.huawei.com
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&code=Etersdfasgh74ddga%3d&client_id=12345&client_secret=0rDdfgyhytRtznPQSzr5pVw2&redirect_uri=hms%3A%2F%2Fredirect_url

若参数无误,服务器将返回一段JSON文本,主要包含以下参数:

access_token:需要获取的Access Token(如果包含\,必须去除所有的\)。

expires_in:Access Token的有效期,以秒为单位。

refresh_token:用于刷新Access Token的Refresh Token,所有应用都会返回该参数。

scope:Access Token最终的访问范围,即用户实际授予的权限列表。

示例代码如下:

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{
    "access_token": "346346sdxcdfsa3566546dfdfgfg=",
    "expires_in": 3600,
    "refresh_token": "68dieddfg08349786gdgfsdfa=",
    "scope": "base"
}

若请求错误,服务器将返回一段JSON文本,包含以下参数:

error:错误码。

error_description:错误描述信息。

示例代码如下:

HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store
{
 "error": "1102",
 "error_description": " The request is missing a required parameter"
}

Access Token有效期默认为3600秒,当Access Token过期后,需要使用Refresh Token去获取新的AccessToken。Refresh Token获取AccessToken请参见步骤5。

  1. 调用服务端Refresh Token获取Access Token接口,重新获取Access Token。

当AccessToken过期后,需要调用该接口获取新的AccessToken。RefreshToken的有效期为半年。如果Refresh Token失效,则执行步骤3重新进行授权登录流程。

使用Refresh Token刷新获得新的Access Token,需要应用在其服务端发送请求(采用POST方法)到华为OAuth2.0授权服务的“https://login.cloud.huawei.com/oauth2/v2/token”地址上,并带上以下参数:

grant_type:必选参数,固定为“refresh_token”。

refresh_token:必选参数,用于刷新Access Token用的Refresh Token。

client_id:必选参数,在华为开发者联盟创建应用后获取的APP ID。

client_secret:必选参数,在华为开发者联盟创建应用后获取的APP SECRET。

示例代码如下:

POST /oauth2/v2/token HTTP/1.1
Host: login.cloud.huawei.com
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&client_id=12345&client_secret=bKaZ0VE3EYrXaXCdCe3d2k9few&refresh_token=2O9BSX675FGAJYK92KKGG
注意:
以上参数值需要先进行URLEncode编码处理。

若参数无误,服务器将返回一段JSON文本,主要包含以下参数:

access_token:要获取的Access Token(如果包含\,必须去除所有的\)。

expires_in:Access Token的有效期,以秒为单位。

refresh_token:用于刷新Access Token的Refresh Token,并不是所有应用都会返回该参数(有效期为6个月)。

scope:用户实际授予的权限列表。

示例代码如下:

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{
"access_token": "346346sdxcdfsa3566546dfdfgfg=",
"expires_in": 3600,
"refresh_token": "68dieddfg08349786gdgfsdfa=",
"scope": "email",
}

若请求错误,服务器将返回一段JSON文本,包含以下参数:

error:错误码。

error_description:错误描述信息。

HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store 
{
"error": "1102",
"error_description": "The request is missing a required parameter "
}
  1. 根据Access Token,调用服务端GOpen.User.getInfo接口,获取用户手机号信息,用户名显示信息,OpenId,头像等。

请求

http请求方式:Post。

Content-Type: application/x-www-form-urlencoded

接口访问Url:https://account.cloud.huawei.com/rest.php?nsp_svc=GOpen.User.getInfo

请求参数:
在这里插入图片描述
响应

Content-Type: text/plain; charset=UTF-8

响应返回值:
在这里插入图片描述
错误码说明:

错误码在头部的NSP_STATUS字段,错误描述为Json格式
在这里插入图片描述示例代码

请求:

POST
https://account.cloud.huawei.com/rest.php?nsp_svc=GOpen.User.getInfo
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Content-Length: 199
Host: account.cloud.huawei.com
Connection: Keep-Alive
appid=100051813&access_token=CFsGZxCrkDb4X35kx%2FXWdey%2B9Z3H3mYNZV5%2FgBKKrEARydFsS8qBp1B5fTsopI5ldMJyANgdjioQlUEz78MFajbBwwYKVjmk9%2BroawQKhwxySsRXRXrmhQ%3D%3D&getNickName=1

响应:

HTTP/1.1 200 OKServer: openrestyDate: Thu, 24 May 2018 02:49:37 GMT
Content-Type: text/plain; charset=UTF-8Transfer-Encoding: chunked
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-store
Expires: Thu, 01 Jan 1970 00:00:00 GMT
X-XSS-Protection: 1; mode=block
X-frame-options: SAMEORIGIN
X-Content-Type-Options: 

nosniff{
"openID":"MDFAMTAwMDUxODEzQGZiaNmRiaMzJkZTk3YWU0YWU2ZDFiaMGVmZjE0MTY3NTAzQGIwNzA4YzhjZTNmNGNiaM2JkOGQzYTNkOTkzZGQ0Yjg4Zjc4MDQ2NWRjYzRlYWMzNjIxMGU3ZWY3","headPictureURL":" 
}