接口调用代码示例

[隐藏]


1.OAuth2.0授权认证示例

       Server-side模式,是OAuth2.0认证的一种模式,又称Web Server Flow;适用于需要从web server访问的应用,例如Web/wap网站。
       其授权验证流程示意图如下(图片来源:OAuth2.0协议草案V21的4.1节 )

Oauth2_1.png
       对于应用而言,需要进行两步:
       (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();

		}

	}