接口调用代码示例
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(); } }