Integrate store into game
After you have created and configured goods (virtual items, virtual currencies, bundles, keys) in your Publisher Account, add an In-Game Store to your game:
- Implement the display of items catalog.
- Implement the logic for selling items.
Display of items catalog
Implement a display of items catalog via In-Game Store API calls:
Task | API |
---|---|
To display a complete list of virtual items added to your Store | Get virtual items list |
To display a list of groups of virtual items available for sale on the client side | Get item groups list |
To get a list of virtual currencies available for sale in your Store on the client side | Get virtual currency list |
To display a complete list of virtual currency packages added to your Store on the client side | Get virtual currency package list |
To display a complete list of bundles added to your Store | Get list of bundles |
1
when requesting the catalog.Selling items
You can sell items in the following ways:
- Fast purchase of one item. In this case, you can sell one SKU in any quantity (for example, 100 identical potions or a custom amount of virtual currency).
- Buying a cart. In this case, the player can pre-fill a cart, add or remove items, or change their quantities.
Fast purchase
- Call the Create order with specified item API. A token for opening the payment UI will be passed to the response.
- Open payment UI using received payment token.
Cart purchase
Implement the logic:- To set up a cart and get the token:
- On the client — if you want to implement the cart in your application by yourself.
- On the server — if you want to use Xsolla’s solution (In-Game Store API calls) to manage the cart.
- To open payment UI.
Set up and purchase a cart on the client
Implement the logic of adding and removing items by yourself. You also need to consider that before calling API for setting up a cart, you will not have information about which promotions will be applied to the purchase. This means that the total cost and details of the added bonus items will not be known.
- After the player has filled a cart, call the Fill cart with items API. The current information about the selected items (prices before and after discounts, bonus items) will be passed to the response.
- Call the Create order with all items from current cart API. The order ID and payment token will be passed to the response. The created order will receive a New order status.
- Open payments UI.
Set up and purchase a cart on server
This variant may take longer for setting the cart up, since each change to the cart must be accompanied by API calls.
Complete the following steps:
- Change the cart:
- For adding an item or changing item quantity, call the Update cart item by card ID API.
- For removing an item, call the Delete cart item by card ID API.
- Call the Create order with all items from the current cart API. The order ID and payment token will be passed to the response. The created order will receive a New order status.
- Open payment UI.
Opening the payment interface
For paying items, open the payment UI. A token for opening the payment UI will be passed to the Create order with all items from current cart API response.
Implement the opening of the payment UI in one of the following ways:
- In a new window. To open the payment UI in a new browser window, use the link:
https://secure.xsolla.com/paystation3/?access_token=ACCESS_TOKEN
, whereACCESS_TOKEN
is the token received when the order was created. - Via widget. Use the Xsolla PayStation Widget script (README file contains instructions).
Testing payment process
You can test payment flow in the Sandbox mode. You can use a test bank card and any account.
After the first real payment is made, a strict sandbox payment policy takes effect. A payment in the sandbox mode is available only to users who are specified in Publisher Account > Company settings > Users.
Buying virtual currency and items for real currency is possible only after signing a license agreement with Xsolla. To do this, in Publisher Account, go to the Agreements & Taxes > Agreements section, complete the agreement form, and wait for the confirmation. It may take up to 3 business days to review the agreement.
sandbox
parameter in the request to fast purchase and purchase a cart. Sandbox mode is off by default.Get user order status
You can use the following ways to get a user order status:
Get user order status on the server side via webhooks
After you have configured webhooks on your server, you can use them to get the order details and status.Get user order status on the client side via WebSocket API or IGS API
If you have no server or you implement the logic for purchase processing on the client side, you can use the following ways:Get an order status on the client side using WebSocket API
The solution uses websockets to obtain order statuses without obtaining detailed information about the order. This method is preferable: only one connection is created between the client (for example, your website or mobile application) and the Xsolla server, so there is no additional load on either the client or the server.
Complete the following steps:
- To allow the Xsolla websocket server and your client to identify order status messages, create a connection:
- javascript
const client = new Centrifuge(
connectionURL,
{
data: {
user_external_id: user_external_id,
auth: auth,
project_id: project_id
}
}
)
connectionURL - wss://ws-store.xsolla.com/connection/websocket
auth - user JWT token
- To receive new messages about order statuses, subscribe to events using the
client.on
function:
- javascript
client.on('publication', (ctx) => {
//handle the status
});
- Trigger actual connection establishment:
- javascript
client.connect()
- To receive the history of changes in order statuses, connect the API history method.
- javascript
client.on('subscribed', function (ctx) {
client.history(ctx.channel, { limit: -1, since: { offset: 0 }, reverse: false }).then(function (resp) {
resp.publications.forEach((ctx) => {
/handle the status
});
}, function (err) {
//handle the status
});
});
Message body example:
- javascript
{
order_id: 59614241,
status: 'new'
}
The following order statuses are possible:
New
— order was created but not paidPaid
— order is paidDone
— order has been delivered (all receipts sent, deliveries made on Xsolla’s side, external platforms, etc.)Canceled
— order is canceled and payment refunded to a user
The required time for a response via websocket is 5 minutes. After that or if there are any problems with the websocket, it is recommended to use short-polling.
Short-polling
To get detailed information about items in the order after switching to the status, call the Get order API.
Found a typo or other text error? Select the text and press Ctrl+Enter.