手把手教你接入快应用账号开发-服务端方式
由于当前客户端接口获取手机号暂不支持加密方案,因此推荐开发者使用服务端接口安全获取手机号,无需经过客户端加密,通过以下步骤实现:
- 在快应用中调用 account.getProvider 接口判断当前设备是否支持华为帐号服务。
调用接口返回 huawei 表示支持,否则表示不支持。后续功能开发和接口调用必须在设备支持帐号服务的前提进行。console.log(account.getProvider())
- 判断是否需要重新获取Authorization Code。未获取过Authorization Code,或者已获取Authorization Code,但是调用 account.checkUserSession 接口校验无效,则执行步骤3。account.checkUserSession 校验有效,表示当前会话持续有效,则执行步骤4。
account.checkUserSession({
success: function (data2) {
// 有效
},
fail: function (data, code) {
// 无效
}
});
- 在快应用中调用 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分钟,并且只能使用一次,再次使用将无效。
- 调用服务端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。
- 调用服务端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 "
}
- 根据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":"
}
相关文章
- Node-Web应用框架Express
- Android中插件开发篇之----应用换肤原理解析
- ADO.NET数据库应用开发_ExtendedProperties属性
- 后台开发:核心技术与应用实践3.5.2 set的查增删
- 《SAP HANA平台应用开发》—第2章2.1节熟悉HANA开发环境
- 2016级移动应用开发在线测试11-线程
- delphi7的新生,参与分布式应用开发,调用RESTful API,Json的应用
- 【FAQ】HarmonyOS跳转到应用市场详情页
- 《循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用》——2.4 U盘安装过程
- 《Android 应用案例开发大全(第二版)》——2.5节辅助绘制类
- 《Android 应用案例开发大全(第3版)》——第1章,第1.5节本书案例项目的导入
- iOS应用内语言切换功能
- 使用eclipse开发Java web应用
- 太方便:OneDrive等应用也已支持虹膜解锁
- 「基于Django的全民健康智慧中医数字服务平台」前端应用API接口功能(二)
- .Net中的AOP系列之构建一个汽车租赁应用
- Qt编写地图综合应用56-实时动态轨迹
- iOS应用内支付(内购)的个人开发过程及坑!
- iOS开发UI篇—ios应用数据存储方式(归档)
- 《OpenGL ES应用开发实践指南:Android卷》—— 1.2 创建第一个程序
- STM32F412应用开发笔记之七:片上ADC的应用测试
- CYQ.Data V5 分布式缓存Redis应用开发及实现算法原理介绍