接口调用代码示例
1.OAuth2.0授权认证示例
Server-side模式,是OAuth2.0认证的一种模式,又称Web Server Flow;适用于需要从web server访问的应用,例如Web/wap网站。
其授权验证流程示意图如下(图片来源:OAuth2.0协议草案V21的4.1节 )
对于应用而言,需要进行两步:
(1) 获取Authorization Code;
(2) 通过Authorization Code获取Access Token
(1)请求code(code模式)
通过综合平台申请的appId调用获取授权code
/**
* 请求code(code模式)
* 获取登录框
*/
public static void testAuthorize(){
MaprequestData = new HashMap();
requestData.put("clientId", "tiantian"); //在综合平台申请的appId
requestData.put("responseType", "code");
requestData.put("wap", "1");
requestData.put("state", "1");
try {
requestData.put("redirectUri",java.net.URLEncoder.encode(APIConstants.redirectUri ,"UTF-8"));
String resultStr = OauthRequestUtil.doGetOpenAPIServer("https://open.e.189.cn/api/oauth2/authorize.do", requestData);
System.out.println("resultStr="+resultStr);
} catch (Exception e) {
e.printStackTrace();
}
}(2)请求accesstoken(code模式)
根据2.1请求获取的code,请求获取accessToken以便后续请求业务接口获取相应资源
/**
* 请求accesstoken(code模式)
* code为用户登录并授权后返回的code
*/
public static void testGetAccessToken(){
MaprequestData = new HashMap();
requestData.put("clientId", APIConstants.clientId); //在综合平台申请的appId
requestData.put("clientSecret", APIConstants.clientSecret); //由综合平台颁发的密钥
requestData.put("grantType", "authorization_code");
requestData.put("code", "");// 用户登录成功后重定向返回的code
requestData.put("format", APIConstants.format);
try {
requestData.put("redirectUri", APIConstants.redirectUri );
String result =OauthRequestUtil.doPostOpenAPIServer( "https://open.e.189.cn/api/oauth2/accessToken.do" , requestData);
System.out.println("请求accesstoken:result="+result);
} catch (Exception e) {
e.printStackTrace();
}
}(3)刷新accessToken
accessToken存在生命周期,当accessToken过期或快过期时,可通过此接口刷新延长accessToken使用时间
/**
* 刷新accessToken
* 请求accesstoken返回的refreshToken作为入参
*/
public static void testRefreshTokenPost(){
MaprequestData = new HashMap();
requestData.put("clientId", APIConstants.clientId); //appId 应用ID
requestData.put("clientSecret", APIConstants.clientSecret); //密钥
requestData.put("grantType", "refresh_token");
requestData.put("refreshToken", ""); //请求accessToken返回的refreshToken
requestData.put("format", APIConstants.format);
try {
String result =OauthRequestUtil.doPostOpenAPIServer("https://open.e.189.cn/api/oauth2/account/getUserInfo.do" ,requestData);
System.out.println("请求accesstoken:result="+result);
} catch (Exception e) {
e.printStackTrace();
}
}2.Oauth2接口调用示例
在2.2获取到accessToken后,通过accessToken访问相关业务接口获取信息(范例以获取用户信息为例)
/**
* 获取用户信息
*/
public static void getUserInfo(){
String url = "https://open.e.189.cn/api/oauth2/account/getUserInfo.do";
String appId = "test" ; //接入ID
String version = "1.0" ; //版本号
String accessToken = "e19b9626b8c440b1b2b75d8b115e0edd" ; //用户授权后换取的accessToken
MaprequestData = new HashMap();
requestData.put("accessToken", accessToken);
try {
OauthRequestUtil.initComParam(requestData, appId , version);
String result =OauthRequestUtil.doPostOpenAPIServer(url,requestData);
System.out.println("请求accesstoken:result="+result);
} catch (Exception e) {
e.printStackTrace();
}
}3.服务端调用接口示例
当开发者为服务端调用的时候,此时无需用户授权,可通过综合平台分配的appId和appSecret直接请求接口获取信息或进行相应操作(范例以智能管道接口为例)
//智能管道释放回调接口
public static void testNotifyReleasePipe(){
String clientId = "test" ; //接入方 appId
String version = "1.0" ;
String secret = "Qwdw0E9h4xkNLP2XbnNKwpQx1f43jN9A" ;//由综合平台颁发的密钥
MaprequestData = new HashMap();
try {
requestData.put("returnUrl", java.net.URLEncoder.encode(APIConstants.redirectUri ,"UTF-8"));
requestData.put("userId" , "45612" );
requestData.put("releaseTime" , DateUtils.getCurrentDateStr(DateFormat.standFormat) ); //yyyy-MM-dd HH:mm:ss
OauthRequestUtil.initComParam(requestData, clientId , version);
String result =OauthRequestUtil.signPostOpenAPIServer("https://open.e.189.cn/api/oauth2/smartPipe/notifyPartnerReleasePipe.do",requestData, secret);
System.out.println("智能管道释放回调接口:result="+result);
} catch (Exception e) {
e.printStackTrace();
}
}
//智能管道资源申请接口
public static void testResourceApplyPipe(){
String clientId = "test" ; //接入方 appId
String version = "1.0" ;
String secret = "Qwdw0E9h4xkNLP2XbnNKwpQx1f43jN9A" ;//由综合平台颁发的密钥
UserIdentifier userIdentifier = new UserIdentifier();
userIdentifier.setPublicIP("121.40.96.200");
userIdentifier.setIP("10.10.33.250");
userIdentifier.setUserId("123456");
userIdentifier.setNetworkType(1);
Gson gson = new Gson();
MaprequestData = new HashMap();
try {
String encodeUser = URLEncoder.encode(gson.toJson(userIdentifier),"UTF-8");
requestData.put("userIdentifier", encodeUser);
requestData.put("sourceIPAddress", "121.40.96.220");
requestData.put("destinationIPAddress", "192.168.33.10");
//requestData.put("sourcePort" , "" ); //不携带表示任意源端口
//requestData.put("destinationPort" , "" ); //不携带表示任意目的端口
requestData.put("protocol", "UDP");
requestData.put("appId", "test");
requestData.put("orderId", "1223455");
requestData.put("returnURL", "http://open.e.189.cn");
OauthRequestUtil.initComParam(requestData, clientId , version);
String result =OauthRequestUtil.signPostOpenAPIServer("https://open.e.189.cn/api/oauth2/smartPipe/qosResourceApply.do",requestData, secret);
System.out.println("智能管道资源申请接口:result="+result);
} catch (Exception e) {
e.printStackTrace();
}
}
//智能管道资源释放接口
public static void testResourceDestroyPipe(){
String clientId = "test" ; //接入方 appId
String version = "1.0" ;
String secret = "Qwdw0E9h4xkNLP2XbnNKwpQx1f43jN9A" ;//由综合平台颁发的密钥
UserIdentifier userIdentifier = new UserIdentifier();
userIdentifier.setPublicIP("121.40.96.200");
userIdentifier.setIP("10.10.33.250");
userIdentifier.setUserId("123456");
userIdentifier.setNetworkType(1);
Gson gson = new Gson();
MaprequestData = new HashMap();
try {
String encodeUser = URLEncoder.encode(gson.toJson(userIdentifier),"UTF-8");
requestData.put("userIdentifier" , encodeUser );
requestData.put("correlationId", "12323");
OauthRequestUtil.initComParam(requestData, clientId , version);
String result =OauthRequestUtil.signPostOpenAPIServer( "https://open.e.189.cn/api/oauth2/smartPipe/qosResourceDestroy.do" , requestData , secret );
System.out.println("请求accesstoken:result="+result);
} catch (Exception e) {
e.printStackTrace();
}
}