1. 개요
심리스 연동에서 회원의 보유금액은 사이트 측에서 관리됩니다.사이트는 특정 API를 KPLAY시스템에 제공하여 해당 정보를 보내야 합니다.
1.1 제품 목록
제품 ID |
공급자 |
타입 |
설명 |
1 |
에볼루션 아이프레임은 allowfullscreen = true로 설정하십시오 |
0 |
기본 로비 |
1 |
RNG 블랙 잭 |
||
2 |
RNG 머니 휠 |
||
3 |
RNG 라이트닝 룰렛 |
||
4 |
RNG 유로피안 룰렛 |
||
5 |
RNG 메가 볼 |
||
6 |
RNG 용호 |
||
7 |
RNG 바카라 |
||
8 |
RNG 톱 카드 |
||
2 |
빅 게이밍 |
0 |
기본 로비 |
3 |
마이크로 |
0 |
기본 로비 |
1 |
그랜드 로비 |
||
5 |
아시아 게이밍 |
0 |
기본 로비 |
6 |
드림 게이밍 |
0 |
기본 로비 |
9 |
섹시 게이밍 |
0 |
기본 로비 |
10 |
프라그마틱 플레이 |
0 |
기본 로비 |
12 |
플레이테크 |
0 |
기본 로비 |
16 |
로얄 카지노 게이밍 |
0 |
기본 로비 |
17 |
에즈기 |
0 |
기본 로비 |
18 |
보타 보타 연동 경우 아이프램 사용 불가 |
0 |
기본 로비 |
19 |
스카이윈드 |
0 |
기본 로비 |
21 |
모티베이션 |
0 |
기본 로비 |
22 |
두윈 두윈 연동 경우 아이프램 사용 불가 |
0 |
기본 로비 |
24 |
오리엔탈 게이밍 |
0 |
기본 로비 |
26 |
타이산 |
0 |
기본 로비 |
30 |
아이코닉21 |
0 |
기본 로비 |
34 |
GPI |
0 |
기본 로비 |
35 |
XPG |
0 |
기본 로비 |
38 |
DB |
0 |
기본 로비 |
39 |
힐튼 힐튼 연동 경우 아이프램 사용 불가 |
0 |
기본 로비 |
1.2 슬롯 서비스 리스트
제품 ID |
공급자 |
타입 |
설명 |
0 |
슬롯 로비 |
0 |
디폴트 슬롯 로비 |
200 |
프라그마틱플레이 슬롯 |
로비로 생성 |
프라그마틱플레이 슬롯 게임 |
201 |
하바네로 |
로비로 생성 |
하바네로 슬롯 게임 |
202 |
엘리시움 |
로비로 생성 |
엘리시움 슬롯 게임 |
205 |
스페이드 게이밍 |
로비로 생성 |
스페이드 게이밍 슬롯 게임 |
207 |
플레이 앤 고 |
로비로 생성 |
플레이 앤 고 슬롯 게임 |
208 |
월드 매치 |
로비로 생성 |
월드 매치 슬롯 게임 |
209 |
마이크로 게이밍 슬롯 |
로비로 생성 |
마이크로 게이밍 슬롯 게임 |
212 |
YL게이밍 |
로비로 생성 |
YL게이밍 슬롯 게임 |
213 |
EVO 레드타이거 |
로비로 생성 |
EVO 레드타이거 슬롯 게임 |
214 |
넷엔트 |
로비로 생성 |
넷엔트 슬롯 게임 |
215 |
드레이곤 소프트 |
로비로 생성 |
드레이곤 소프트 슬롯 게임 |
216 |
YGG 드라실 |
로비로 생성 |
YGG 드라실 슬롯 게임 |
217 |
분고 |
로비로 생성 |
분고 슬롯 게임 |
218 |
플레이슨 |
로비로 생성 |
플레이슨 슬롯 게임 |
219 |
플레이테크 슬롯 |
로비로 생성 |
플레이테크 슬롯 게임 |
220 |
CQ9 슬롯 |
로비로 생성 |
CQ9 슬롯 게임 |
221 |
스카이윈드 |
로비로 생성 |
스카이윈드 슬롯 게임 |
222 |
와즈단 |
로비로 생성 |
와즈단 슬롯 게임 |
223 |
포켓 게임즈 소프트 |
로비로 생성 |
포켓 게임즈 소프트 슬롯 게임 |
224 |
로얄 슬롯 게이밍 |
로비로 생성 |
로얄 슬롯 게이밍 슬롯 게임 |
225 |
Evo 빅 타임 게이밍 |
로비로 생성 |
Evo 빅 타임 게이밍 슬롯 게임 |
227 |
Evo 에볼 노 리미트 |
로비로 생성 |
Evo 에볼 노 리미트 슬롯 게임 |
228 |
CC88 |
로비로 생성 |
CC88 슬롯 게임 |
230 |
패스트 스핀 |
로비로 생성 |
패스트 스핀 슬롯 게임 |
231 |
넥스트 스핀 |
로비로 생성 |
넥스트 스핀 슬롯 게임 |
235 |
플레이 스타 |
로비로 생성 |
플레이 스타 슬롯 게임 |
249 |
나가게임즈 |
로비로 생성 |
나가게임즈 슬롯 게임 |
250 |
히든버튼 |
로비로 생성 |
히든버튼 슬롯 게임 |
253 |
슬롯밀 |
로비로 생성 |
슬롯밀 슬롯 게임 |
254 |
피터앤슨 |
로비로 생성 |
피터앤슨 슬롯 게임 |
255 |
핵쏘 게이밍 |
로비로 생성 |
핵쏘 게이밍 슬롯 게임 |
256 |
아바타UX |
로비로 생성 |
아바타UX 슬롯 게임 |
257 |
568윈 |
로비로 생성 |
568윈 슬롯 게임 |
258 |
블루프린트 |
로비로 생성 |
브루 프린트 슬롯 게임 |
263 |
지리 |
로비로 생성 |
지리 슬롯 게임 |
265 |
JDB |
로비로 생성 |
JDB 슬롯 게임 |
267 |
GPI 슬롯 |
로비로 생성 |
GPI 슬롯 게임 |
268 |
킹 미다스 |
로비로 생성 |
킹 미다스 슬롯 게임 |
279 |
엔도르피나 |
로비로 생성 |
엔도르피나 슬롯 게임 |
1.3 스포츠 제품 목록
제품 ID |
공급자 |
타입 |
설명 |
101 |
E-스포츠 |
0 |
기본 로비 |
108 |
라이브 스포츠 |
0 |
기본 로비 |
109 |
비터 스포츠 |
0 |
기본 로비 |
1.4 P2P 제품 목록
제품 ID |
공급자 |
타입 |
설명 |
10002 |
글로벌 홀덤 |
0 |
기본 로비 |
10003 |
바둑이 |
0 |
기본 로비 |
1.5 미니 게임 제품 목록
제품 ID |
공급자 |
타입 |
설명 |
300 |
스프라이브 |
1 - 에비에이터 2 - 다이스 3 - 플링코 4 - 골 5 - 하일로 6 - 마인즈 7 - 키노 8 - 미니 룰렛 9 - 핫라인 |
게임은 Type ID를 통하여만 액세스할 수 있습니다. |
301 |
에볼루션 파워볼 |
1 - 에볼루션 파워볼 1턴 2 - 에볼루션 파워사다리 1턴 3 - 에볼루션 파워사다리 2턴 4 - 에볼루션 파워사다리 3턴 5 - 에볼루션 파워볼 2턴 6 - 에볼루션 파워볼 3턴 7 - 에볼루션 파워볼 4턴 8 - 에볼루션 파워볼 5턴 9 - 에볼루션 파워사다리 4턴 10 - 에볼루션 파워사다리 5턴 |
게임은 Type ID를 통하여만 액세스할 수 있습니다. |
1.6 KPLAY 에서 제공하는 것
• KPLAY 앤드포인트
• KPLAY AG코드
• KPLAY AG토큰
• KPLAY 비밀키
1.7 사이트에서 제공하는 것
• 사이트 앤드 포인트
예제:
1.8 사이트에서 작성하는 API
심리스 연동을 위해서는 사이트는 아래의 API를 작성하여야 합니다.
• Debit – 회원의 잔고 차감
• Credit – 회원의 잔고 증감
• Balance – 회원의 잔고 조회
• Bonus – 플레이어 보너스 획득을위한 API (슬롯에만 적용 가능)
• Buyin – 피싱 게임에 대한 플레이어 잔액을 차감하는 API (피싱 게임에만 적용 가능)
1.9 데이터의 흐름 및 cronjob
KPLAY에서 모든 Debit에는 쌍이 되는 Credit이 존재합니다. 해당 쌍의 조회는 txn_id로 가능합니다.
사이트는 모든 Debit에 대하여 Credit의 수신을 조회하는 cronjob을 작성하여야 합니다. Debit발생 후 10분이내에 Credit을 받지 못한다면 해당 Debit에 대하여 results API를 통하여 별도로 결과를 조회 후 반영하여야 합니다.
2. AUTH (필수)
사이트에서 게임을 실행하기 위해서 아래의 API를 콜합니다. API는 자동으로 회원을 생성하거나 회원정보를 업데이트 합니다.
HTTP 방법 : POST
URL : <KPLAY 앤드포인트>/auth
2.1 요청 포멧
Header
필드 |
유형 |
설명 |
필수 |
ag-code |
string |
AG코드 |
예 |
ag-token |
string |
AG코드 |
예 |
Body
필드 |
유형 |
설명 |
필수 |
user |
object |
|
예 |
user.id |
integer |
회원의 고유 아이디 길이 9 |
예 |
user.name |
string |
회원의 고유 이름 생성 후 변경 불가 길이 3 – 20 |
예 |
user.balance |
decimal(15,2) |
사용자의 잔고 |
예 |
user.language |
char(3) |
사용자의 언어 |
예 |
user.domain_url |
string |
(슬롯 및 피싱 로비 전용) 이 필드는 귀사의 도메인으로 콜백하고 게임으로 리디렉션할때에 필요합니다. |
예 |
prd |
object |
|
예 |
prd.id |
integer |
제품 ID 1.1 제품 목록 을참조하십시오 |
예 |
prd.type |
integer |
제품의 종류 1.1 제품 목록 을참조하십시오 |
아니오 |
prd.skin |
integer |
(슬롯 전용) 테마 옵션입니다. 디폴트는 다크 테마입니다. 사용 가능한 서비스 스킨:- 1 - 다크 2 - 라이트 테마의 보기는 13.2 슬롯 로비 스킨 을참조하십시오. |
아니오 |
prd.filter |
integer |
(슬롯 로비 전용) 로비 입장 시 특정 서비스의 아이디로 필터를 사용합니다. 아이디는 1.2 슬롯 서비스 리스트 를 참조할 수 있습니다. |
아니오 |
prd.lobby |
integer |
(기론에만 적용) 로비에 액세스하거나 Type ID로 특정 게임에 액세스할 때 사용합니다. Type ID는 1.3 스포츠 제품 목록을 참조하십시오. 로비 필드 값은: 0 = Type ID로 특정 게임에 접속합니다. 1 = 로비로 접속합니다. |
아니오 |
prd.open_type |
string |
(슬롯 및 피싱 로비 전용) n – 새탭, r – 리다이렉트 디폴트: n |
아니오 |
prd.is_mobile |
boolean |
true의 경우 모바일 사이트의 URL을 리턴합니다 기본값 : 아니오 |
예 |
prd.table_id |
string |
에볼루션 라이브 카지노 테이블 ID |
아니오 |
****참고****
슬롯의 경우에 콜백 URL의 포매트는
http://{domain_url}/slots/{product_id}/{type}?isMobile=false입니다.
이 콜백 URL을 AUTH 방법(섹션 2 유저 AUTH)과 매핑해야 합니다, {product_id} 및 {type} 변수를 전달하여 슬롯 게임을 시작합니다.
****모바일사이트의 URL****
http://{domain_url}/slots/{product_id}/{type}?isMobile=true
2.2 요청 예
{
"user":
{
"id":1,
"name":"johndoe",
"balance":123.05,
"language":"en"
},
"prd":
{
"id":1,
"type":0,
"is_mobile":0,
"lobby":0, // 기론에만 적용 (제품 ID 102)
"open_type":"n"
"filter":200 // 에 의존 제품 ID
}
}
2.3 응답 포맷
필드 |
유형 |
설명 |
status |
integer |
0 경우 오류 1 성공하는 경우 |
user_id |
integer |
KPLAY 사용자 ID |
username |
string |
KPLAY 사용자 이름 |
launch_url |
string |
시작 URL |
error |
string |
오류 메시지 상태 = 0 |
2.4 응답 예
성공
오류
{
"status":0,
"error":"ACCESS_DENIED"
}
오류 |
설명 |
ACCESS_DENIED |
사이트의 증명서 불일치 (code/token). |
INVALID_PRODUCT |
프로덕트가 존재하지 않을 경우 |
INVALID_PARAMETER |
무효 또는 없는 domain_url 경우 |
INVALID_USER |
사용자가 존재하지 않을 경우 |
INTERNAL ERROR |
이외의 에러 |
2.5 샘플 코드
20.1 인증 을 참조하십시오
3. DEBIT (필수)
KPLAY는 배팅 시에 회원에게서 차감할 금액을 이 API를 통하여 사이트에 전달합니다.
HTTP 방법 : POST
URL : <사이트 앤드포인트>/debit
3.1 요청 포맷
Header
필드 |
타입 |
설명 |
secret-key |
string |
KPLAY 사이트 비밀키 정상적인 KPLAY에서의 접근인지를 확인합니다. |
Body
필드 |
타입 |
설명 |
user_id |
integer |
KPLAY 사용자 ID |
amount |
decimal(15, 2) |
금액 |
prd_id |
integer |
제품 ID |
txn_id |
string |
고유 트랜잭션 ID |
game_id |
integer |
게임 ID **Debit 요청에서는 DG의 게임 ID가 항상 0입니다. 게임 ID가 필요하신 경우에는 “Results”API를 호출하여 게임 ID를 업데이트하십시오. 영향을 받은 제품(들):- ➢ 드림 게이밍 ➢ E-스포츠 |
table_id |
string |
테이블 ID * 에볼루션 라이브 카지노에만 적용됩니다. |
round_id |
string |
라운드 ID * 2024년 7월 24일 이후에만 적용(KRW). 라운드 ID가 포함되지 않은 제품:- ➢ 드림 게이밍 ➢ 비터 스포츠 ➢ 스페이드 게이밍 ➢ 패스트 스핀 |
credit_amount |
decimal(15, 2) |
credit_amount가 존재하는 경우에는 AG가 그레딧 결산을 하셔야 합니다 |
txn_details |
Array |
거래내역 목록 |
txn_details.event_id |
string |
이벤트 아이디 * 라이브 베팅에만 적용 |
txn_details.league_id |
string |
리그 아이디 * 라이브 베팅에만 적용 |
txn_details.league_name |
string |
리그 이름 * 라이브 베팅에만 적용 |
txn_details.league_kr_name |
string |
리그 한국 이름 * 라이브 베팅에만 적용 |
txn_details.sport_id |
integer |
스포츠 아이디 * 라이브 베팅에만 적용 |
txn_details.sport_name |
string |
스포츠 이름 * 라이브 베팅에만 적용 |
txn_details.country_code |
string |
국가 코드 * 라이브 베팅에만 적용 |
txn_details.type |
string |
베팅 유형 * 라이브 베팅에만 적용 |
txn_details.type_desc |
string |
베팅 유형 설명 * 라이브 베팅에만 적용 |
txn_details.event_part_id |
integer |
이벤트 파트 아이디 * 라이브 베팅에만 적용 |
txn_details.event_part_name |
string |
이벤트 파트 이름 * 라이브 베팅에만 적용 |
txn_details.selection |
string |
베팅 선택 * 라이브 베팅에만 적용 |
txn_details.selection_desc |
string |
베팅 선택 설명 * 라이브 베팅에만 적용 |
txn_details.home_team |
string |
홈팀 팀명 * 라이브 베팅에만 적용 |
txn_details.away_team |
string |
원정팀 팀명 * 라이브 베팅에만 적용 |
txn_details.home_team_kr |
string |
홈팀 한국 팀명 * 라이브 베팅에만 적용 |
txn_details.away_team_kr |
string |
원정팀 한국 팀명 * 라이브 베팅에만 적용 |
txn_details.start_time |
string |
이벤트 시작 시간 * 라이브 베팅에만 적용 |
txn_details.odds |
decimal(3,2) |
배당율 * 라이브 베팅에만 적용 |
txn_details.hdp |
string |
핸디캡 값 * 라이브 베팅에만 적용 |
3.2 요청 예
{
"user_id":1000011,
"amount":100.00,
"prd_id":1,
"txn_id":"A00000005",
"game_id":1005,
"table_id":"jimihendrix00000",
"round_id":"17df2d6fc0f95beb63861983-r3ildu3tr7naae3z"
}
포함된credit_amount
{
"user_id":1000011,
"amount":100.00,
"prd_id":1,
"txn_id":"A00000005",
"game_id":1005,
"table_id":"jimihendrix00000",
"round_id":"17df2d6fc0f95beb63861983-r3ildu3tr7naae3z",
"credit_amount":100
}
라이브 베팅에만 적용
{
"user_id":1000011,
"amount":100.00,
"prd_id":506,
"txn_id":"A00000005",
"game_id":1005,
"txn_details":[
{
"event_id":237241598721036288,
"league_id":227988609297436672,
"league_name":"KBO",
"league_kr_name":"KBO",
"sport_id":9,
"sport_name":"Baseball",
"country_code":"KR",
"type":"T",
"type_desc":"Over/Under",
"event_part_id":70,
"event_part_name":"Whole Match",
"selection":"Lotte Giants - 7.5",
"selection_desc":"Under",
"home_team":"KT Wiz",
"away_team":"Lotte Giants",
"home_team_kr":"KT 위즈",
"away_team_kr":"롯데 자이언츠",
"start_time":"2024-05-16 09:30:00",
"odds":"1.49",
"hdp":"7.5",
}
]
}
3.3 응답 포맷
필드 |
타입 |
설명 |
status |
integer |
0 경우 오류 1 성공하는 경우 |
balance |
decimal(15, 2) |
최신 멤버 균형 |
error |
string |
오류 메시지 상태 = 0 |
3.4 응답 예
성공
{
"status":1,
"balance":505.50
}
오류
{
"status":0,
"error":"ACCESS_DENIED"
}
에러 메시지 |
설명 |
ACCESS_DENIED |
잘못된 비밀 키 |
INVALID_USER |
회원이 사이트에 없는 경우 |
DUPLICATE_DEBIT |
같은 "txn_id"의 debit이 이미 사이트에 존재하는 경우 |
INSUFFICIENT_FUNDS |
차감할 잔액이 부족한 경우 |
UNKNOWN_ERROR |
상인 시스템에서 내부 오류 |
**Debit 요청에서는 DG의 게임 ID가 항상 0입니다.
게임 ID가 필요하신 경우에는 “Results”API를 호출하여 게임 ID를 업데이트하십시오.
**Debit = 0 경우에 AG는 상태 = 1의 응답을 반환해야 합니다.
4. CREDIT (필수)
KPLAY는 게임의 결과 처리 시 회원에게 지급할 금액을 이 API를 통하여 사이트에 전달합니다
HTTP 방법 : POST
URL : <사이트 앤드포인트>/credit
4.1 요청 포맷
Header
필드 |
타입 |
설명 |
secret-key |
string |
KPLAY 사이트 비밀키 정상적인 KPLAY에서의 접근인지를 확인합니다. |
Body
필드 |
타입 |
설명 |
user_id |
integer |
KPLAY 사용자 ID |
amount |
decimal(15,2) |
금액 |
prd_id |
integer |
제품 ID |
txn_id |
string |
고유 트랜잭션 ID |
is_cancel |
integer |
0은 일반 지급 1은 취소 또는 환불 |
game_id |
integer |
게임 ID * 에볼루션 라이브 카지노에만 적용됩니다. |
table_id |
string |
테이블 ID * 에볼루션 라이브 카지노에만 적용됩니다. |
round_id |
string |
라운드 ID * 2024년 7월 24일 이후에만 적용(KRW). 라운드 ID가 포함되지 않은 제품:- ➢ 드림 게이밍 ➢ 비터 스포츠 ➢ 스페이드 게이밍 ➢ 패스트 스핀 |
total_bet |
decimal(15,2) |
총 베팅금액 * 히든 포커에만 적용. |
rake |
decimal(15,2) |
총 레이크금액 * 히든 포커에만 적용. |
4.2 요청 예
{
"user_id":1000011,
"amount":195.00,
"prd_id":1,
"txn_id":"A00000005",
"is_cancel":0,
"round_id":"343093"
}
4.3 응답 포맷
필드 |
타입 |
설명 |
status |
integer |
0 경우 오류 1 성공하는 경우 |
balance |
decimal(15,2) |
최신 회원 보유금액 |
error |
string |
오류 시 메시지 |
4.4 응답 예
성공
{
"status":1,
"balance":505.50
}
오류
{
"status":0,
"error":"ACCESS_DENIED"
}
에러 메시지 |
설명 |
ACCESS_DENIED |
잘못된 비밀 키 |
INVALID_USER |
사이트에 해당 유저가 존재하지 않을 경우 |
INVALID_DEBIT |
같은 txn_id에 해당하는 debit이 존재하지 않는 경우 |
DUPLICATE_CREDIT |
같은 txn_id에 해당하는 credit이 이미 존재하는 경우 |
UNKNOWN_ERROR |
사이트 내부 오류 |
5. Resettlement (필수 스포츠북 전용)
KPLAY는 스포츠 북 재정착 베팅에 대한 회원 잔액을 조절하기 위하여 이 API를 업체에 호출합니다
참고: 스포츠 북에만 적용
HTTP 방법 : POST
URL : <사이트 앤드포인트>/resettle
5.1 요청 포맷
Header
필드 |
타입 |
설명 |
secret-key |
string |
KPLAY 사이트 비밀키 정상적인 KPLAY에서의 접근인지를 확인합니다. |
Body
필드 |
타입 |
설명 |
user_id |
integer |
KPLAY 사용자 ID |
amount |
integer |
금액 |
txn_id |
string |
고유 트랜잭션 ID |
prd_id |
integer |
제품 ID |
is_cancel |
integer |
0은 일반 지급 1은 취소 또는 환불 |
resettlement_time |
datetime |
재정착 일자/시간 표준 시간대 UTC+0 ISO 포맷으로 |
5.2 요청 예
{
"user_id":12345,
"amount":1000,
"txn_id":ABC12345,
"prd_id": 103,
"is_cancel":0,
"resettlement_time":2022-09-12 10:00:00
}
5.3 응답 포맷
필드 |
타입 |
설명 |
status |
integer |
0 경우 오류 1 성공하는 경우 |
balance |
decimal(15, 2) |
최신 회원 잔고 |
error |
string |
오류 메시지 |
5.4 응답 예
성공
{
"status":1
"balance":2000.00
}
오류
{
"status":0
"error":"INVALID_USER"
}
에러 메시지 |
설명 |
INVALID_USER |
사이트에 해당 유저가 존재하지 않을 경우 |
*참고: KPLAY는 업체가 이 요청에 응답할 때까지 지속적으로 업체에게 이 API를 호출합니다
6. BALANCE (필수)
KPLAY는 유저의 최신 잔고를 조회하기 위해 사이트에 이 API를 호출 합니다.
HTTP 방법: POST
URL: <사이트 앤드포인트>/balance
6.1 요청 포맷
Header
필드 |
타입 |
설명 |
secret-key |
string |
KPLAY 사이트 비밀키 정상적인 KPLAY에서의 접근인지를 확인합니다. |
Body
필드 |
타입 |
설명 |
user_id |
integer |
KPLAY 사용자 ID |
prd_id |
integer |
제품 ID |
6.2 요청 예
{
"user_id":1000011
"prd_id": 1
}
6.3 응답 포맷
필드 |
타입 |
설명 |
status |
integer |
0 경우 오류 1 성공하는 경우 |
balance |
decimal(15, 2) |
최신 회원 잔고 |
error |
string |
오류 메시지 |
6.4 응답 예
성공
{
"status":1
"balance":9999.99
}
오류
{
"status":0
"error":"ACCESS_DENIED"
}
에러 메시지 |
설명 |
ACCESS_DENIED |
잘못된 비밀 키 |
INVALID_USER |
사이트에 해당 유저가 존재하지 않을 경우 |
UNKNOWN_ERROR |
사이트 내부 오류 |
7. RESULTS (필수)
사이트는 KPLAY에서 결과를 얻기 위해 이 API를 호출 할 수 있습니다.
Debit 발생 후 10분이내에 Credit을 수신하지 못하는 경우 결과 API로 처리 하여야 합니다.
HTTP 방법 : GET
URL: <KPLAY 앤드포인트>/results/{prd_id}/{txn_id}
7.1 요청 포맷
Header
필드 |
타입 |
설명 |
필수 |
ag-code |
string |
KPLAY AG코드 |
예 |
ag-token |
string |
KPLAY AG토큰 |
예 |
Body
필드 |
타입 |
설명 |
필수 |
prd_id |
integer |
제품 ID |
예 |
txn_id |
string |
트랜잭션 ID |
예 |
7.2 요청 예
7.3 응답 포맷
필드 |
타입 |
설명 |
status |
integer |
0 경우 오류 1 성공하는 경우 |
type |
integer |
0 트랜잭션이 여전히 미처리인 경우 1 트랜잭션이 해결 된 경우 |
game_id |
integer |
게임 아이디 7.2 부록 참조 |
stake |
integer |
Debit 금액 |
payout |
integer |
Credit 금액 Type이 1인 경우에만 유효 |
is_cancel |
integer |
0은 일반 1은 취소 또는 환불 Type이 1인 경우에만 유효 |
is_resettle |
integer |
0 이전에 거래가 재결제된 경우 1 재정착된 경우 |
error |
string |
오류 메시지 |
7.4 응답 예
성공
{
"status": 1,
"type": 1,
"game_id": 1,
"stake":100.00,
"payout":195.00,
"is_cancel":0
"is_resettlement":1
}
오류
{
"status":0,
"error":"ACCESS_DENIED"
}
에러 메시지 |
설명 |
ACCESS_DENIED |
사이트의 증명서 불일치(code/token). |
INVALID_TXN |
존재하지 않는 트랜잭션 |
INTERNAL_ERROR |
KPLAY 내부 오류 |
8. Bonus (필수)
KPLAY가 머천트에거 보너스가 발동되는 것을 알려주기 위하여 사이트에서 이 API를 호출할 겁니다.
HTTP 방법 : POST
URL : <사이트 앤드포인트>/bonus
8.1 요청 포맷
Header
필드 |
타입 |
설명 |
secret-key |
string |
KPLAY 사이트 비밀키 |
Body
필드 |
타입 |
설명 |
user_id |
integer |
KPLAY 사용자 ID |
type |
integer |
Type 0: 인 게임 보너스 Type 1: 프로모션 Type 2: 잭팟 |
amount |
decimal(15,2) |
보너스금액 |
prd_id |
integer |
제품 ID |
game_id |
integer |
게임 ID |
txn_id |
string |
독특한 트랜잭션 ID |
8.2 요청 예
{
"user_id":1000011,
"type":0,
"amount":200.00,
"prd_id":200,
"game_id":438,
"txn_id":"A00000005"
}
8.3 응답 포맷
필드 |
타입 |
설명 |
status |
integer |
오류 발생한 경우는 0 성공한 경우는 1 |
balance |
decimal(15,2) |
최신 회원 잔고 |
error |
string |
상태 = 0인 경우의 오류 메시지 |
8.4 응답 예
성공
{
"status":1,
"balance":1500.0
}
오류
{
"status":0,
"error":"ACCESS_DENIED"
}
에러 메시지 |
설명 |
ACCESS_DENIED |
사이트의 증명서 불일치(code/token) |
INVALID_USER |
사이트에 해당 유저가 존재하지 않는 경우 |
UNKNOWN_ERROR |
사이트 내부 오류 |
FAQ
Q: 보너스 엔드포인트 유형 0과 유형 1의 차이는 무엇입니까?
A: 유형 0 게임에서 프리 스핀이며, 유형 1 보너스/프로모션은 에이전트 또는 서비스 제공 회사가 제공하는 프로모션입니다.
Q: 유형 0 게임 프리 스핀은 CREDIT 엔드포인트로 전송됩니까?
A: 유형 0 BONUS 엔드포인트로 전송되며 CREDIT 엔드포인트로 전송하지 않습니다. 프리 스핀 회전시 DEBIT 요청을 전송하지 않습니다.
9. Product List (선택 과목)
KPLAY에서 서비스 사용 가능한 서비스를 얻기 위하여 이 API를 호출해야 합니다.
HTTP 방법 : POST
URL : <KPLAY 앤드포인트>/productlist
9.1 요청 포맷
Header
필드 |
타입 |
설명 |
ag-code |
string |
KPLAY AG코드 |
ag-token |
string |
KPLAY AG토큰 |
Body
필드 |
타입 |
설명 |
language |
string |
서비스 이름에 대한 언어옵션 한국어: ko/kr, 영어: en 디폴트: 영어 |
wallet |
integer |
0 – 모든 월렛 1 – 심리스 2 - 월렛 디폴트: 모든 월렛 |
9.2 요청 예
{
"language":"kr",
"wallet":1
}
9.3 응답 포맷
필드 |
타입 |
설명 |
status |
integer |
0 -오류 1 -성공 |
prd_id |
string |
서비스 ID |
prd_name |
integer |
사비스 이름 |
error |
string |
상태 = 0인 경우의 오류 메시지 |
9.4 응답 예
{
"status":1,
"data":[
{
"prd_id":1,
"prd_name":"에볼루션",
},
{
"prd_id":2,
"prd_name":"빅게이밍",
},
{
"prd_id":5,
"prd_name":"아시아 게이밍",
}
]
}
에러 메시지 |
설명 |
INVALID_PARAMETER |
무효한 사이트 비밀키 |
ACCESS_DENIED |
AG가 비활성화되었습니다. |
USER_NOT_EXIST |
AG가 존재하지 않는 경우 또는 AG토큰이 잘 못된 경우 |
INTERNAL_ERROR |
KPLAY 내부 오류 |
10. Product Game List (필수)
KPLAY에서 서비스 게임 목록을 얻기 위하여 이 API를 호출해야 합니다.
HTTP 방법 : POST
URL : <KPLAY 앤드포인트>/gamelist
10.1 요청 포맷
Header
필드 |
타입 |
설명 |
ag-code |
string |
KPLAY AG코드 |
ag-token |
string |
KPLAY AG토큰 |
Body
필드 |
타입 |
설명 |
language |
string |
게임 이름에 대한 언어 설정은 디폴트가 영어며 한국어: ko, 영어: en 참고: 이 API에 대한 콜 요청은 분당 1회입니다 |
10.2 요청 예
{
"language":"en"
}
10.3 응답 포맷
필드 |
타입 |
설명 |
status |
integer |
오류 발생한 경우는 0 성공한 경우는 1 |
game_name |
string |
사비스 게임 이름 |
game_id |
integer |
서비스 게임 ID |
game_icon |
string |
제품 게임 아이콘 (슬롯 게임 전용) |
rtp |
string |
슬롯 RTP |
is_enabled |
integer |
0 - 허용안함 1 - 허용함 |
error |
string |
상태 = 0인 경우의 오류 메시지 |
10.4 응답 예
성공
{
"game_list":{
"1":[
{
"game_id": 15,
"game_name":"baccarat",
"rtp":"0",
"is_enabled": 1
}
],
"200":[
{
"game_id": 1,
"game_name":"Aztec Bonanza",
"game_icon":"https://slots.kplaycasino.com/pragmatic/slots/id/1.png",
"game_icon_large":"https://slots.kplaycasino.com/500*500/pragmatic/slots/id/1.png",
"rtp":"97.06%",
"is_enabled": 1
}
]
},
"status":1
}
오류
{
"status":0,
"error":"INVALID_PARAMETER"
}
에러 메시지 |
설명 |
INVALID_PARAMETER |
무효한 사이트 비밀키 |
INVALID_PRODUCT |
사이트에서 서비스 ID가 존재하지 않는 경우 |
INTERNAL_ERROR |
KPLAY내부 오류 |
11. Get Game Info (필수)
해당 API를 호출 해서 KPLAY 에서 게임 정보를 얻기 수 있습니다.
HTTP 방법 : POST
URL : <KPLAY 앤드포인트>/gameinfo
11.1 요청 포맷
Header
필드 |
타입 |
설명 |
ag-code |
string |
KPLAY AG코드 |
ag-token |
string |
KPLAY AG토큰 |
Body
필드 |
타입 |
설명 |
language |
string |
게임 이름에 대한 언어 설정은 디폴트가 영어며 한국어: ko, 영어: en 참고: 게임 정보 API은 1분당 1번만 요청 가능 합니다 |
11.2 요청 예
{
"language":"en"
}
11.3 응답 포맷
필드 |
타입 |
설명 |
status |
integer |
오류 발생한 경우는 0 성공한 경우는 1 |
recommended |
string |
추천 게임 |
popular |
string |
인기 게임 |
new_game |
string |
신규 게임 |
game_id |
integer |
서비스 게임 ID |
game_name |
string |
사비스 게임 이름 |
error |
string |
상태 = 0인 경우의 오류 메시지 |
11.4 응답 예
성공
{
"status":1,
"recommended":{
"200":[
{
"game_id": 14,
"game_name":"Wild West Gold"
},
"209":[
{
"game_id": 62,
"game_name":"Basketball Star"
}
]
},
"popular":{
"202":[
{
"game_id": 466,
"game_name":"Supa Crew"
},
"205":[
{
"game_id": 153,
"game_name":"Christmas Miracles"
}
]
},
"new_game":{
"200":[
{
"game_id": 512,
"game_name":"Kingdom of The Dead"
},
"220":[
{
"game_id": 277,
"game_name":"Treasure Pirate"
}
]
}
}
오류
{
"status":0,
"error":"INVALID_PARAMETER"
}
에러 메시지 |
설명 |
INVALID_PARAMETER |
무효한 사이트 비밀키 |
INVALID_PRODUCT |
사이트에서 서비스 ID가 존재하지 않는 경우 |
INTERNAL_ERROR |
KPLAY내부 오류 |
12. Get Push Bets (선택 과목)
판매자는 푸시된 베팅 내역을 얻기 위해 KPLAY에서 이 API를 호출합니다.
● 게임 결과가 동점인 경우 플레이어와 은행가에 베팅하는 거래는 "푸시" 거래가 됩니다. 예를 들어 플레이어가 플레이어나 뱅커 중 한 명에게 내기를 걸었지만 결과는 동점인 경우 환불 금액 = pushed_amount.
● 푸시된 금액 = 0이면 트랜잭션에 푸시가 없습니다.
● 트랜잭션이 리스트에 없으면 데이터를 아직 사용할 수 없습니다.
● txn_id 필트가 있는 경우, start_date 및 end_date 필드가 무시하게 되고 더이상 필수 항목이 아닙니다. 특정 Txn_id가 하나만 입력하십시오.
참고:
● 이것은 업체가 EVO에서만 푸시된 베팅 내역 세부 정보를 얻는 데 사용됩니다.
● 요청날짜는UTC+0시간대를 기반으로 정해집니다.
● 바카라 및 블랙잭 게임에만 적용됩니다.
HTTP 방법 : POST
URL : <KPLAY 앤드포인트>/getpushbets
12.1 요청 포맷
Header
필드 |
타입 |
설명 |
필수 |
ag-code |
string |
KPLAY AG 코드 |
예 |
ag-token |
string |
KPLAY AG 토큰 |
예 |
Body
필드 |
타입 |
설명 |
필수 |
start_date |
datetime |
게임 시작 일시 |
예 |
end_date |
datetime |
게임 종료 일시 |
예 |
prd_id |
integer |
인용하다 |
예 |
txn_id |
varchar |
특정 거래 ID |
예 |
12.2 요청 예
start_date 및 end_date만 사용
{
"start_date": "2021-06-01T03:00:00Z",
"end_date": "2021-06-01T04:50:00Z",
"prd_id": 1
}
**참고: start/end 시작/종료 시간은 2 시간 제한됩니다
트랜잭션 ID 사용
{
"prd_id" :1,
"txn_id" :"624610570377457431"
}
12.3 리턴 포맷
필드 |
타입 |
설명 |
status |
integer |
0 – 오류 1 – 성공 |
data |
object |
거래 ID, 푸시된 금액, 푸시된 금액1, 및 측면 금액이 포함됩니다. pushed_amount (바카라 및 블랙잭에만 적용) 바카라 - 결과가 Tie일 때 플레이어 또는 뱅커에게 베팅 금액이 푸시됩니다 블랙잭 - 딜러와 플레이어의 핸드 값이 같을 때마다 푸시가 트리거됩니다 - 푸시 22는 프리벳 블랙잭에서만 발생합니다 (게임 아이디 26) pushed_amount1 (바카라에만 적용) - pushed_amount에 추가된 푸시 금액 - 타이에 베팅된 금액이 포함됩니다. - 예를 들어, push_amount는 100이며 타이에 베팅하는 금액은 50인 경우 push_amount1은 150입니다 side_amount (바카라에만 적용) - 결과와 상관없이, 뱅커, 플레이어, 타이를 제외한 모든 사이드 베팅의 총 금액. |
error |
string |
잘못된 요청 포맷을 입력하실 때 뜨는 오류 메시지 |
12.4 리턴 예
성공 (시작 및 종료 날짜만)
{
"status": 1,
"data": [
{
"txn_id": "624610570377450431",
"pushed_amount": 100,
"pushed_amount1": 100
"side_amount": 100
},
{
"txn_id": "624610570377451432",
"pushed_amount": 0,
"pushed_amount1": 0
"side_amount": 0
}
]
}
성공 (거래 ID만 사용)
{
"status": 1,
"data": [
{
"txn_id": "624610570377457431",
"pushed_amount": 0,
"pushed_amount1": 0
"side_amount": 0
}
]
}
오류
{
"status": 0,
"error": "ACCESS_DENIED"
}
오류 |
설명 |
ACCESS_DENIED |
사이트 정보가 무효한 경우. |
INVALID_PRODUCT |
프로덕트가 존재하지 않는 경우 |
INVALID_DATE |
무효한 날짜를 입력된 경우 |
INTERNAL ERROR |
KPLAY 내부 오류 |
REQUEST_TOO_FREQUENT |
1분 이내에 동일한 서비스 ID를 2회 호출한 경우. |
13. BUY-IN (필수)
KPLAY는 운영자 시스템에서 이 API를 통해 바이인이 발생한다는 것이 운영자에게 통지를 드립니다. (P2P 제품에만 적용)
HTTP 방법 : POST
URL : <사이트 앤드포인트>/buyin
13.1 요청 포맷
Header
필드 |
타입 |
설명 |
secret-key |
string |
KPLAY 사이트 비밀키 정상적인 KPLAY에서의 접근인지를 확인합니다. |
Body
필드 |
타입 |
설명 |
user_id |
integer |
KPLAY 사용자 ID |
amount |
decimal(15, 2) |
금액 |
prd_id |
integer |
제품 ID |
txn_id |
string |
고유 트랜잭션 ID |
game_id |
integer |
게임 ID |
credit_amount |
decimal(15, 2) |
credit_amount가 존재하는 경우에는 AG가 그레딧 결산을 하셔야 합니다 |
13.2 요청 예
{
"user_id":1000011,
"amount":100.00,
"prd_id":506,
"txn_id":"A00000005",
"game_id":1005
}
포함된credit_amount
{
"user_id":1000011,
"amount":100.00,
"prd_id":506,
"txn_id":"A00000005",
"game_id":1005,
"credit_amount":100
}
13.3 응답 포맷
필드 |
타입 |
설명 |
status |
integer |
0 경우 오류 1 성공하는 경우 |
balance |
decimal(15, 2) |
최신 멤버 균형 |
error |
string |
오류 메시지 상태 = 0 |
13.4 응답 예
성공
{
"status":1,
"balance":505.50
}
오류
{
"status":0,
"error":"ACCESS_DENIED"
}
에러 메시지 |
설명 |
ACCESS_DENIED |
잘못된 비밀 키 |
INVALID_USER |
회원이 사이트에 없는 경우 |
DUPLICATE_DEBIT |
같은 "txn_id"의 debit이 이미 사이트에 존재하는 경우 |
INSUFFICIENT_FUNDS |
차감할 잔액이 부족한 경우 |
UNKNOWN_ERROR |
상인 시스템에서 내부 오류 |
14. BET DETAIL
사이트는 이 API를 호출하여 베팅 정보를 가져올 수 있습니다
HTTP 방법 : POST
URL : <KPLAY 앤드포인트>/betresults
14.1 요청 포맷
Header
필드 |
타입 |
필수 |
설명 |
ag-code |
String |
예 |
|
ag-token |
String |
예 |
Body
필드 |
타입 |
필수 |
설명 |
lang |
String |
예 |
한국어: ko, 영어: en |
prd_id |
Number |
예 |
|
txn_id |
string |
예 |
14.2 요청 예
{
"lang":"en",
"prd_id":5001,
"txn_id":"8888888888"
}
14.3 응답 포맷
Txn ID가 올바르고 베팅 세부 정보를 존재하는 경우에는 베팅 세부 정보 페이지를 여는 URL을 반환합니다. Txn ID가 유효하지 않거나 베팅 세부 정보를 존재하지않으면 오류 코드로 응답합니다.
Body
필드 |
타입 |
필수 |
설명 |
status |
Number |
예 |
0 = 실패 1 = 성공 |
error |
String |
아니오 |
14.4 응답 예
성공
오류
{
"status":0,
"error":"GAME_INFO_NOT_FOUND"
}
15. BET DETAIL
*히든 포커에 만 적용
머천들은 이 API를 호출하여 회원 정보를 얻습니다.
HTTP 방법 : POST
URL : <KPLAY 앤드포인트>/betresults/member
15.1 요청 포맷
Header
필드 |
타입 |
필수 |
설명 |
ag-code |
String |
예 |
|
ag-token |
String |
예 |
Body
필드 |
타입 |
필수 |
설명 |
user_id |
integer |
예 |
KPLAY 사용자 ID |
15.2 요청 예
{
"user_id":192985
}
15.3 응답 예
성공
오류
{
"status":0,
"error":"INVALID_MEMBER"
}
16. Remaining Deposit
사이트가 AG 의 잔여한도 및 발급된 보증금을 획득하기 위하여 KPLAY 에게서 이 API 를 콜합니다.
*Note: 이 API 는 요청 값 (request body) 이 필요없음. 분당 하나의 요청만 허용됩니다.
HTTP 방법 : GET
URL : <KPLAY 앤드포인트>/remainingdeposit
16.1 요청 포맷
Header
필드 |
타입 |
필수 |
설명 |
ag-code |
String |
예 |
|
ag-token |
String |
예 |
16.2 응답 포맷
필드 |
타입 |
필수 |
설명 |
given_deposit |
Number |
예 |
|
available_deposit |
Number |
예 |
|
status |
Number |
예 |
0 = 실패 1 = 성공 |
16.3 응답 예
성공
{
"given_deposit":10000000,
"available_deposit":1000000,
"status":1
}
오류
{
"status":0,
"error":"INTERNAL_ERROR
}
17. Get Game Table ID
업체는 사용중인 에볼루션 스킨 ID와 맞은 게임 아이디를 얻기 위하여 이 API를 호출합니다. 특정 테이블로 직접 실행할 수 있습니다.
HTTP 방법 : GET
URL : <KPLAY 앤드포인트>/getgametable
17.1 요청 포맷
Header
필드 |
타입 |
설명 |
ag-code |
String |
KPLAY AG코드 |
ag-token |
String |
KPLAY AG토큰 |
Body
필드 |
타입 |
설명 |
language |
string |
게임 이름에 대한 언어 설정은 디폴트가 영어며 한국어: ko, 영어: en |
17.2 요청 예
{
"language":"en"
}
17.3 응답 포맷
필드 |
타입 |
설명 |
status |
Int |
0 -오류 |
skin_id |
Int |
AG사용중인 스킨 ID입니다. |
game_name |
String |
에볼루션의 게임 이름. |
table_id |
String |
특정 테이블로 직접 실행하기 위한 테이블 ID입니다. |
game_id |
Int |
게임 ID입니다. |
game_type |
String |
게임 타입 |
error |
String |
상태가 0인 경우의 오류메세지. |
17.4 응답 예
성공
{
"status":1,
"tables":[
{
"skin_id": 9,
"game_name":"Golden Wealth Baccarat",
"game_id": 1,
"table_id":[
"gwbaccarat000001",
"n7ltqx5j25sr7xbe"
],
"game_type":"Baccarat"
},
{
"skin_id": 9,
"game_name":"Baccarat Control Squeeze",
"game_id": 92,
"table_id":[
"k2oswnib7jjaaznw"
],
"game_type":"Baccarat"
}
]
}
18. Get Rake API (P2P Product)
머천들은 이 API를 호출하여 매일 최신 레이크를 얻을 수 있습니다.
참고: 심리스 월렛이만 전용입니다. 참고: 정확한 데이터를 얻으려면, 이 API를 전일 날짜로 불러주세요. 예를 들어 5월 4일의 데이터를 얻드려면 5월 5일에 이 API에 호출해야 합니다
HTTP 방법 : POST
URL : <KPLAY 앤드포인트>/getrake
18.1 요청 포맷
Header
필드 |
타입 |
설명 |
ag-code |
String |
KPLAY AG코드 |
ag-token |
String |
KPLAY AG토큰 |
Body
필드 |
타입 |
설명 |
prd_id |
Int |
P2P Product ID |
start_date |
Date |
레이크 시작 시간 |
end_date |
Date |
레이크 종료 시간 |
18.2 요청 예
{
"prd_id":10002,
"start_date": "2023-04-17",
"end_date": "2023-04-18"
}
18.3 응답 포맷
필드 |
타입 |
설명 |
status |
Int |
0 -오류 |
data |
Object |
|
username |
String |
아마존 사용자 이름 |
member_id |
Int |
KPLAY 사용자 ID |
date |
Date |
게임 일시 (UTC+9) |
rake |
Decimal |
일일 레이크. |
18.4 응답 예
성공
{
"status":1,
"data":[
{
"username": "babara",
"member_id":192928,
"date": 2023-04-17,
"rake":"123.00",
},
{
"username": zuhui,
"member_id":192930,
"date": 2023-04-18,
"rake":"123.00",
}
]
}
오류
{
"status":0,
"error":"ACCESS_DENIED"
}
오류 |
설명 |
INVALID_DATE |
요청 본문의 start_date 또는 end_date값이 비어나 없는 경우. |
INVALID_PARAMETER |
헤더의 ag_code 또는 ag_token값이 비어나 잘못한 경우. |
ACCESS_DENIED |
머천이 비활성화 경우. |
USER_NOT_EXIST |
머천이 존재하지 않는 경우. |
UNKNOWN_ERROR |
잘못된 월렛입니다. 요청한 머천의 월렛을 심리스 월렛이 아님 경우. |
INTERNAL_ERROR |
아마존 내부 오류. |
19. 크론잡(Cronjob) 설정 가이드
Kplay에서는 credit 콜을 한번 실행합니다. 해당 credit call은 각업체의 credit callback을 통하여 수신되어 처리되어야 합니다. 네트워크 사정등의 이유로 해당 콜이 수신되지 않은 경우 KPlay에서는 재전송을 하지 않으며 업체는 Results API를 이용하여 미처리 트랜잭션에 대해서 credit의 처리를 완료해야 합니다.
참고: 이 예시에 표시된 샘플 코드는 PHP에만 적용됩니다
19.1 KPLAY 에서 결과 API를 호출하는 법
새 php 파일을 생성하고 하단의 샘플 코드에 따라 KPLAY API 이용해서 데이터를 호출합니다.
19.2 Result API 정보
이 API에 대한 정보를 얻으려면 먼저 API 설명서 섹션 7. Results 참조하십시오.
19.3 엔드포인트 URL
이 API를 호출하는 엔드포인트 URL의 형식은 KPLAY 엔드포인트 과 String 'Result' , 제품 ID 및 트랜잭션 ID의 조합입니다. 샘플 코드는 다음과 같습니다:
$endpoint = 'https://KPLAYendpoint.com/';
$prdId = 1;
$txnId = '123456789';
$url = $endpoint.'results/'.$prdId.'/'.$txnId;
19.4 Header
이 API를 호출하는 헤더의 형식은 'Content-Type', 'Ag-Code' 및 'Ag-Token' 키를 포함하는 배열(array)입니다.
$agent = 'ABC1234';
$token = 'agentsampletoken';
$header = array('Content-Type: application/json',
'Ag-Code: '.$agent,
'Ag-Token:'.$token,);
참고:
Ag-Code는 관리자 로그인에 사용하시는 에이전트 아이디이며 Ag-Token은 발급받으신 토큰을 이용하시기 바랍니다.
19.5 PHP로 GET 요청 전송
지금은, 저희가 19.3 Endpoint URL 에서 얻은 $url과 19.4 Header에서 얻은 $header가 있습니다. KPLAY에서 결과 응답을 받기 위해 PHP로 Kplay에게 Get 요청을 보낼 수 있습니다. 아래 샘플 코드는 $url과 $header를 통해 결과 API를 호출하는 예입니다.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
if($header == '')
{
$header = array('Content-Type: application/json');
}
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$response = curl_exec($ch);
curl_close($ch);
return $response;
참고:
Ag-Code는 관리자 로그인에 사용하시는 에이전트 아이디이며 Ag-Token은 발급받으신 토큰을 이용하시기 바랍니다
19.6 서버에 Crontab 설치 법
서버에서 cd 명령으로 crontab을 설치할 프로젝트에 이동하고 crontab view 설치하려면 아래 명령을 입력하십시오.
crontab -e
아래 포맷을 따라 1단계에서 생성된 php 파일을 crontab에 추가합니다. 앞에 있는 * * * * *가 cron 스케줄 표현입니다. cron 스케줄 표현으로 파일 실행 시간을 예약됩니다. 그리고 php를 입력하고 crontab에 추가할 php 파일의 경로를 따릅니다.
#* * * * * php ~/testFolder/testCron/cron1.php // Will be ignored
* * * * * php ~/testFolder/testCron/cron2.php // Will be executed
위의 샘플 코드에서 cron 스케줄 식을 * * * * * 로 설정하기 때문에 cron 탭은 cron2.php 파일을 분 단위로 실행합니다.
cron1.php 앞에 #을 넣었기 때문에 cron1.php crontab으로 실행되지 않습니다
참고: #은 crontab의 주석 구문입니다. crontab은 이 구문으로 시작하는 줄을 무시합니다.
cron 스케줄 표현식에 대한 더 자세히 알려면 이 웹 사이트를: crontab.guru 참조하십시오
Credit 처리가 완료 되지 않은 각 트랜잭션에 대하여
재시도 할 것인지 판정 ( 재시도 할 때 마다 시간 간격을 늘리는 로직을 추천합니다.)
재시도 여부가 결정되면 results API를 통하여 결과를 재수신하고 결과가 있으면 결과를 반영합니다.
19.7 기본 로직 설명
19.7.1 주의사항
E-스포츠나 라이브 스포츠의 경우 배팅시점과 결과처리 시점이 몇 시간 또는 몇일이 될 수 있습니다. 매분마다 계속 결과의 확인을 시도하면 트래픽이 과도하게 증가 할 수 있으니, 인터벌을 증가하는 로직을 추천합니다.
19.7.2 가장 간단한 재시도 로직
제곱근을 이용하면 기하급수적으로 증가하는 인터벌을 생성할 수 있습니다.
last_execute_interval :마지막 실행 시간과의 차이
//처음 5분간은 처리하지 않음
last_execute_interval = last_execute_interval -5;
//이후는 제곱근에 따라 기하급수적으로 인터벌을 증가시킴
//1분 2분 4분 8분 16분 32분 64분
if (round(sqrt(last_execute_interval)) == sqrt(last_execute_interval))
{
//여기서 재시도하여 주시기 바랍니다.
}
19.8 샘플 코드 설명
function __construct()
{
try
{
// db connection
$servername = DB_SERVER_NAME;
$username = DB_USERNAME;
$password = DB_PASSWORD;
$dbname = DB_NAME;
$hostName = KPLAY_HOSTNAME; //KPLAY Hostname
$token = KPLAY_TOKEN; //KPLAY Token
$agent = KPLAY_CODE; //KPLAY Code
$conn = new \mysqli($servername, $username, $password, $dbname);
//if connect to DB failed
if ($conn->connect_error)
{
return $response = [
'status' => 0
,'error' => 'UNKNOWN_ERROR'
];
}
$selectSQL = "SELECT a.txn_id, a.prd_id, a.user_id
FROM debit a
LEFT JOIN credit b
ON a.txn_id = b.txn_id
WHERE b.txn_id IS NULL";
$db = $conn->query($selectSQL);
//데빗 리스트에는 존재하나 크레딧 리스트에는 존재하지 않는 항목을 추출합니다.
if ($db->num_rows > 0)
{
while($row = $db->fetch_assoc())
{
$txnId = $row['txn_id'];
$prdId = $row['prd_id'];
$userId = $row['user_id'];
//여기에 인터벌 판정 관련 로직을 추가하여 주시기 바합니다.
$method = 'results'; //auth game method
$url = $hostName.$method.'/'.$prdId.'/'.$txnId; //auth game endpoint
//prepare header
$header = [
'Content-Type: application/json',
'Ag-Code: '.$agent,
'Ag-Token:'.$token,
];
$data = [];
$helper = new Helper;
$response = $helper->getData($url,$header);
$data = json_decode($response);
//각 항목에 대해서 results콜을 통하여 결과를 수신합니다.
$status = $data->status;
$type = $data->type;
if ($status == 1 && $type == 1)
{
//결과가 수신되면 크레딧 리스트에 해당 정보를 등록합니다.
$gameId = $data->game_id;
$stake = $data->stake;
$payout = $data->payout;
$isCancel = $data->is_cancel;
if ($isCancel == 1)
{
$betType = 'x';
$credit = $stake;
}
else
{
$betType = 'c';
$credit = $payout;
}
//Insert credit record to DB
$insertSQL = "INSERT INTO credit
(txn_id,type,amount)
VALUES
('".$txnId."','".$betType."',".$credit.")";
$insertDB = $conn->query($insertSQL);
// Update user balance
$updateSQL = "UPDATE users_balance
SET balance = balance + ".$credit."
WHERE user_id = ".$userId;
$updateDB = $conn->query($updateSQL);
}
else
{
$error = $data->error;
var_dump($error);
exit;
}
}
}
else
{
exit;
}
}
catch(\Exception $e)
{
return '';
}
}
20. Appendix
20.1 언어
따르다 ISO 639-1 Code
언어 |
코드 |
영어 |
en |
대한민국 |
ko |
인도네시아어 |
id |
힌디어 |
hi |
태국어 |
th |
중국어 |
zh |
20.2 슬롯 로비 스킨
1 - 다크 테마
2 - 라이트 테마
21. Sample Code
21.1 인증
$hostName = 'http://www.KPLAY.com/';
$method = 'auth';
$token = 'xxxxxxxxx';
$agent = 'xxxxxxxxx';
$url = $hostName.$method;
$header = array('Content-Type: application/json',
'Ag-Code: '.$agent,
'Ag-Token: '.$token,);
$data = [
'user' => [
'id' => '12'
,'name' => 'superjohn'
,'balance' => '88899.00'
,'language' => 'ko'
]
,'prd' => [
'id' => 1
,'type' => 0
,'is_mobile' => 0
]
];
$response = self::postData($url,$data,$header);
$response = json_decode($response);
$iframe = $response->{'response'};
public static function postData($url,$data,$header = '')
{
try
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
if($header == '')
{
$header = array('Content-Type: application/json');
}
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
if (is_array($data))
{
$data = json_encode($data);
}
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
catch(\Exception $e)
{
return '';
}
}