---
title: Coming from Appcharge
nav: From Appcharge
order: 8
---
# Coming from Appcharge Payment Links

If you already integrated Appcharge Payment Links, most of what you built maps directly, and several steps disappear.

| Appcharge | Appside |
|---|---|
| Server calls **Create Checkout Session**, passes `parsedUrl` + `purchaseId` to the client exactly as received | Not needed. Your server signs a **player token**, and the client calls `purchase(sku, token)` |
| Separate web-store login: **Authenticate Player Callback**, SSO / Player-ID / OTP deeplink / Game Redirect | The same player token logs the player into the store. No callback to your server |
| SDK callbacks `onPurchaseSuccess(OrderResponseModel)` / `onPurchaseFailed` / `onPurchaseCanceled` | `onPurchaseCompleted(order)` / `onPurchaseFailed` / `onPurchaseCanceled` / `onStoreClosed` |
| **Grant Award Callback** to your server | `order.paid` webhook, signed, retried 72 h, idempotency key |
| `signature: t=…,v1=…` HMAC-SHA256 over `t.payload` | `x-appside-timestamp` + `x-appside-signature`, HMAC-SHA256 over `ts.rawBody` |
| Validate `purchaseId` on your server | Optional `getOrder(orderId)` with your server key. The webhook is already the source of truth |
| Universal/Deep link setup | The same, and Studio generates the AASA / assetlinks files |
| iOS, Android, Unity SDKs | The same plus Web, React Native, Flutter, and server SDKs (see [status](/docs/sdks/)) |

Migration guide in short: keep your item-granting code, point it at our webhook, replace the checkout-session call with a player-token endpoint, and swap the SDK call.
