> For the complete documentation index, see [llms.txt](https://developers.fingerpush.com/app-push/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.fingerpush.com/app-push/sdk-manual/s2s/many-2.md).

# 6. 실시간 현황 알림 발송

## 개요

<mark style="color:$danger;">500건 이하</mark>의 다수의 대상자에게 실시간 현황 알림을 발송합니다. 서로 다른 대상자에게 각기 다른 메시지 전송이 가능합니다.

기존 다수의 대상자에게 다른 메시지 전송 방법과 동일하며 메시지 내역에 JSON 형태로 메시지 및 설정 값을 등록하여 발송하게 됩니다.

해당 API는  '[2. 다수의 대상자 발송](/app-push/sdk-manual/s2s/many.md)' 및 '[4. 다수의 대상자 개별 설정값 발송](/app-push/sdk-manual/s2s/many-personal.md)'을 기반으로 처리되고 있으므로 앞선 매뉴얼을 먼저 숙지하시길 권고 드립니다.

![](/files/UIj6Lx2zPTfaU2icJCD4)

{% hint style="info" %}
API Server URL: <https://api-v2.fingerpush.com/rest/sts/v4/setSTSJsonPushs.jsp>
{% endhint %}

## 메시지 기본 정보 발송

### HTTPS Parameters

SSL Protocol을 이용하여 파라미터들을 FingerPush Server to Server API Server(이하 API Server)에 전달합니다.

API Server로 전달해야 할 파라미터들은 아래 표를 참조해 주세요. 해당 내용은 '[2. 다수의 대상자 발송](/app-push/sdk-manual/s2s/many.md)'의 내용을 기본으로 하고 있으나 개별 설정 값의 경우는 메시지 내용에 JSON 형태로 입력되므로 빈 상태로 전달되게 됩니다.

#### \[표 3-1.1] 다수 발송, 메시지 IDX 받기 HTTPS, Parameters

<table><thead><tr><th width="179.6153846153846">파라미터명</th><th width="150">필수 여부</th><th width="150">Byte 수</th><th>설명</th></tr></thead><tbody><tr><td><mark style="color:red;">appkey</mark></td><td>필수</td><td>-</td><td>Application key</td></tr><tr><td><mark style="color:red;">appsecret</mark></td><td>필수</td><td>-</td><td>Application Secret</td></tr><tr><td><mark style="color:red;">customerkey</mark></td><td>필수</td><td>-</td><td>Customer key</td></tr><tr><td><mark style="color:red;">msg</mark></td><td>필수</td><td>1000</td><td>보낼 푸시 메시지<br><mark style="color:red;">해당 내용은 리스트상에 표시되는 대표 메시지이므로 JSON 형태로 입력하지 않습니다.</mark></td></tr><tr><td>isi</td><td>선택</td><td>-</td><td><p>Y: iOS 기기 대상 발송(default) </p><p>N: iOS 기기를 전송 대상에서 제외 </p><p>※ 미입력시기본 값인 Y로 처리</p></td></tr><tr><td>isa</td><td>선택</td><td>-</td><td><p>Y: AOS 기기 대상 발송(default) </p><p>N: AOS 기기를 전송 대상에서 제외 </p><p>※ 미입력시기본 값인 Y로 처리</p></td></tr><tr><td><mark style="color:red;">send_state</mark></td><td>필수</td><td>4</td><td><mark style="color:red;">2001: 실시간 현황 알</mark></td></tr><tr><td>lcode</td><td>선택</td><td>10</td><td>라벨 코드</td></tr><tr><td><mark style="color:red;">identity</mark></td><td>필수</td><td>50</td><td>대상 주문번호(OrderId)</td></tr><tr><td><mark style="color:red;">message</mark></td><td>필수</td><td>1000</td><td><mark style="color:red;">대상자에게 보낼 메시지 및 설정값을 JSON 형식의 Text로 전달</mark>(500건 이하로 입력)</td></tr><tr><td>prv_attachfname</td><td>선택</td><td>256</td><td>대상자에게 보낼 이미지(500건 이하로 입력)</td></tr><tr><td>prv_linkurl</td><td>선택</td><td>200</td><td>대상자에게 보낼 웹링크(500건 이하로 입력)</td></tr><tr><td><mark style="color:red;">isfinish</mark></td><td>필수</td><td>-</td><td>종료 플래그: 값을 Y로 세팅</td></tr></tbody></table>

### 개별 설정값이 적용되는 메시지 유형 설명(JSON Text)

\[표 3-1.1]의 message 파라미터는 개별 설정값을 포함한 JSON 형식의 text 문장으로 처리됩니다.\
해당 JSON 형식에 문법적 오류가 있다면, 발송 서버에서는 오류로 처리하게 됩니다.\
해당 JSON에 포함되는 항목은 아래와 같습니다.

#### \[표 3-1.2] JSON 메시지 내용

<table><thead><tr><th width="113">1 depth key</th><th width="148">2 depth key</th><th width="151">3 depth key</th><th width="78">타입</th><th width="75.61538461538461">필수 여부</th><th>설명</th></tr></thead><tbody><tr><td>live_activity</td><td>event</td><td></td><td>String</td><td>Y</td><td>위젯/알림 유형(start/update/end)</td></tr><tr><td></td><td>attributes</td><td></td><td>JSON</td><td>Y</td><td>(iOS)앱의 attributes 영역값. <br><mark style="color:red;">event:start에 필수</mark><br><mark style="color:red;">(그 외는 생략가능)</mark></td></tr><tr><td></td><td></td><td>orderId</td><td>String</td><td>Y</td><td>(iOS)주문번호</td></tr><tr><td></td><td>content-state</td><td></td><td>JSON</td><td>Y</td><td>(iOS)앱의 attributes.content-state 영역값</td></tr><tr><td></td><td></td><td>shortText</td><td>String</td><td>Y</td><td>(AOS)상단 알림바에 출력되는 문구</td></tr><tr><td></td><td></td><td>liveNotiTitle</td><td>String</td><td>Y</td><td>(AOS)실시간 알림 제목</td></tr><tr><td></td><td></td><td>liveNotiMessage</td><td>String</td><td>Y</td><td>(AOS)실시간 알림 내용</td></tr><tr><td></td><td>staleTime</td><td></td><td>Integer</td><td>N</td><td>(iOS)발송이후{staleTime}분 뒤 <br>위젯의 상태가 (stale)로 변경</td></tr><tr><td></td><td>dismissTime</td><td></td><td>Integer</td><td>N</td><td>(공통)발송이후<br>{dismissTime}분  뒤 위젯/알림 종료<br>※미입력시 OS의 디폴트 설정으로 처리됨</td></tr><tr><td></td><td>totalSegment</td><td></td><td>Integer</td><td>Y</td><td>(AOS)전체 진행단계</td></tr><tr><td></td><td>currentSegment</td><td></td><td>Integer</td><td>Y</td><td>(AOS)현재 진행단계</td></tr></tbody></table>

```json
// START 위젯/알림의 message 예시
{
   "live_activity":{
      "event":"start",
      "attributes":{ // 사전에 iOS앱의 attributes에 선언한 변수를 key로 사용
         "orderId":"ORDER-1784181434", // 
         "storeName":"핑거푸시 카페",
         "orderItems":"아메리카노 외 2건"
      },
      "content-state":{ // 사전에 iOS앱의 attributes.content-state에 선언한 변수를 key로 사용
         "shortText":"준비중", // AOS의 상단 notification 바에 출력하는 문구
         "liveNotiTitle":"preparing", // AOS 실시간 알림 제목
         "liveNotiMessage":"아메리카노 외 2건 주문이 확인되었습니다!", // AOS 실시간알림 내용
      },
      "totalSegment":3, // AOS 실시간알림에 출력되는 진행도 전체 단계
      "currentSegment":1, // AOS 실시간알림에 출력되는 진행도 현재 단계
      "staleTime":3 // 발송이후 staleTime분 뒤 iOS의 라이브 액티비티 상태가 (stale)로 전환
   }
}
```

```json
// UPDATE 위젯/알림의 message 예시
{
   "live_activity":{
      "event":"update",
      "content-state":{ // 사전에 iOS앱의 attributes.content-state에 선언한 변수를 key로 사용
         "shortText":"배달중", // AOS의 상단 notification 바에 출력하는 문구
         "liveNotiTitle":"onTheWay", // AOS 실시간알림 제목
         "liveNotiMessage":"배달 중입니다. 잠시만 기다려주세요", // AOS 라이브 알림 내용
      },
      "totalSegment":3, // AOS 실시간 알림에 출력되는 진행도 전체 단계
      "currentSegment":2, // AOS 실시간알림에 출력되는 진행도 현재 단계
      "staleTime":3 // 발송이후 staleTime분 뒤 iOS의 위젯상태가 (stale)로 전환
   }
}
```

```json
// END 위젯/알림의 message 예시
{
   "live_activity":{
      "event":"end",
      "content-state":{ // 사전에 iOS앱의 attributes.content-state에 선언한 변수를 key로 사용
         "shortText":"배달완료", // AOS의 상단 notification 바에 출력하는 문구
         "liveNotiTitle":"delivered", // AOS 실시간알림 제목
         "liveNotiMessage":"배달이 완료되었습니다!", // AOS 실시간알림 내용
      },
      "totalSegment":3, // AOS 실시간알림에 출력되는 진행도 전체 단계
      "currentSegment":3, // AOS 실시간알림에 출력되는 진행도 현재 단계
      "dismissTime":2 // 발송이후 staleTime분 뒤 위젯/알림이 자동 종료
   }
}
```

### Response JSON

API 서버에서 전달 받은 파라미터 처리 후 결과를 JSON 형태로 제공합니다. \
result 값이 200 이고, processCode가 20001 이면 다음 대상자 등록 프로세스를 진행합니다.

```json
{"result" : "200", "msgIdx" : "A1DS33DDSQ2321", "processCode" : "20003", "message" : "메시지 등록이 처리되었습니다. 발급받은 메시지 아이디로 대상자 등록을 시작해 주세요.", "ratelimit-limit" : "20", "ratelimit-remaining" : "17"}
```

#### \[표 2-1.2] 발송 JSON 결과

<table><thead><tr><th width="150">값</th><th>설명</th></tr></thead><tbody><tr><td>result</td><td>결과 코드</td></tr><tr><td>msgIdx</td><td>메시지 번호</td></tr><tr><td>processCode</td><td>메시지 처리 단계</td></tr><tr><td>message</td><td>발송결과 메시지</td></tr><tr><td>ratelimit-limit</td><td>분당 허용되는 최대 요청 횟수</td></tr><tr><td>ratelimit-remaining</td><td>잔여 분(minute) 동안 가능한 요청 횟수</td></tr><tr><td>retry-after</td><td><p>요청 갱신 시간까지 남은 초(second)</p><p>- ratelimit를 초과한 경우에만 _code: 429와 함께 반환</p></td></tr></tbody></table>

#### \[표 2-1.3] 발송 JSON 결과의 result code 유형

<table><thead><tr><th width="150">코드</th><th>내용</th><th>비고</th></tr></thead><tbody><tr><td>200</td><td>정상처리 됨</td><td> </td></tr><tr><td>4031</td><td>유효하지 않은 appkey 혹은 appsecret</td><td> </td></tr><tr><td>4032</td><td>Server to Server 서비스 이용권한 없음</td><td> </td></tr><tr><td>429</td><td>분당 호출 수 초과</td><td></td></tr><tr><td>500</td><td>서버 에러</td><td></td></tr><tr><td>503</td><td>필수 값이 누락됨</td><td>Message에 누락된 필수값 표시됨</td></tr><tr><td>504</td><td>발송 대상 처리 중 에러</td><td>발송 대상 데이터 확인</td></tr><tr><td>505</td><td>메시지 허용 byte 수 초과</td><td>1000 byte 제한</td></tr></tbody></table>

#### \[표 2-1.4] JSON 결과의 processCode code 유형

<table><thead><tr><th width="149">코드</th><th width="292">내용</th><th>비고</th></tr></thead><tbody><tr><td>20001</td><td>푸시 메시지 등록 정상 처리</td><td>isfinish 값이 전달되지 않은 경우</td></tr><tr><td>20002</td><td>발송대상자 등록 정상 처리</td><td>isfinish 값이 전달되지 않은 경우</td></tr><tr><td>20003</td><td>푸시 메시지 등록 완료</td><td> </td></tr></tbody></table>

JSON 형태로 제공되는 결과값 및 각 데이터의 코드값에 대한 설명은 [\[표 2-1.2\] 발송 JSON 결과](#2-1.2-json)와 [\[표 2-1.3\] 발송 JSON 결과의 result code 유형](#2-1.3-json-result-code)을 참조해 주시기 바랍니다.

### 발송 결과 확인

기존 '[2. 다수의 대상자 발송](/app-push/sdk-manual/s2s/many.md)’  API와 동일하게  '[6. 타겟 발송 실패 시 식별자 조회](/app-push/sdk-manual/s2s/failed-id.md)' API를 사용하여 발송 결과를 확인할 수 있습니다.

### 샘플 소스 설명

HTTPS로 미리 정의된 파라미터들을 전달하고 JSON으로 결과 데이터를 읽을 수 있도록 작업해 주시면 됩니다.

JAVA용 샘플의 경우 Apache common의 HttpClient(<http://hc.apache.org/)를> 이용하여 파라미터를 전송하도록 하였으므로 해당 library가 필요합니다. 샘플 소스는 GitHub를 통해 확인 가능합니다.&#x20;

JSP 샘플의 경우, 샘플 메소드를 이용한 직접 발송이 가능합니다. 혹, 사용자 환경에 맞도록 수정이 필요하면 class(com.fingerpush.push.FingerpushDaoImpl) 내에 구성되어 있는 메소드를 참조해 주시기 바랍니다.

해당 샘플에 대한 설명은 파라미터 전달 및 API URL에 대해 클래스 내에 구현되어 있는 로직 위주로 설명 드립니다.

#### JAVA Version

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

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

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

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

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

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

// 1. 메시지 기본정보 셋팅
params.add (new BasicNameValuePair("appkey", 애플리케이션 키));             // (필수)	
params.add (new BasicNameValuePair("appsecret", 애플리케이션 시크릿 키));    // (필수)
params.add (new BasicNameValuePair("customerkey", 발급받은 커스터머키));     // (필수)
params.add (new BasicNameValuePair("msg", 푸시메시지 내용));                // 메시지(필수)
params.add (new BasicNameValuePair("isi", "Y"));           // iOS 디바이스에게 발송(Y/N)
params.add (new BasicNameValuePair("isa", "Y"));           // AOS 디바이스에게 발송(Y/N)
params.add (new BasicNameValuePair("title", 푸시메시지  제목));  // 제목
params.add (new BasicNameValuePair("lcode", ""));            // 메시지 라벨코드: 메시지 라벨관리에서 발급받은 10자리 난수

// 2. 수신 대상 정보 셋팅
params.add (new BasicNameValuePair("identity", 수신받을 대상자의 식별자(주문번호)1)); // (필수)
params.add (new BasicNameValuePair("message", 수신받을 대상자에게 보낼 메시지 및 설정값 JSON1)); // (필수)
params.add (new BasicNameValuePair("prv_attachefname", 수신받을 대상자에게 보낼 이미지1)); //(선택)
params.add (new BasicNameValuePair("prv_linkurl", 수신받을 대상자에게 보낼 웹링크1)); // (선택)

params.add (new BasicNameValuePair("identity", 수신받을 대상자의 식별자(주문번호)2)); // (필수)
params.add (new BasicNameValuePair("message", 수신받을 대상자에게 보낼 메시지 및 설정값 JSON2); // (필수)
params.add (new BasicNameValuePair("prv_attachefname", 수신받을 대상자에게 보낼 이미지2)); //(선택)
params.add (new BasicNameValuePair("prv_linkurl", 수신받을 대상자에게 보낼 웹링크2)); // (선택)
… 중략 …
params.add (new BasicNameValuePair("identity", 수신받을 대상자의 식별자(주문번호)n)); // (필수)
params.add (new BasicNameValuePair("message", 수신받을 대상자에게 보낼 메시지 및 설정값 JSONn)); // (필수)
Params.add (new BasicNameValuePair("prv_attachefname", 수신받을 대상자에게 보낼 이미지n)); //(선택)
params.add (new BasicNameValuePair("prv_linkurl", 수신받을 대상자에게 보낼 웹링크n)); // (선택)

// 3. 대상자 설정 종료 셋팅
params.add (new BasicNameValuePair("isfinish", "Y")); // 푸시 메시지 종료(필수)
```

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

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

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

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

```java
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();
```

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

```java
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();
```

5\) 발송 결과가 result : 200, processCode : 20003이 아닌 경우 isfinish 값이 정상적으로 전달되지 않은 것으로 판단되며 이러한 경우, [\[표 2-1.2\] 발송 JSON 결과](#2-1.2-json)와 [\[표 2-1.3\] 발송 JSON 결과의 result code 유형](#2-1.3-json-result-code)을 참조해 주시기 바랍니다.

샘플 파일에서는 JSON형식의 String 문자열을 JSON Object 로 바꾸어 파싱하기 위해 sourceforge에서 배포하는 JSON-lib (<http://sourceforge.net/projects/json-lib/files/)를> 사용합니다.

```java
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");            // 반환된 결과 메시지
```

{% hint style="info" %}
※ JAVA Version 500건 이하 발송 샘플
{% endhint %}

<table data-header-hidden><thead><tr><th width="244"></th><th></th><th data-hidden></th></tr></thead><tbody><tr><td>소스 주소</td><td>https://github.com/kissoft/FingerPushSTSinJava</td><td></td></tr><tr><td>class</td><td>com.fingerpush.push.FingerpushDao com.fingerpush.push.FingerpushDaoImpl com.fingerpush.push.PushVO</td><td></td></tr><tr><td>jsp</td><td>JSP/ sendTargetUnderMax.jsp</td><td></td></tr></tbody></table>

#### PHP Version

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

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

&#x20;

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

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

2\) 메시지 발송에 사용되는 필수값과 선택값을 세팅합니다.

```php
$members = ["member1", "member2"];

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();
}

$option = array(
	// 1. 메시지 기본정보
	"msg" 				=> "푸시 메시지 500개 이하",	// 메시지(필수)
	"isa" 				=> "Y",				// 안드로이드 발송 Y/N
	"isi" 				=> "Y",				// IOS 발송 Y/N
	"title" 			=> "제목",			// 제목
	"lcode" 			=> "",				// 메시지 라벨코드: 메시지 라벨관리에서 발급받은 10자리 난수
	"isfinish" 			=> "Y",				// 푸시 메시지 종료(필수)
);
```

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

<pre class="language-php"><code class="lang-php"><strong>$data = array_merge($key, $option);            // 세팅한 데이터를 하나의 배열로 합칩니다.
</strong>$qs = ( count($users) ) ? "&#x26;".implode("&#x26;", $users) : "";
$param = http_build_query($data) . $qs;        // 파라미터를 생성합니다.
</code></pre>

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

* PHP Curl 라이브러리: <https://www.php.net/manual/en/book.curl.php>
* 다수에게 메시지 발송 API URL: [https://api-v2.fingerpush.com/rest/sts/v4/setSTSPushs.jsp](https://api-v2.fingerpush.com/rest/sts/v3/setSTSPushs.jsp)

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

```php
$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 변수로 변환합니다.

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

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

6\) 발송 결과가 result : 200, processCode : 20003이 아닌 경우 isfinish 값이 정상적으로 전달되지 않은 것으로 판단되며 이러한 경우, [\[표 2-1.2\] 발송 JSON 결과](#2-1.2-json)와 [\[표 2-1.3\] 발송 JSON 결과의 result code 유형](#2-1.3-json-result-code)을 참조해 주시기 바랍니다.
