2-2. 수신 대상자 정보 발송

HTTPS Parameters

앞서 메시지 정보를 보내고 해당 메시지에 대한 IDX를 얻었다면, 보내야 할 대상자들을 500개 한 묶음으로 메시지 IDX와 함께 API서버로 SSL Protocol을 이용하여 파라미터들을 API Server에 전달합니다.

API Server로 전달해야 할 파라미터 들은 아래 표를 참조해 주세요.

[표 2.5] 다수 발송 메시지 HTTPS, Parameters

Response JSON

API 서버에서 전달 받은 파라미터 처리 후 결과를 JSON 형태로 제공합니다. 만일 발송 대상이 남아 있다면, 해당 결과 수신 후 남은 대상자에 따라 몇 회에 걸쳐 수신 대상자 목록을 발송합니다. (한 번에 최대 500건 단위)

{"result" : "200", "msgIdx" :  "A1DS33DDSQ2321", "processCode" : "20002", "message" : "대상자 등록이 처리되었습니다. 대상자를 계속 등록하실 수도, 메시지 등록을 완료하실 수도 있습니다."}

JSON 형태로 제공되는 결과 값 및 각 데이터의 코드값에 대한 설명은 [표 2.3] 발송 JSON 결과의 result code 유형[표 2.4] JSON 결과의 processCode code 유형을 참조해 주시기 바랍니다.

샘플 소스 설명

다수의 대상자에게 메시지 보내기 두 번째 단계인 대상자 발송의 경우 기본 메시지 전달 후 수신 받은 메시지 IDX(msgidx)와 수신 대상 목록인 식별자(identity) 대상 목록 및 필수 값인 appkey/appsecret/customerkey를 파라미터에 담아 API서버로 보내면 해당 내용에 대해 처리 후 결과 값을 반환합니다.

결과 값에 대해 메시지 전송을 완료할 수도, 대상자를 더 보낼 수도 있습니다.

JAVA Version

Github에 올려져 있는 샘플소스는 아래 설명된 내용 중 중복된 부분들을 method화 하여 처리하므로 약간의 차이가 있을 수 있으나, 기본 발송 방식의 설명이므로 해당 중복되는 부분을 풀어서 설명하도록 하겠습니다.

다수 발송의 첫 단계인 기본 메시지 발송의 부분은 앞서 설명한, 일괄 발송 및 단일 건 발송과 마찬가지로 필수값 및 메시지 부가 정보를 전송하는 것과 동일합니다.

1) 파라미터를 담을 List 객체를 선언해 전달할 값들을 셋팅 합니다.

List <BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();

2) 필수값들을 셋팅 합니다.

List <BasicNameValuePair> params = new ArrayList<BasicNameValuePair>(); 

params.add (new BasicNameValuePair("appkey", 애플리케이션 키));           // (필수)	
params.add (new BasicNameValuePair("appsecret", 애플리케이션 시크릿));     // (필수)
params.add (new BasicNameValuePair("customerkey", 발급받은 커스터머키));   // (필수)

3) 푸시를 받을 대상자들을 셋팅 합니다. 한 번에 보내는 대상자는 500건 이하로 해야 합니다.

params.add (new BasicNameValuePair("identity", 수신받을 대상자의 식별자1));              // (필수)
params.add (new BasicNameValuePair("message", 수신받을 대상자에게 보낼 메시지1));          // (필수)
params.add (new BasicNameValuePair("prv_attachefname", 수신받을 대상자에게 보낼 이미지1)); //(선택)
params.add (new BasicNameValuePair("prv_linkurl", 수신받을 대상자에게 보낼 웹링크1));      // (선택)
params.add (new BasicNameValuePair("prv_title", 수신받을 대상자에게 보낼 제목1));         // (선택)
params.add (new BasicNameValuePair("identity", 수신받을 대상자의 식별자2));              // (필수)
params.add (new BasicNameValuePair("message", 수신받을 대상자에게 보낼 메시지2));          // (필수)
params.add (new BasicNameValuePair("message", 수신받을 대상자에게 보낼 메시지2));          // (필수)
params.add (new BasicNameValuePair("prv_attachefname", 수신받을 대상자에게 보낼 이미지2)); //(선택)
params.add (new BasicNameValuePair("prv_linkurl", 수신받을 대상자에게 보낼 웹링크2));      // (선택)
params.add (new BasicNameValuePair("prv_title", 수신받을 대상자에게 보낼 제목2));         // (선택)
… 중략 …
params.add (new BasicNameValuePair("identity", 수신받을 대상자의 식별자n));              // (필수)
params.add (new BasicNameValuePair("message", 수신받을 대상자에게 보낼 메시지n));          // (필수)
Params.add (new BasicNameValuePair("prv_attachefname", 수신받을 대상자에게 보낼 이미지n)); //(선택)
params.add (new BasicNameValuePair("prv_linkurl", 수신받을 대상자에게 보낼 웹링크n));      // (선택)
params.add (new BasicNameValuePair("prv_title", 수신받을 대상자에게 보낼 제목n));         // (선택)

4) 기존 HttpClient의 DefaultHttpClient를 이용한 원격 접속 방식이 deprecated 된 이유로 HttpsURLConnection을 이용하여 접속합니다. 물론 deprecated 되었다고 해서 DefaultHttpClient 방식이 동작하지 않는 것은 아닙니다. 해당 방식 역시 github에 올려져 있는 샘플 소스에 구현되어 있습니다.

  • 예제: FingerpushDaoImpl.sendHttpsExe(String callUrl, List <BasicNameValuePair> params))

전달하는 파라미터는 UTF-8로 인코딩 하여 전달해야 합니다.

  • 예제: 샘플의 FingerpushDaoImpl.sendHttpsUrlConExe(String callUrl, List <BasicNameValuePair> params)

URL url = new URL(callUrl);
trustAllHosts();
HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection();
httpsURLConnection.setHostnameVerifier(new HostnameVerifier() {
    @Override
    public boolean verify(String s, SSLSession sslSession) {
        return true;
    }
});
HttpURLConnection connection = httpsURLConnection;

connection.setRequestMethod("POST");
connection.setUseCaches(false);           
connection.setDoInput(true);
connection.setDoOutput(true);

UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "utf-8");
OutputStream post = connection.getOutputStream();
entity.writeTo(post);
 
post.flush();
connection.connect();

5) 받은 결과는 JSON 타입의 String 이므로 결과에 맞게 변환하여 사용하시는 UI에 적용하시면 됩니다.

StringBuilder responseStringBuilder = new StringBuilder();
logger.debug("contentType : "+connection.getContentType());
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK){        
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
    for (;;){
        String stringLine = bufferedReader.readLine();
        if (stringLine == null ) break;
        responseStringBuilder.append(stringLine + '\n');
    }
    bufferedReader.close();
}
connection.disconnect();
jsonString = responseStringBuilder.toString(); 

6) 해당 결과로 받은 내용을 JSON 형식으로 받아 파싱한 결과에 따라 다음 프로세스(대상자 발송)를 준비합니다. 샘플 파일에서는 JSON 형식의 String 문자열을 JSON Object로 바꾸어 파싱하기 위해 sourceforge에서 배포하는 JSON-lib (http://sourceforge.net/projects/json-lib/files/)를 사용합니다.

결과값 result : 200, processcode : 20002 에 따라 대상자를 더 보낼 수도 메시지 전송을 마칠 수도 있습니다.

jsonString 
= sendMessage(strAppkey, strAppSecret, strCustomerKey, strMsg, callUrl);
JSONObject jsonObj = JSONObject.fromObject(jsonString);
    
String result = (String)jsonObj.get("result");              // 결과 코드
String msgIdx = (String)jsonObj.get("msgIdx");              // 메시지 등록 후 반환되는 메시지 번호
String processCode = (String)jsonObj.get("processCode");    // 메시지 발송 단계, 20001 메시지 등록 시작, 20002 대상자 설정, 20003 메시지 설정 완료
String message = (String)jsonObj.get("message");            // 반환된 결과 메시지

PHP Version

Github에 올려져 있는 샘플소스는 아래 설명된 내용 중 중복된 부분들을 method화 하여 처리하므로 약간의 차이가 있을 수 있으나, 기본 발송 방식의 설명이므로 해당 중복되는 부분을 풀어서 설명하도록 하겠습니다.

다수 발송의 첫 단계인 기본 메시지 발송의 부분은 앞서 설명한, 일괄 발송 및 단일 건 발송과 마찬가지로 필수값 및 메시지 부가 정보를 전송하는 것과 동일합니다.

1) 기본 앱 정보를 세팅합니다.

// 공통 필수 
$key = array(
    'appkey'            => '[발급받은 appkey]',
    'appsecret'         => '[발급받은 appsecret]',
    'customerkey'       => '[발급받은 customerkey]',
);

2) 푸시를 받을 대상자와 받을 메시지들을 세팅합니다. 만일 발송 대상이 남아 있다면, 해당 결과 수신 후 남은 대상자에 따라 몇 회에 걸쳐 수신 대상자 목록을 발송합니다. (한 번에 최대 500건 단위) 이때 '메시지 기본 정보 발송'에서 통신으로 받은 결과값 중 msgidx를 포함 시킵니다.

// 회원 목록 identity
$members = ["member1", "member2"];

$users = array(
	http_build_query($key),
	"msgidx=". $msgidx // (1) 번 메시지 등록시 반환된 msgIdx 값 (필수)
);

for ($i = 0; $i < count($members) ; ++$i) {
	$option = array(
		"identity" 			=> $members[$i],  // identity (필수)
		"message" 			=> $members[$i] . "님 안녕하세요.", // 메시지 (필수)
		"prv_attachefname" 		=> "",
		"prv_linkurl" 			=> "",
		"prv_title" 			=> ""
	);

	$users[] = http_build_query($option);
}

if( !count($users) ) {
	echo json_encode(array(
		"result"  => "4040", 
		"message" => "전송 대상 정보가 없습니다."
	));
	exit();
}

3) 앱 기본정보와 옵션값을 URL 인코드 한 쿼리 문자열로 생성합니다.

$param = implode($users, "&");    // 파라미터를 생성합니다.

4) PHP cURL 라이브러리를 이용하여 핑거푸시 API와 통신합니다.

cURL을 아래와 같이 HTTPS통신으로 세팅합니다.

$url = 'https://api-v2.fingerpush.com/rest/sts/v4/setSTSPushs.jsp'; // 핑거푸시 다수에게 메시지 발송 API URL
$ch = curl_init (); 						    // cURL 선언
curl_setopt ( $ch, CURLOPT_URL, $url ); 			    // URL 세팅
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false ); 	            // 인증서 체크
curl_setopt ( $ch, CURLOPT_SSLVERSION, 1 ); 			    // SSL 버전 -> 1만 된다.
curl_setopt ( $ch, CURLOPT_HEADER, 0 ); 			    // 헤더 출력 여부
curl_setopt ( $ch, CURLOPT_POST, 1 ); 				    // POST, GET 접속 여부
curl_setopt ( $ch, CURLOPT_TIMEOUT, 30 ); 			    // Time Out 세팅
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); 		    // 결과값 리턴 여부
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $param ); 		    // parameter
$res = curl_exec ( $ch ); 					    // cURL 실행하고 결과 저장

/* cURL 에러검출 */
$cErrno = curl_errno ( $ch );

if ($cErrno == 0) $response = $res;
else $response = exit;
curl_close ( $ch ); 			                // cURL을 닫고 자원 반환

5) 전달 받은 JSON 문자열 결과값을 PHP 변수로 변환합니다.

// 1. json 처리시
echo $response;

// 2. object 처리시
$result = json_decode ( $response, true );                // 결과값 JSON 디코드
print_r($result);                                        // 결과 값 출력

6) 해당 결과로 받은 내용을 JSON형식으로 받아 파싱한 결과가 result: 200, processCode:20002인 경우 대상자를 더 보낼 수도 메시지 전송을 마칠 수도 있습니다.

[표 2.2] 발송 JSON 결과[표 2.3] 발송 JSON 결과의 result code 유형을 참조해 주시기 바랍니다.

Last updated