# Make

> 모든 Make 시나리오에 결제를: 결제된 청구서, 환불, 구독, 고객의 즉시 트리거, 청구서와 결제 링크를 만들고 찾는 모듈.

Perly Pay 앱이 내 결제를 Make로 가져옵니다. 결제된 청구서가 시트를 채우고, CRM을 업데이트하고, Discord 역할을 줄 수 있습니다. 폼이 청구서를 만들고 결제 페이지를 보낼 수 있습니다. 호스팅할 것도, 코드도 없습니다.

> **참고:** 테스트 키와 라이브 키는 두 개의 연결입니다. 테스트 연결의 시나리오는 테스트 결제만 봅니다.

## 연결

1. **키 받기** — Perly Pay에서: Dashboard → Developers → API keys. [테스트 모드](https://pay.perly.io/docs/test-mode.md)는 `sk_test_…`, 실제 돈은 `sk_live_…`.
2. **시나리오에 Perly Pay 추가** — 앱은 Make 앱 목록에 올라가는 중입니다. 그때까지는 [문의](https://pay.perly.io/ko/contact)로 초대 링크를 요청하세요. 한 번 연 뒤 모듈을 추가할 때 **Perly Pay**를 검색하면 됩니다.
3. **연결** — 연결을 **Add**하고 키를 붙여 넣으세요. 테스트와 라이브를 구별할 수 있게 이름을 붙이세요.

## 즉시 트리거

| 모듈 | 시점 | 이벤트 |
| --- | --- | --- |
| Watch paid invoices | 전액 결제, 송금자 검사 완료. 이용권을 주거나 상품을 보낼 때. | `invoice.fulfilled` |
| Watch underpaid invoices | 구매자가 청구서보다 적게 보냄. | `invoice.underpaid` |
| Watch opened refunds | [환불](https://pay.perly.io/docs/refunds.md)을 시작함. | `refund.requested` |
| Watch confirmed refunds | 내가 보낸 환불이 네트워크에서 확정됨. | `refund.confirmed` |
| Watch started subscriptions | [구독](https://pay.perly.io/docs/subscriptions.md)이 시작됨. | `subscription.created` |
| Watch renewed subscriptions | 구독자가 다음 기간을 결제함. | `subscription.renewed` |
| Watch ended subscriptions | 구독이 끝남. 이용권을 거둘 때. | `subscription.ended` |
| Watch new customers | 새 구매자. | `customer.created` |

Make에서 트리거의 웹훅을 추가하면 Dashboard → Developers → Webhooks에 **Make: Paid invoices** 같은 웹훅이 나타나고, Make에서 지우면 사라집니다. 시나리오가 실행되기 전에 Make는 모든 전송을 내 키로 Perly Pay에서 받아 오고, Perly Pay는 전송마다 한 번만 내줍니다. Perly Pay가 보내지 않았거나 다시 보낸 요청은 아무것도 실행하지 않습니다. 웹훅 하나하나가 모드당 가질 수 있는 16개 중 하나입니다.

모든 트리거는 이벤트와 그 대상 객체 — 청구서, 환불, 구독, 고객 — 를 [API](https://pay.perly.io/docs/api.md)에 있는 형태 그대로 넘깁니다. 통화 금액은 센트 단위입니다(`total` 4900은 49.00): 매핑에서 100으로 나누세요. 코인 금액은 코인의 최소 단위이며, 옆에 `decimals`가 있습니다.

## 모듈

| 모듈 | 넣을 것 | 받는 것 |
| --- | --- | --- |
| Create an invoice | 금액(예: 49.00), 설명. 선택으로 통화, 고객 이메일, 돌아갈 URL, 메타데이터 | 구매자용 결제 페이지(**Payment page URL**)가 있는 청구서 |
| Create a payment link | 가격, 또는 새 상품의 이름과 금액 | 그 상품을 파는 페이지 — 어디든 공유하세요 |
| Get an invoice | 청구서 ID | 상태, 도착한 금액, 결제 페이지 |
| Search customers | 이메일, 또는 비워 두면 전체 | 고객, 최신순 |
| Make an API call | `/invoices` 같은 경로, 메서드, 필요하면 JSON 본문 | API 응답 그대로. 다른 모듈이 하지 않는 모든 일에 |

## 레시피

### 결제 → Google Sheets의 행

1. **트리거** — Perly Pay → **Watch paid invoices**. 웹훅을 추가하고, 시나리오를 한 번 실행한 뒤 테스트 청구서를 결제해 Make가 필드를 알게 하세요.
2. **동작** — Google Sheets → **Add a Row**, 날짜, 이메일, 금액, 코인 같은 열이 있는 시트에.
3. **매핑** — 날짜 → Invoice: Paid at, 이메일 → Customer email, 금액 → `Total (cents) / 100`, 코인 → Payment: Coin. 켜세요.

### 결제 → Discord 역할

Discord는 누가 결제했는지 알아야 합니다. 청구서를 만들 때 구매자의 Discord ID를 넣어 두고, 청구서가 결제되면 다시 읽으세요.

1. **시나리오 1: 청구서** — 트리거: 이메일과 Discord ID를 받는 가입 폼. Perly Pay → **Create an invoice**, 메타데이터 키 `discord_user_id`, 값은 폼의 응답. 그다음 구매자에게 **Payment page URL**을 보내세요.
2. **시나리오 2: 역할** — Perly Pay → **Watch paid invoices**. Discord → **Add a Role to a Member**(또는 Discord로 **Make an API call**): 내 서버, 역할, 멤버 = Invoice: Metadata → `discord_user_id`.
3. **역할 회수** — 구독이라면 **Watch ended subscriptions**로 같은 방식으로 역할을 뺍니다.

## 테스트

테스트 연결에서 청구서를 만들고(모듈이나 대시보드에서) 테스트 코인으로, 또는 청구서 ID로 API를 통해 결제하세요:

```bash
curl -X POST https://pay.perly.io/api/v1/invoices/inv_…/simulate \
  -H "Authorization: Bearer $PERLY_PAY_SECRET_KEY" -H "Content-Type: application/json" -d '{}'
```

몇 초 안에 시나리오가 실행됩니다. History에서 모든 실행과 받은 내용을 볼 수 있습니다.

## 실제 결제

- Perly Pay에서 라이브 모드를 켜고 지갑의 공개 키를 연결하세요.
- `sk_live_…` 키로 연결을 추가하세요. 시나리오마다 그 연결로 트리거용 새 웹훅을 추가하고, 다른 Perly Pay 모듈도 그 연결로 옮기세요.
- 작은 실제 청구서 하나를 결제하고 도착하는 걸 지켜보세요.
