Cocos Creator SDK
CROSS Pay 결제 연동을 위한 공식 Cocos Creator SDK입니다. 인앱 WebView로 결제 세션을 열고, 딥링크 콜백을 수신한 뒤 결과를 반환합니다 — API 키는 클라이언트에 존재하지 않습니다.
호환성
| 환경 | 지원 버전 |
|---|---|
| Cocos Creator | 3.8.8+ |
| 플랫폼 | Android · iOS · Windows · Web |
| 언어 | TypeScript |
| 패키지 | com.crossx.sdk.cocos (npm) |
| 모듈 형식 | ESM · CJS |
| Node.js | 18+ |
설치
SDK는 npmjs.org에 배포되며, postinstall 동기화 스크립트를 통해 Cocos 프로젝트 구조(extensions/ 빌드 훅, assets/ 런타임 코드)에 자동으로 미러됩니다.
1. package.json에 의 존성 추가
{
"scripts": {
"postinstall": "node scripts/sync-crossx-sdk.js",
"sync-sdk": "node scripts/sync-crossx-sdk.js",
"clean-sdk": "node scripts/sync-crossx-sdk.js --clean"
},
"dependencies": {
"com.crossx.sdk.cocos": "0.0.0-beta.15"
}
}
버전 번호를 최신 릴리스로 업데이트합니다.
2. 동기화 스크립트 복사
샘플 프로젝트에서 scripts/sync-crossx-sdk.js를 프로젝트의 scripts/ 디렉터리에 복사합니다. 이 스크립트가 npm install 후 SDK를 extensions/와 assets/에 미러합니다.
3. 설치 실행
npm install
postinstall 훅이 자동으로 실행되어 SDK를 동기화합니다. Cocos Creator를 재시작해 익스텐션을 로드합니다.
버전 업그레이드 시 package.json의 버전만 수정하고 npm install을 다시 실행합니다.
익스텐션이 로드되지 않거나 import가 인식되지 않으면 npm run clean-sdk && npm install 후 Cocos Creator를 완전히 종료했다가 다시 엽니다.
Project ID 설정
1. 설정 파일 생성
샘플 프로젝트의 settings/crossx-sdk.example.json을 settings/crossx-sdk.json으로 복사하고 Project ID를 입력합니다:
{
"activeEnvironment": "prod",
"prodProjectId": "YOUR_PROJECT_ID",
"prodOnly": true
}
CROSSx 콘솔에서 Project ID를 발급받습니다. settings/crossx-sdk.json은 .gitignore에 추가합니다.
2. 런타임에서 읽기
import { CROSSxCocosSDKFactory } from '../CROSSx.Sdk.Cocos/assets/index';
const sdk = CROSSxCocosSDKFactory.create({
projectId: 'YOUR_PROJECT_ID',
});
빌드 훅이 빌드 시 settings/crossx-sdk.json을 읽어 딥링크 URI 스킴을 네이티브 프로젝트에 주입합니다. prodProjectId가 비어 있으면 빌드가 실패합니다.
사전 준비
모든 예시의 checkoutUrl / checkoutId는 게임 서버가 POST /v1/payments를 호출해 발급받은 뒤 클라이언트로 전달한 값입니다.
MERCHANT_API_KEY는 서버 환경변수 또는 secret manager에만 저장합니다.- 게임 클라이언트는 서버로부터
checkout_url과checkout_id만 수신합니다. - 딥링크 콜백 결과는 주문 확정 근거가 아닙니다. 최종 처리는 webhook 또는 서버 조회(
GET /v1/payments/{id})로 확정하세요.
결제 흐름
게임 서버가 결제 세션을 생성 → SDK가 WebView를 열고 딥링크 콜백을 대기 → 서버가 webhook으로 주문을 최종 확정합니다. 딥링크 콜백 결과는 확정의 근거가 아닙니다.
Quick Start
import { CROSSxCocosSDKFactory, CocosSdkModalUI, type CrossPayCallback } from '../CROSSx.Sdk.Cocos/assets/index';
// 1. SDK 인스턴스 생성 (onLoad 등에서 1회 호출)
const sdk = CROSSxCocosSDKFactory.create({
projectId: 'YOUR_PROJECT_ID',
appName: 'My Game',
debug: true,
});
// SDK 소유 UI 모달(서명 확인, WebView 등)에 필요합니다
sdk.setUIProvider(new CocosSdkModalUI(this.node));
await sdk.initialize();
// 2. 게임 서버에서 checkout을 생성하고 이 값들을 받아옵니다
const { checkoutUrl, checkoutId } = await myGameServer.createCheckout(order);
// 3. SDK가 WebView를 열고 딥링크 콜백을 대기
const callback: CrossPayCallback = await sdk.openCrossPayAndWaitResult(
checkoutUrl,
checkoutId,
{ timeoutMs: 300_000 }
);
// 4. 콜백 엔벨로프 상태 확인 (참고용)
if (callback.status === 'success')
console.log('콜백 수신: success — 서버 webhook 확정 대기 중.');
else if (callback.status === 'cancel')
console.log('사용자가 결제창을 닫았습니다.');
else
console.warn('