엑솔라 웹훅 수신
구매를 처리할 때 엑솔라는 여러 이벤트를 알리는 웹훅을 전송합니다(예: 결제 취소, 장바구니 내역 가져오기). 이러한 웹훅은 다음 사항에 사용할 수 있습니다.
- 자체 솔루션 사용 또는 타사 솔루션 사용에 상관없이 플레이어 인벤토리에 구매 내역 추가
- 주문 확인 및 처리용 논리를 구현하여 정보 로그, 보상 부여, 주문에 대한 할인 제공 등을 수행.
BaaS 측에서 웹훅을 받으려면 Firebase 및 PlayFab용 지침을 따라 사용할 준비가 된 함수를 프로젝트에 추가합니다.
클라우드 기능을 Firebase 프로젝트에 추가
- Firebase 프로젝트를 초기화합니다.
- 프로젝트 설정 > 웹훅 섹션의 관리자 페이지에서 찾을 수 있는 비밀 키가
<WebhookSecretKey>
인 조건에서 웹훅 수신 함수를 가져옵니다.
웹훅 수신용 함수 코드:
Copy
- javascript
1const webhookSecretKey = "<WebhookSecretKey>";
2
3exports.webhook = functions.https.onRequest((request, response) => {
4 const requestRawBody = request.rawBody.toString("utf-8");
5 const crypto = require("crypto");
6 const sig = "Signature " + crypto
7 .createHash("sha1")
8 .update(requestRawBody + webhookSecretKey)
9 .digest("hex");
10 if (request.headers.authorization !== sig) {
11 response.status(401).send();
12 return;
13 }
14
15 // TODO Replace this block with your game's logic for purchases handling
16 switch (request.body.notification_type) {
17 case "order_paid": {
18 const userId = request.body.user.external_id;
19 const skus = request.body.items.map(function(it) {
20 return it.sku;
21 }).join(", ");
22 const price =
23 `${request.body.order.amount} ${request.body.order.currency}`;
24 functions.logger.log(
25 "Order Paid\n",
26 `A user ${userId} has just paid ${price} for ${skus}\n`,
27 "Full Data\n",
28 request.body
29 );
30 break;
31 }
32 case "order_canceled": {
33 const userId = request.body.user.external_id;
34 const orderId = request.body.order.id;
35 functions.logger.log(
36 "Order Canceled\n",
37 `A user ${userId} has just canceled order ${orderId}\n`,
38 "Full Data\n",
39 request.body
40 );
41 break;
42 }
43 }
44
45 response.status(204).send();
46});
- 웹훅 처리 논리를 구현합니다.
알림
웹훅 수신용으로 만든 함수는 구매 시 장바구니 내역 가져오기 및 결제 취소와 관련이 있습니다. 결제 페이지에서 다른 이벤트와 관련된 웹훅의 처리를 자체적으로 구현하실 수 있습니다.
- 이 예시를 따라 제품 환경에 함수를 배포합니다.
- Firebase 콘솔에서
Build > Functions 으로 이동한 다음 웹훅 수신 함수의 URL을 복사합니다. - 관리자 페이지의 프로젝트를 엽니다.
- 프로젝트 설정 > 웹훅으로 이동합니다.
- 웹훅 서버 필드에서 함수 수신 웹훅의 URL을 지정합니다.
클라우드 스크립트를 PlayFab 프로젝트에 추가
알림
PlayFab 클라우드 스크립트는 HTTP 트리거 함수를 직접 지원하지 않으므로 Azure 함수가 웹훅 수신 구현에 사용됩니다.
- Azure 함수와 작업할 개발 환경을 준비합니다.
- 예시를 따라 웹훅 수신용 함수를 추가합니다. 여기서
<WebhookSecretKey>
는 비밀키이며 프로젝트 설정 > 웹훅 섹션의 관리자 페이지에서 찾을 수 있습니다.
웹훅 수신용 함수 코드:
Copy
- javascript
1const webhookSecretKey = "<WebhookSecretKey>";
2
3module.exports = async function (context, request) {
4 const requestRawBody = request.rawBody.toString("utf-8");
5 const crypto = require("crypto");
6 const sig = "Signature " + crypto
7 .createHash("sha1")
8 .update(requestRawBody + webhookSecretKey)
9 .digest("hex");
10 if (request.headers.authorization !== sig) {
11 context.res = {
12 status: 401
13 };
14 return;
15 }
16
17 // TODO Replace this block with your game's logic for purchases handling
18 switch (request.body.notification_type) {
19 case "order_paid": {
20 const userId = request.body.user.external_id;
21 const skus = request.body.items.map(function (it) {
22 return it.sku;
23 }).join(", ");
24 const price =
25 `${request.body.order.amount} ${request.body.order.currency}`;
26 context.log(
27 "Order Paid\n" +
28 `A user ${userId} has just paid ${price} for ${skus}\n` +
29 "Full Data\n" +
30 JSON.stringify(request.body)
31 );
32 break;
33 }
34 case "order_canceled": {
35 const userId = request.body.user.external_id;
36 const orderId = request.body.order.id;
37 context.log(
38 "Order Canceled\n" +
39 `A user ${userId} has just canceled order ${orderId}\n` +
40 "Full Data\n" +
41 JSON.stringify(request.body)
42 );
43 break;
44 }
45 }
46
47 context.res = {
48 status: 204
49 };
50}
- 웹훅 처리 논리를 구현합니다.
알림
웹훅 수신용으로 만든 함수는 구매 시 장바구니 내역 가져오기 및 결제 취소와 관련이 있습니다. 결제 페이지에서 다른 이벤트와 관련된 웹훅의 처리를 자체적으로 구현하실 수 있습니다.
- 제품 환경에 함수를 배포합니다.
- 함수 URL을 복사합니다.
- PlayFab 프로젝트로 이동합니다.
- 클라우드 스크립트 함수를 등록합니다.
- 관리자 페이지의 프로젝트를 엽니다.
- 프로젝트 설정 > 웹훅으로 이동합니다.
- 웹훅 서버 필드에서 웹훅 수신 함수 URL을 지정합니다.
이 기사가 도움이 되었나요?
의견을 보내 주셔서 감사드립니다!
메시지를 검토한 후 사용자 경험 향상에 사용하겠습니다.오자 또는 기타 텍스트 오류를 찾으셨나요? 텍스트를 선택하고 컨트롤+엔터를 누르세요.