/*
* Copyright (c) 2014 The CCP project authors. All Rights Reserved.
*
* Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license
* that can be found in the LICENSE file in the root of the web site.
*
* http://www.yuntongxun.com
*
* An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
package com.platform.cfs.cloopen;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import ytx.org.apache.http.HttpEntity;
import ytx.org.apache.http.HttpResponse;
import ytx.org.apache.http.client.methods.HttpGet;
import ytx.org.apache.http.client.methods.HttpPost;
import ytx.org.apache.http.client.methods.HttpRequestBase;
import ytx.org.apache.http.entity.BasicHttpEntity;
import ytx.org.apache.http.impl.client.DefaultHttpClient;
import ytx.org.apache.http.message.AbstractHttpMessage;
import ytx.org.apache.http.util.EntityUtils;
import com.platform.cfs.cloopen.utils.CcopHttpClient;
import com.platform.cfs.cloopen.utils.DateUtil;
import com.platform.cfs.cloopen.utils.EncryptUtil;
import com.platform.cfs.cloopen.utils.LoggerUtil;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class CCPRestSDK {
int status;
private static final int Request_Get = 0;
private static final int Request_Post = 1;
private static final String Account_Info = "AccountInfo";
private static final String Create_SubAccount = "SubAccounts";
private static final String Get_SubAccounts = "GetSubAccounts";
private static final String Query_SubAccountByName = "QuerySubAccountByName";
private static final String SMSMessages = "SMS/Messages";
private static final String TemplateSMS = "SMS/TemplateSMS";
private static final String Query_SMSTemplate = "SMS/QuerySMSTemplate";
private static final String LandingCalls = "Calls/LandingCalls";
private static final String VoiceVerify = "Calls/VoiceVerify";
private static final String IvrDial = "ivr/dial";
private static final String BillRecords = "BillRecords";
private static final String queryCallState = "ivr/call";
private static final String callResult = "CallResult";
private static final String mediaFileUpload = "Calls/MediaFileUpload";
private String SERVER_IP;
private String SERVER_PORT;
private String ACCOUNT_SID;
private String ACCOUNT_TOKEN;
private String SUBACCOUNT_SID;
private String SUBACCOUNT_Token;
public String App_ID;
private BodyType BODY_TYPE = BodyType.Type_XML;
public String Callsid;
public enum BodyType {
Type_XML, Type_JSON;
}
public enum AccountType {
Accounts, SubAccounts;
}
/**
* 初始化服务地址和端口
*
* @param serverIP
* 必选参数 服务器地址
* @param serverPort
* 必选参数 服务器端口
*/
public void init(String serverIP, String serverPort) {
if (isEmpty(serverIP) || isEmpty(serverPort)) {
LoggerUtil.fatal("初始化异常:serverIP或serverPort为空");
throw new IllegalArgumentException("必选参数:"
+ (isEmpty(serverIP) ? " 服务器地址 " : "")
+ (isEmpty(serverPort) ? " 服务器端口 " : "") + "为空");
}
SERVER_IP = serverIP;
SERVER_PORT = serverPort;
}
/**
* 初始化主帐号信息
*
* @param accountSid
* 必选参数 主帐号
* @param accountToken
* 必选参数 主帐号TOKEN
*/
public void setAccount(String accountSid, String accountToken) {
if (isEmpty(accountSid) || isEmpty(accountToken)) {
LoggerUtil.fatal("初始化异常:accountSid或accountToken为空");
throw new IllegalArgumentException("必选参数:"
+ (isEmpty(accountSid) ? " 主帐号" : "")
+ (isEmpty(accountToken) ? " 主帐号TOKEN " : "") + "为空");
}
ACCOUNT_SID = accountSid;
ACCOUNT_TOKEN = accountToken;
}
/**
* 初始化子帐号信息
*
* @param subAccountSid
* 必选参数 子帐号
* @param subAccountToken
* 必选参数 子帐号TOKEN
*/
public void setSubAccount(String subAccountSid, String subAccountToken) {
if (isEmpty(subAccountSid) || isEmpty(subAccountToken)) {
LoggerUtil.fatal("初始化异常:subAccountSid或subAccountToken为空");
throw new IllegalArgumentException("必选参数:"
+ (isEmpty(subAccountSid) ? " 子帐号" : "")
+ (isEmpty(subAccountToken) ? " 子帐号TOKEN " : "") + "为空");
}
SUBACCOUNT_SID = subAccountSid;
SUBACCOUNT_Token = subAccountToken;
}
/**
* 初始化应用Id
*
* @param appId
* 必选参数 应用Id
*/
public void setAppId(String appId) {
if (isEmpty(appId)) {
LoggerUtil.fatal("初始化异常:appId为空");
throw new IllegalArgumentException("必选参数: 应用Id 为空");
}
App_ID = appId;
}
/**
* 话单下载
*
* @param date
* 必选参数 day 代表前一天的数据(从00:00 – 23:59)
* @param keywords
* 可选参数 客户的查询条件,由客户自行定义并提供给云通讯平台。默认不填忽略此参数
* @return
*/
public HashMap<String, Object> billRecords(String date, String keywords) {
HashMap<String, Object> validate = accountValidate();
if (validate != null)
return validate;
if ((isEmpty(date))) {
LoggerUtil.fatal("必选参数: 日期 为空");
throw new IllegalArgumentException("必选参数: 日期 为空");
}
CcopHttpClient chc = new CcopHttpClient();
DefaultHttpClient httpclient = null;
try {
httpclient = chc.registerSSL(SERVER_IP, "TLS",
Integer.parseInt(SERVER_PORT), "https");
} catch (Exception e1) {
//e1.printStackTrace();
LoggerUtil.error(e1.getMessage());
throw new RuntimeException("初始化httpclient异常" + e1.getMessage());
}
String result = "";
try {
HttpPost httppost = (HttpPost) getHttpRequestBase(1, BillRecords);
String requsetbody = "";
if (BODY_TYPE == BodyType.Type_JSON) {
JsonObject json = new JsonObject();
json.addProperty("appId", App_ID);
json.addProperty("date", date);
if (!(isEmpty(keywords)))
json.addProperty("keywords", keywords);
requsetbody = json.toString();
} else {
StringBuilder sb = new StringBuilder(
"<?xml version='1.0' encoding='utf-8'?><BillRecords>");
sb.append("<appId>").append(App_ID).append("</appId>")
.append("<date>").append(date).append("</date>");
if (!(isEmpty(keywords)))
sb.append("<keywords>").append(keywords)
.append("</keywords>");
sb.append("</BillRecords>").toString();
requsetbody = sb.toString();
}
LoggerUtil.info("billRecords Request body = : " + requsetbody);
//打印包体
System.out.println("请求的包体:"+requsetbody);
BasicHttpEntity requestBody = new BasicHttpEntity();
requestBody.setContent(new ByteArrayInputStream(requsetbody
.getBytes("UTF-8")));
requestBody.setContentLength(requsetbody.getBytes("UTF-8").length);
httppost.setEntity(requestBody);
HttpResponse response = httpclient.execute(httppost);
status = response.getStatusLine().getStatusCode();
System.out.println("Https请求返回状态码:"+status);
HttpEntity entity = response.getEntity();
if (entity != null)
result = EntityUtils.toString(entity, "UTF-8");
EntityUtils.consume(entity);