通过网页商城外链启用Buy Button

重要性说明

根据Apple最新的区域政策更新,开发者现在可以将用户从应用引导至外部网站完成虚拟物品的支付。

您可以在游戏中添加按钮、横幅、消息等多种引导方式,让用户一键跳转至安全的浏览器支付界面(网页商城或支付UI),全程合规,无违规风险。

通过网页商城链接集成购买按钮,是一种快速、低代码的解决方案,让玩家可以直接在游戏中选购特定商品,并通过浏览器完成结算。它提供:
  • 无缝流程 — 点击购买按钮可打开特定商品的网页商城结算页面,允许用户在成功付款后自动返回游戏。
  • 支持多种支付方式,包括通过Apple Pay进行一键支付,提供快速、熟悉的移动端结算体验。
  • 快速设置 — 如果网页商城已设置完成,只需在游戏中添加包含参数的链接即可。
  • 快速上手 — 如果还没有网页商城,可以通过即时创建网页商城、在游戏中添加支付链接并上线来快速开始。

通过此集成方式,您不仅能够使用购买按钮集成,还能体验完整的网页商城功能,包括个性化、推荐计划、忠诚计划、促销码等功能

如果使用的是非基于建站器的自定义网页商城,并希望将支付中心直接集成到游戏中,请查看通过艾克索拉Mobile SDK进行的集成方案。

注:
要在网页商城中启用Apple Pay,请确保您的域名已加入白名单(参考设置说明),并发送邮件至integration@xsolla.com联系艾克索拉集成团队。另外,艾克索拉Mobile SDK默认启用Apple Pay。
注意
Buy Button目前仅适用于美国地区的iOS用户。我们正在密切关注其他区域和平台的相关法规动态,有任何更新都会及时通知。

运行机制

  1. 用户在iOS上打开应用。
  2. 用户点击所需商品旁的Buy Button
  3. 应用启动浏览器,打开包含user-idpurchase-skuredirect-url参数的网页商城链接。
  4. 网页商城自动完成用户身份认证,并显示所选商品的支付UI。
  5. 用户选择支付方式并完成购买。
  6. 系统通过深度链接自动将用户重定向回游戏。
  7. 应用通过Webhook接收购买确认,并发放购买的商品。

如何获取

  1. 创建网页商城:
    1. 在发布商帐户中创建项目
    2. 设置模板
    3. 创建商品目录
    4. 配置用户身份认证
    5. 配置Webhook向用户发放购买物
    6. 测试网站
    7. 发布网站
  2. 在iOS应用中添加逻辑,只向美国用户显示购买链接按钮:
    1. 在游戏中添加按钮
    2. 检测iOS商店
如果返回的商店国家为美国(“USA”),系统将向用户显示购买链接按钮。

快速指南

注册发布商帐户并创建项目

发布商帐户是配置艾克索拉功能以及对分析和交易进行操作的主要工具。

要进行注册,请前往发布商帐户并创建帐户。要创建项目,请在侧边栏中单击创建项目并填写所需信息。您可以稍后修改这些设置。

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

设置网页商城模板

注:
如果已有网页商城,可跳过本节直接进入设置商品目录
在发布商帐户的项目主页上按照以下简单步骤为游戏创建网页商城:
  1. 发布商帐户中打开项目。
  2. 在项目主页上,单击更改焦点并选择通过网页商城外链启用购买按钮
  3. 创建您的网页商城页面步骤中,单击创建模板
  1. 选择网页商城类型:
    • 单页商店 — 所有内容集中在一个页面的网站。
    • 多页网页门户 — 包含三个独立页面的网站:主页、商品目录页和新闻页。
  1. 单击继续
  2. 快速选项卡上,添加游戏在App Store的链接。这样可快速创建为游戏量身定制的网站:系统会在创建过程中自动添加游戏图片、标题、开发者名称和颜色方案。
  3. 单击创建网页商城
网页商城创建成功后,单击继续设置返回焦点设置并进入下一步。

设置商品目录

在艾克索拉平台上,您需要创建游戏内所销售商品的目录。可选择以下方法之一设置目录:

设置用户身份认证

要将购买物发放至用户的游戏内帐户,请配置通过游戏中的用户ID进行身份认证。

您还需设置Webhook处理来验证用户是否存在。当通过游戏内直接链接打开网页商城时,此Webhook用于提供额外验证,此外当用户在游戏客户端外访问网页商城时,此Webhook用于用户身份认证。

要配置身份认证:

  1. 在您的应用程序侧,实现对用户验证Webhook的处理。

收到Webhook后,应用程序应执行以下操作:

  • 根据Webhook中传入的ID搜索用户。
  • 根据结果发送以下状态代码之一:
    • 如找到了该用户,发送200 HTTP代码和Webhook回应
    • 如未找到该用户,发送404 HTTP代码
    如要进行个性化,
  • 发送用户属性

注:
用户ID对每个用户必须唯一。
  1. 在发布商帐户中打开您的项目,前往商店 > 网站部分。
  2. 在所需网站的窗格中,单击打开建站器
  3. 前往登录设置区块。
  1. 选择用户ID选项。
注:
登录管理器项目中的小组件自定义设置不影响用户ID认证界面。
  1. 在下拉列表中,选择新建登录管理器
  1. 输入接收Webhook的URL。此URL可能与项目设置 > Webhooks中指定的URL不同。
注:
Webhook URL应以https://开头。使用http://会导致错误。
注:
用户流程和详细设置请参阅用户ID身份认证说明

配置Webhook向用户发放购买物

Webhook是系统中发生事件时的通知。当特定事件发生时,艾克索拉会发送HTTP请求,将事件数据传输到您的游戏服务器。游戏客户端和/或服务器需要通过这些Webhook接收支付成功/失败和用户身份认证尝试成功/失败的通知。

启用Webhook

  1. 在发布商帐户中打开您的项目,前往项目设置 > Webhooks部分。
  2. Webhook服务器字段中,指定服务器URL(即接收Webhook的地址),格式为https://example.com。您也可以使用Webhook测试工具中提供的URL。
  3. 将默认生成一个给项目Webhook签名的密钥。如要生成新密钥,请单击刷新图标。
  4. 单击启用Webhook

测试Webhook

注:
有关全部Webhook的详细信息,请参阅Webhook部分。

付款和商店选项卡中,您可以测试以下Webhook:

用户验证(“notification_type”:“user_validation”):

Copy
Full screen
Small screen
 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”):

Copy
Full screen
Small screen
  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}'

在沙盒模式中测试网站

在沙盒模式中测试网站:

  1. 在发布商帐户中打开您的项目,然后前往商店 > 网站部分。
  2. 在所需网站的窗格中单击打开建站器
  3. 单击预览
  1. 选择一个商品并单击购买按钮。
  2. 选择银行卡支付方式组。
  3. 输入测试银行卡详细信息。在其余字段中输入任意值。您也可以指定不正确的细节(卡号、到期日、或CVV)以生成错误。
注:
沙盒模式下只能使用测试银行卡。沙盒模式下的银行卡付款支持以下货币:USD、EUR、RUB、GBP、AED、ALL、AMD、ARS、AUD、AZN、BGN、BRL、BYN、CAD、CHF、CLP、CNY、COP、CZK、DKK、DZD、EGP、GEL、HKD、HRK、HUF、IDR、ILS、INR、ISK、JPY、KES、KGS、KRW、KZT、MAD、MDL、MKD、MNT、MXN、MYR、NGN、PEN、PHP、PKR、PLN、RON、RSD、SAR、SEK、SGD、THB、TRY、TWD、UAH、UYU、UZS、VEF、VND、ZAR。

发布网站

  1. 要提升您的网站成效:

    a. 在SEO设置区块中,设置搜索引擎使用的参数以及社交网络中的页面预览参数:上传网站图标,指定商店标题和描述,添加预览图片。

    b. 配置网站本地化

    c. 更改域名(可选)。为此,前往商店 > 网站部分,在您的网站窗格中单击配置。在域名部分,编辑艾克索拉域名值,或设置您自己的域名。

  2. 完成所有必要更改且在网页商城准备好上线后,单击发布
注意
如果不能发布网站,请检查是否符合所有条件:

在游戏中添加购买链接按钮

注:

开始操作前,请确保您已完成创建商品目录设置用户身份认证发布网页商城

发布商帐户中打开项目主页,选择通过网页商城外链启用Buy Button以查看相关设置。您也可以参考网页商城文档中的相关章节了解详细信息。

在游戏中添加按钮,将用户重定向至网页商城支付所选商品。按钮必须包含以下格式的链接: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(以虚拟物品为例):

  1. 在发布商帐户中打开您的项目,然后前往商品目录 > 虚拟物品部分。
  2. 导航至包含目标商品的分组。
  3. 在商品名称下方的行中复制SKU。
注:
即使商品在网页商城前端不可见,添加到目录中的商品仍可通过游戏内直接链接购买,这样您即可设置游戏内专属优惠。

检测iOS商店

要确定是否可以显示Buy Button,请在应用首次安装后启动时或后续启动时获取storefront信息。商店信息可能已经在现有StoreKit实现中提供,或由移动端测量合作伙伴(MMP)提供。如果商店的国家/地区代码为“USA”,则启用Buy Button的功能。

请确保实现方案具有足够的灵活性,以便日后支持更多国家/地区,因为监管条件和平台政策可能会发生变化。

请注意,除非用户在系统设置中明确更新其Apple ID区域,否则设备上的商店值不会改变。

Copy
Full screen
Small screen
1let countryCode = await Storefront.current?.countryCode
2let showBuyButton = countryCode == "USA"

其他功能

通过在网站URL中使用查询参数,您可为用户提供快速访问网页商城功能的途径。详细信息请参阅查询参数使用说明

AppsFlyer高级分析

使用外链方式让用户直接在网页支付界面中购买商品时,您仍然可以通过AppsFlyer等移动端测量合作伙伴(MMP)追踪其购买记录并衡量用户生命周期价值(LTV)。艾克索拉支持两种集成方式,实现跨移动端和网页平台无缝追踪用户获取、再营销和购买活动。

选择最适合您的集成类型,帮助您全面掌握活动效果和收入情况:

集成类型运行机制
移动应用S2S集成 — 支持完整测量应用程序内和网页商城购买的LTV及广告支出回报率(ROAS)。
  1. 艾克索拉将网页商城的购买信息作为移动应用内事件发送至AppsFlyer。
  2. AppsFlyer将事件归因至移动应用安装量、用户获取和再互动活动。
Web SDK集成 — 支持衡量和评估吸引流量至网页商城的用户获取和再营销活动效果。
  1. 艾克索拉将网页商城的购买信息作为网页事件发送至AppsFlyer。
  2. AppsFlyer将事件归因至引导用户购买的相应媒体来源、活动、广告组和广告。
注:
请参考AppsFlyer集成说明获取详细信息。
本文对您的有帮助吗?
谢谢!
我们还有其他可改进之处吗? 留言
非常抱歉
请说明为何本文没有帮助到您。 留言
感谢您的反馈!
我们会查看您的留言并运用它改进用户体验。
上次更新时间: 2025年9月19日

发现了错别字或其他内容错误? 请选择文本,然后按Ctrl+Enter。

报告问题
我们非常重视内容质量。您的反馈将帮助我们做得更好。
请留下邮箱以便我们后续跟进
感谢您的反馈!
无法发送您的反馈
请稍后重试或发送邮件至doc_feedback@xsolla.com与我们联系。