通过网页商城外链启用Buy Button
重要性说明

根据Apple最新的区域政策更新,开发者现在可以将用户从应用引导至外部网站完成虚拟物品的支付。
您可以在游戏中添加按钮、横幅、消息等多种引导方式,让用户一键跳转至安全的浏览器支付界面(网页商城或支付UI),全程合规,无违规风险。
通过网页商城链接集成购买按钮,是一种快速、低代码的解决方案,让玩家可以直接在游戏中选购特定商品,并通过浏览器完成结算。它提供:- 无缝流程 — 点击购买按钮可打开特定商品的网页商城结算页面,允许用户在成功付款后自动返回游戏。
- 支持多种支付方式,包括通过Apple Pay进行一键支付,提供快速、熟悉的移动端结算体验。
- 快速设置 — 如果网页商城已设置完成,只需在游戏中添加包含参数的链接即可。
- 快速上手 — 如果还没有网页商城,可以通过即时创建网页商城、在游戏中添加支付链接并上线来快速开始。
通过此集成方式,您不仅能够使用购买按钮集成,还能体验完整的网页商城功能,包括个性化、推荐计划、忠诚计划、促销码等功能。
如果使用的是非基于建站器的自定义网页商城,并希望将支付中心直接集成到游戏中,请查看通过艾克索拉Mobile SDK进行的集成方案。
运行机制
- 用户在iOS上打开应用。
- 用户点击所需商品旁的
Buy Button 。 - 应用启动浏览器,打开包含
user-id
、purchase-sku
和redirect-url
参数的网页商城链接。 - 网页商城自动完成用户身份认证,并显示所选商品的支付UI。
- 用户选择支付方式并完成购买。
- 系统通过深度链接自动将用户重定向回游戏。
- 应用通过Webhook接收购买确认,并发放购买的商品。
如何获取
- 创建网页商城:
- 在iOS应用中添加逻辑,只向美国用户显示购买链接按钮:
“USA”
),系统将向用户显示购买链接按钮。快速指南
注册发布商帐户并创建项目
发布商帐户是配置艾克索拉功能以及对分析和交易进行操作的主要工具。
要进行注册,请前往发布商帐户并创建帐户。要创建项目,请在侧边栏中单击创建项目并填写所需信息。您可以稍后修改这些设置。

集成过程中需提供项目ID,它可在发布商帐户中项目名称的旁边找到。

设置网页商城模板
- 在发布商帐户中打开项目。
- 在项目主页上,单击更改焦点并选择通过网页商城外链启用购买按钮。
- 在创建您的网页商城页面步骤中,单击创建模板。

- 选择网页商城类型:
- 单页商店 — 所有内容集中在一个页面的网站。
- 多页网页门户 — 包含三个独立页面的网站:主页、商品目录页和新闻页。

- 单击继续。
- 在快速选项卡上,添加游戏在App Store的链接。这样可快速创建为游戏量身定制的网站:系统会在创建过程中自动添加游戏图片、标题、开发者名称和颜色方案。
- 单击创建网页商城。
设置商品目录
在艾克索拉平台上,您需要创建游戏内所销售商品的目录。可选择以下方法之一设置目录:
- 导入商品:上传JSON文件,快速将目录添加至发布商帐户。
- 使用API调用:适合自动化或大规模更新。
- 从App Store、Google Play或PlayFab导入目录:直接从外部平台转移现有目录。
- 手动设置目录:直接在发布商帐户中添加和编辑商品。
设置用户身份认证
要将购买物发放至用户的游戏内帐户,请配置通过游戏中的用户ID进行身份认证。
您还需设置Webhook处理来验证用户是否存在。当通过游戏内直接链接打开网页商城时,此Webhook用于提供额外验证,此外当用户在游戏客户端外访问网页商城时,此Webhook用于用户身份认证。
要配置身份认证:
- 在您的应用程序侧,实现对用户验证Webhook的处理。
收到Webhook后,应用程序应执行以下操作:
- 根据Webhook中传入的ID搜索用户。
- 根据结果发送以下状态代码之一:
- 如找到了该用户,发送200 HTTP代码和Webhook回应
- 如未找到该用户,发送404 HTTP代码
- 发送用户属性。
- 在发布商帐户中打开您的项目,前往商店 > 网站部分。
- 在所需网站的窗格中,单击打开建站器。
- 前往登录设置区块。

- 选择用户ID选项。

- 在下拉列表中,选择新建登录管理器。

- 输入接收Webhook的URL。此URL可能与项目设置 > Webhooks中指定的URL不同。
https://
开头。使用http://
会导致错误。
配置Webhook向用户发放购买物
Webhook是系统中发生事件时的通知。当特定事件发生时,艾克索拉会发送HTTP请求,将事件数据传输到您的游戏服务器。游戏客户端和/或服务器需要通过这些Webhook接收支付成功/失败和用户身份认证尝试成功/失败的通知。
启用Webhook
- 在发布商帐户中打开您的项目,前往项目设置 > Webhooks部分。
- 在Webhook服务器字段中,指定服务器URL(即接收Webhook的地址),格式为
https://example.com
。您也可以使用Webhook测试工具中提供的URL。 - 将默认生成一个给项目Webhook签名的密钥。如要生成新密钥,请单击刷新图标。
- 单击启用Webhook。

测试Webhook
在付款和商店选项卡中,您可以测试以下Webhook:
用户验证(“notification_type”:“user_validation”):
- curl
1curl -v 'https://your.hostname/your/uri' \
2-X POST \
3-H 'Accept: application/json' \
4-H 'Content-Type: application/json' \
5-H 'Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \
6-d '{
7 "notification_type":"user_validation",
8 "settings": {
9 "project_id": 18404,
10 "merchant_id": 2340
11 },
12 "user": {
13 "ip": "127.0.0.1",
14 "phone": "18777976552",
15 "email": "email@example.com",
16 "id": "1234567",
17 "name": "John Smith",
18 "country": "US"
19 }
20}'
订单成功支付(“notification_type”: “order_paid”):
- curl
1curl -v 'https://your.hostname/your/uri' \
2-X POST \
3-H 'Accept: application/json' \
4-H 'Content-Type: application/json' \
5-H 'Authorization: Signature d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \
6-d '{
7 "notification_type": "order_paid",
8 "items": [
9 {
10 "sku": "com.xsolla.item_1",
11 "type": "virtual_good",
12 "is_pre_order": false,
13 "quantity": 3,
14 "amount": "1000",
15 "promotions": [
16 {
17 "amount_without_discount": "6000",
18 "amount_with_discount": "5000",
19 "sequence": 1
20 },
21 {
22 "amount_without_discount": "5000",
23 "amount_with_discount": "4000",
24 "sequence": 2
25 }
26 ],
27 "custom_attributes":
28 {
29 "purchased": 0,
30 "attr": "value"
31 }
32 },
33 {
34 "sku": "com.xsolla.item_new_1",
35 "type": "bundle",
36 "is_pre_order": false,
37 "quantity": 1,
38 "amount": "1000",
39 "promotions": []
40 },
41 {
42 "sku": "com.xsolla.gold_1",
43 "type": "virtual_currency",
44 "is_pre_order": false,
45 "quantity": 1500,
46 "amount": null,
47 "promotions": []
48 }
49 ],
50 "order": {
51 "id": 1,
52 "mode": "default",
53 "currency_type": "virtual",
54 "currency": "sku_currency",
55 "amount": "2000",
56 "status": "paid",
57 "platform": "xsolla",
58 "comment": null,
59 "invoice_id": "1",
60 "promotions": [
61 {
62 "amount_without_discount": "4000",
63 "amount_with_discount": "2000",
64 "sequence": 1
65 }
66 ],
67 "promocodes": [
68 {
69 "code": "promocode_some_code",
70 "external_id": "promocode_sku"
71 }
72 ],
73 "coupons": [
74 {
75 "code": "WINTER2021",
76 "external_id": "coupon_sku"
77 }
78 ]
79 },
80 "user": {
81 "external_id": "id_xsolla_login_1",
82 "email": "gc_user@xsolla.com"
83 },
84 "billing": {
85 "notification_type": "payment",
86 "settings": {
87 "project_id": 18404,
88 "merchant_id": 2340
89 },
90 "purchase": {
91 "subscription": {
92 "plan_id": "b5dac9c8",
93 "subscription_id": "10",
94 "product_id": "Demo Product",
95 "date_create": "2014-09-22T19:25:25+04:00",
96 "date_next_charge": "2014-10-22T19:25:25+04:00",
97 "currency": "USD",
98 "amount": 9.99
99 },
100 "total": {
101 "currency": "USD",
102 "amount": 200
103 },
104 "promotions": [{
105 "technical_name": "Demo Promotion",
106 "id": 853
107 }],
108 "coupon": {
109 "coupon_code": "ICvj45S4FUOyy",
110 "campaign_code": "1507"
111 }
112 },
113 "transaction": {
114 "id": 1,
115 "external_id": 1,
116 "payment_date": "2014-09-24T20:38:16+04:00",
117 "payment_method": 1,
118 "payment_method_name": "PayPal",
119 "payment_method_order_id": 1234567890123456789,
120 "dry_run": 1,
121 "agreement": 1
122 },
123 "payment_details": {
124 "payment": {
125 "currency": "USD",
126 "amount": 230
127 },
128 "vat": {
129 "currency": "USD",
130 "amount": 0,
131 "percent": 20
132 },
133 "sales_tax": {
134 "currency": "USD",
135 "amount": 0,
136 "percent": 0
137 },
138 "direct_wht": {
139 "currency": "USD",
140 "amount": 0,
141 "percent": 0
142 },
143 "payout_currency_rate": "1",
144 "payout": {
145 "currency": "USD",
146 "amount": 200
147 },
148 "country_wht": {
149 "currency": "USD",
150 "amount": 2,
151 "percent": 10
152 },
153 "user_acquisition_fee": {
154 "currency": "USD",
155 "amount": 2,
156 "percent": 1
157 },
158 "xsolla_fee": {
159 "currency": "USD",
160 "amount": 10
161 },
162 "payment_method_fee": {
163 "currency": "USD",
164 "amount": 20
165 },
166 "repatriation_commission": {
167 "currency": "USD",
168 "amount": 10
169 }
170 }
171 }
172 ,
173 "custom_parameters": {
174 "parameter1": "value1",
175 "parameter2": "value2"
176 }
177}'
在沙盒模式中测试网站
在沙盒模式中测试网站:
- 在发布商帐户中打开您的项目,然后前往商店 > 网站部分。
- 在所需网站的窗格中单击打开建站器。
- 单击预览。

- 选择一个商品并单击购买按钮。
- 选择银行卡支付方式组。
- 输入测试银行卡详细信息。在其余字段中输入任意值。您也可以指定不正确的细节(卡号、到期日、或CVV)以生成错误。
发布网站
- 要提升您的网站成效:
a. 在SEO设置区块中,设置搜索引擎使用的参数以及社交网络中的页面预览参数:上传网站图标,指定商店标题和描述,添加预览图片。
b. 配置网站本地化。
c. 更改域名(可选)。为此,前往商店 > 网站部分,在您的网站窗格中单击配置。在域名部分,编辑艾克索拉域名值,或设置您自己的域名。
- 完成所有必要更改且在网页商城准备好上线后,单击发布。

- 建站器中没有空字段(红色标记的部分)。
- 已签署与艾克索拉的许可协议。
在游戏中添加购买链接按钮
在游戏中添加按钮,将用户重定向至网页商城支付所选商品。按钮必须包含以下格式的链接:https://yourwebshop.xsolla.site/?user-id=<USER_ID>&purchase-sku=<ITEM_SKU>&redirect-url=<RETURN_TO_GAME_URL>
,其中:
yourwebshop.xsolla.site
是您的网页商城网站链接。user-id
是用户在您系统中的ID。purchase-sku
是网页商城目录中目标商品的SKU。redirect-url
是网页的URL地址(例如,https://example.com/success
)或深度链接(例如,mygame://open
),用户完成支付后将重定向到该地址。使用深度链接时,请确保:- 使用正确的格式,包括机制和路径(例如,
mygame://open
),而不仅仅是机制(mygame://
) - 深度链接在您的移动端游戏应用程序内得到处理。
- 使用正确的格式,包括机制和路径(例如,
要查找商品SKU(以虚拟物品为例):
- 在发布商帐户中打开您的项目,然后前往商品目录 > 虚拟物品部分。
- 导航至包含目标商品的分组。
- 在商品名称下方的行中复制SKU。
检测iOS商店
要确定是否可以显示“USA”
,则启用
请确保实现方案具有足够的灵活性,以便日后支持更多国家/地区,因为监管条件和平台政策可能会发生变化。
请注意,除非用户在系统设置中明确更新其Apple ID区域,否则设备上的商店值不会改变。
- swift
1let countryCode = await Storefront.current?.countryCode
2let showBuyButton = countryCode == "USA"
其他功能
通过在网站URL中使用查询参数,您可为用户提供快速访问网页商城功能的途径。详细信息请参阅查询参数使用说明。
AppsFlyer高级分析
使用外链方式让用户直接在网页支付界面中购买商品时,您仍然可以通过AppsFlyer等移动端测量合作伙伴(MMP)追踪其购买记录并衡量用户生命周期价值(LTV)。艾克索拉支持两种集成方式,实现跨移动端和网页平台无缝追踪用户获取、再营销和购买活动。
选择最适合您的集成类型,帮助您全面掌握活动效果和收入情况:
集成类型 | 运行机制 |
---|---|
移动应用S2S集成 — 支持完整测量应用程序内和网页商城购买的LTV及广告支出回报率(ROAS)。 |
|
Web SDK集成 — 支持衡量和评估吸引流量至网页商城的用户获取和再营销活动效果。 |
|
发现了错别字或其他内容错误? 请选择文本,然后按Ctrl+Enter。