클라이언트 측 (Client-Side)
SDK는 글로벌 window.CryptoPaymentsWidget 객체를 제공합니다. 추가 설치 단계는 필요하지 않습니다.
서버 측 (Server-Side) — 위젯 토큰 생성
보안을 위해 서버에서 위젯 인증 토큰을 생성하고 클라이언트에 전달해야 합니다.
Node.js 예제
JavaScript
const crypto = require('crypto');
const SECRET_KEY = 'your_partner_secret_key';
const API_KEY = 'your_api_key';
// 위젯 토큰 생성 엔드포인트
app.post('/api/widget-token', (req, res) => {
const timestamp = Date.now().toString();
const partnerId = req.body.partnerId;
const partnerUserId = req.body.partnerUserId;
const permissions = req.body.permissions || ['deposit'];
const body = JSON.stringify({
partnerId,
partnerUserId,
permissions,
timestamp
});
const signature = crypto.createHmac('sha256', SECRET_KEY)
.update(timestamp + 'POST' + '/widgets/auth/token' + body)
.digest('hex');
// 실제로는 CRYPTOMENTS API 호출
const token = Buffer.from(body).toString('base64') + '.' + signature;
res.json({ token, expiresIn: 3600 });
});
Java/Spring 예제
Java
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
@RestController
@RequestMapping("/api")
public class WidgetController {
@PostMapping("/widget-token")
public ResponseEntity<?> generateWidgetToken(@RequestBody WidgetTokenRequest req) {
String secretKey = "your_partner_secret_key";
String timestamp = String.valueOf(System.currentTimeMillis());
String body = "{\"partnerId\":\"" + req.getPartnerId() +
"\",\"partnerUserId\":\"" + req.getPartnerUserId() +
"\",\"permissions\":" + req.getPermissions() + "}";
String message = timestamp + "POST" + "/widgets/auth/token" + body;
String signature = hmacSha256(message, secretKey);
String token = Base64.getEncoder().encodeToString(body.getBytes())
+ "." + signature;
return ResponseEntity.ok(Map.of(
"token", token,
"expiresIn", 3600
));
}
private String hmacSha256(String message, String secret) {
try {
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(secret.getBytes(), "HmacSHA256"));
return Base64.getEncoder().encodeToString(mac.doFinal(message.getBytes()));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
클라이언트에서 토큰 사용
JavaScript
// 서버에서 토큰 받기
const response = await fetch('/api/widget-token', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
partnerId: 'partner_123',
partnerUserId: 'user_001',
permissions: ['deposit', 'withdrawal']
})
});
const { token } = await response.json();
// 위젯 초기화 (토큰 포함)
const widget = new CryptoPaymentsWidget({
apiKey: 'pk_live_xxx',
token: token,
userId: 'user_001',
mode: 'modal'
});