通过Mobile SDK启用购买按钮
重要性说明

根据Apple最新的区域政策更新,开发者现在可以将用户从应用引导至外部网站完成虚拟物品的支付。
您可以在游戏中添加按钮、横幅、消息等多种引导方式,让用户一键跳转至安全的浏览器支付界面(网页商城或支付UI),全程合规,无违规风险。
如果您希望从游戏跳转到预置的商品支付页面,并对结算流程进行更多控制,通过Mobile SDK集成购买按钮是理想选择:
- 灵活定制购买体验 — 从交易逻辑到视觉呈现均可自定义。
- 支持无服务器架构 — SDK可在无后端环境下运行,购买与物品发放均在客户端完成,无需Webhook。
- 提供多种支付方式,包括通过Apple Pay进行一键支付,为移动端用户提供快速熟悉的结算体验。
如您的网页商城非基于建站器搭建,且希望将支付中心直接集成至游戏,同样适用艾克索拉Mobile SDK集成方案。
如需最快速的低代码集成方式,请参考基于网页商城的集成方案。
工作原理
本指南将介绍如何按照Apple要求,使用艾克索拉Mobile SDK处理支付。
Apple要求:
不允许在应用内WebView中进行外部支付 — 支付必须通过Safari或默认浏览器进行。
外部支付链接目前仅在App Store的美国商店允许使用。请注意,Apple的应用审核准则指的是
美国商店,而不是用户位置 。
用户流程:
- 用户在iOS设备上打开游戏应用。
- 用户点击所需商品旁的购买按钮。
- 应用会在Safari(或默认浏览器)中打开包含支付令牌的支付中心链接。SDK会处理授权和商品选择。
- 用户自动完成授权。支付中心为特定商品打开。
- 用户选择支付方式并完成购买。
- 支付中心将用户跳转回游戏应用。
- 应用通过Webhook接收购买确认。
快速指南
注册发布商帐户并创建项目
发布商帐户是配置艾克索拉功能以及对分析和交易进行操作的主要工具。
要进行注册,请前往发布商帐户并创建帐户。要创建项目,请在侧边栏中单击创建项目并填写所需信息。您可以稍后修改这些设置。

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

设置艾克索拉登录管理器
- 在发布商帐户中打开您的项目,前往玩家 > 登录管理器部分。
- 单击创建登录管理器项目。
- 选择标准登录管理器项目,然后单击创建并设置。等待新登录管理器项目的创建,然后即可看到登录管理器项目页面。
- 在登录方法区块中,选择任意选项并单击配置。
- 在顶部设置区块中,单击Login API集成。
- 将使用设备ID登录开关设置为开。

- 单击保存更改。
集成过程中需用到您的登录管理器ID。要获取该ID,请在层级导航路径中单击登录管理器项目的名称返回登录管理器项目页,然后单击登录管理器项目名称旁边的复制ID。

配置应用内购买商品(虚拟物品)
可选择以下方法之一来设置IAP SKU商品目录:
安装SDK
艾克索拉Mobile SDK以名为XsollaMobileSDK.xcframework
的XCFramework
形式提供。
要在Xcode项目中手动安装:
- 在Xcode中打开项目。
- 选择应用程序目标,前往General选项卡。
- 在Frameworks, Libraries, and Embedded Content部分,拖放
XsollaMobileSDK.xcframework
文件。 - 在框架旁边的下拉列表中,确保选择Embed & Sign。

配置SDK
配置SDK需要从发布商帐户获取以下ID:
- 项目ID。可在发布商帐户中项目名称旁边找到。
- 登录管理器ID。访问方式:打开发布商帐户,前往玩家 > 登录管理器 > 仪表板 > 您的登录管理器项部分,然后单击登录管理器项目名称旁的复制ID。
您可以先使用示例ID快速开始。
settings.openExternalBrowser = YES;
(Objective-C)或settings.openExternalBrowser = true;
(Swift)。obj-c
- obj-c
- swift
1#import <XsollaMobileSDK/StoreKitWrapper.h>
2
3SKPaymentSettings* settings = [[SKPaymentSettings alloc] initWithProjectId: 77640
4 loginProjectId:@"026201e3-7e40-11ea-a85b-42010aa80004"
5 platform: SKPaymentPlatformStandalone
6 paystationUIThemeId: SKPaystationThemeDark
7 paystationUISize: SKPaystationSizeMedium];
8
9settings.useSandbox = YES;
10settings.enablePayments = YES;
11settings.openExternalBrowser = YES;
12
13SKPaymentQueue* queue = [SKPaymentQueue defaultQueue];
14[queue startWithSettings: settings];
15[queue addTransactionObserver: self];
1import XsollaMobileSDK
2
3let settings = SKPaymentSettings(projectId: 77640,
4 loginProjectId: "026201e3-7e40-11ea-a85b-42010aa80004",
5 platform: .standalone)
6
7settings.useSandbox = true;
8settings.enablePayments = true;
9settings.openExternalBrowser = true;
10
11SKPaymentQueue.default().start(settings)
12SKPaymentQueue.default().add(self)
配置深层链接以便用户购买后返回游戏应用
为目标设置URL机制:
- 在项目导航器中选择您的项目。
- 选择您的目标。
- 打开Info选项卡。
- 在URL Types部分单击➕按钮。
- 将URL Scheme设置为
$(PRODUCT_BUNDLE_IDENTIFIER)
。

初始化SDK
配置完成后,需要初始化艾克索拉Mobile SDK并连接到艾克索拉服务。请将此逻辑放在应用程序的初始化流程中,例如在AppDelegate的didFinishLaunchingWithOptions方法中。
obj-c
- obj-c
- swift
1SKPaymentQueue* queue = [SKPaymentQueue defaultQueue];
2[queue startWithSettings: settings]; // settings from the previous step
3
4// conform your class to SKPaymentTransactionObserver and implement its method
5@interface YourClass (SKPaymentTransactionObserver) <SKPaymentTransactionObserver>
6@end
7
8@implementation YourClass (SKPaymentTransactionObserver)
9
10- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
11 for(SKPaymentTransaction *transaction in transactions) {
12 switch (transaction.transactionState) {
13 case SKPaymentTransactionStateFailed:
14 // purchase failed, present an error
15 break;
16 case SKPaymentTransactionStatePurchased:
17 // award the player with the purchase of the SKU - transaction.payment.productIdentifier
18 break;
19 default: break;
20 }
21 }
22}
23
24@end
1SKPaymentQueue.default().start(settings)
2SKPaymentQueue.default().add(self)
3
4// conform your class to SKPaymentTransactionObserver and implement its method
5extension YourClass: SKPaymentTransactionObserver {
6 func paymentQueue(_: SKPaymentQueue, updatedTransactions: [SKPaymentTransaction]) {
7 for transaction in updatedTransactions {
8 switch transaction.transactionState {
9 case .failed:
10 // purchase failed, present an error
11 case .purchased:
12 // award the player with the purchase of the SKU - transaction.payment.productIdentifier
13 default:
14 break
15 }
16 }
17 }
18}
启动SKPaymentQueue
并添加交易观察器后,应用程序可以按如下方式请求SKU信息:
obj-c
- obj-c
- swift
1NSSet *skus = [NSSet setWithArray:@[@"your_sku1", @"your_sku2"]];
2SKProductsRequest* req = [[SKProductsRequest alloc] initWithProductIdentifiers:skus];
3
4req.delegate = self;
5[req start];
6
7// conform your class to SKProductsRequestDelegate and implement its method
8@interface YourClass (SKProductsRequestDelegate) <SKProductsRequestDelegate>
9@end
10
11@implementation YourClass (SKProductsRequestDelegate)
12
13- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
14 // save loaded products somewhere
15 self.products = response.products
16}
17
18@end
1let skus: Set<String> = ["your_sku1", "your_sku2"]
2let req = SKProductsRequest(productIdentifiers: skus)
3
4req.delegate = self
5req.start()
6
7// conform your class to SKProductsRequestDelegate and implement its method
8extension YourClass: SKProductsRequestDelegate {
9 func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
10 // save loaded products somewhere
11 self.products = response.products
12 }
13}
进行购买
开始购买流程
要创建支付并发起购买,请使用之前获取的SKProduct
信息:
obj-c
- obj-c
- swift
1SKProduct *product = ...; // previously fetched product
2SKPayment *payment = [SKPayment paymentWithProduct:product];
3[[SKPaymentQueue defaultQueue] addPayment:payment];
1let product = ... // previously fetched product
2let payment = SKPayment(product: product)
3SKPaymentQueue.default().add(payment)
验证购买
每笔购买在交付给最终用户之前都应进行验证,以帮助防止未经授权的购买。
验证购买真实性最有效的方式是使用服务器对服务器(S2S)调用,将客户端从决策过程中移除,从而避免制造潜在的安全漏洞。
S2S验证方法通常包含以下步骤:
- 应用客户端向后端发送购买订单ID。该ID在客户端完成支付交易时获取(通常通过交易回调)。有关如何发起购买的信息,请参见发起购买流程。
- 服务器接收订单ID,并在收到购买完成服务器通知后,使用Webhook方式(由艾克索拉服务触发)验证其真实性。这种方式无需轮询即可实现异步接收处理,并且可以在后台完成(结果会被缓存),甚至在客户端请求到达之前就完成处理。有关Webhook的详细信息,请参见设置Webhook部分。
消耗已购买的内容
购买流程链中的最后一步是向用户发放购买的内容并将这些购买标记为"已发放"。这个过程也称为"消耗购买项"。
购买结果通过Objective-C中的paymentQueue:updatedTransactions:
回调或Swift中的paymentQueue(_:updatedTransactions:)
回调传递。
obj-c
- obj-c
- swift
1- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
2 for(SKPaymentTransaction *transaction in transactions) {
3 switch (transaction.transactionState) {
4 case SKPaymentTransactionStateFailed:
5 // Always acknowledge transaction and finish it
6 [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
7 break;
8 case SKPaymentTransactionStatePurchased:
9 // here you can save the purchase and award it to the user
10 // Always acknowledge transaction and finish it after it was saved
11 [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
12 break;
13 default: break;
14 }
15 }
16}
1func paymentQueue(_: SKPaymentQueue, updatedTransactions: [SKPaymentTransaction]) {
2 for transaction in updatedTransactions {
3 switch transaction.transactionState {
4 case .failed:
5 // Always acknowledge transaction and finish it
6 SKPaymentQueue.default().finishTransaction(transaction)
7 case .purchased:
8 // here you can save the purchase and award it to the user
9 // Always acknowledge transaction and finish it after it was saved
10 SKPaymentQueue.default().finishTransaction(transaction)
11 default:
12 break
13 }
14 }
15}
设置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}'
在沙盒环境中测试
本节提供代码示例,演示如何配置沙盒环境以测试支付、启用详细日志记录等相关任务。
启用沙盒模式
obj-c
- obj-c
- swift
1SKPaymentSettings* settings = ...;
2
3settings.useSandbox = YES;
1let settings = SKPaymentSettings(...)
2
3settings.useSandbox = true
启用额外日志记录
obj-c
- obj-c
- swift
1SKPaymentSettings* settings = ...;
2
3settings.logLevel = SKLogLevelDebug;
1let settings = SKPaymentSettings(...)
2
3settings.logLevel = .debug
测试银行卡
有关在沙盒模式下模拟支付的测试银行卡列表,请参阅测试银行卡列表部分。
上线
- 要签署许可协议,请在发布商帐户中前往协议与税务信息 > 协议部分,填写协议表单。
- 在SDK配置代码中将
sandbox
设置为false
。
obj-c
- obj-c
- swift
1SKPaymentSettings* settings = ...;
2
3settings.useSandbox = NO;
4settings.logLevel = SKLogLevelError;
1let settings = SKPaymentSettings(...)
2
3settings.useSandbox = false
4settings.logLevel = .error
如何检测iOS商店区域
要确定当前iOS商店区域并根据区域调整SDK功能,请使用以下代码片段:
obj-c
- obj-c
- swift
1[SKPaymentQueue loadCurrentStorefrontCountryCodeWithCompletion:^(NSString* _Nullable countryCode) {
2 settings.enablePayments = countryCode && [countryCode isEqualToString:@"USA"];
3
4 [[SKPaymentQueue defaultQueue] startWithSettings:settings];
5}];
1SKPaymentQueue.loadCurrentStorefrontCountryCode { countryCode in
2 settings.enablePayments = countryCode == "USA"
3
4 SKPaymentQueue.default().start(settings)
5}
loadCurrentStorefrontCountryCode
方法会异步检索当前商店的三字母国家/地区代码。您可以使用此信息来启用或禁用特定区域的SDK功能。
您也可以直接使用Apple原生的Storefront,具体如下:
SKStorefront
实现方式,因为它会执行同步加载并阻塞主线程。正如Apple官方文档所述,这可能导致UI冻结并影响用户体验。- swift
1let storefront = await Storefront.current
2let countryCode = storefront?.countryCode
3
4settings.enablePayments = countryCode == "USA"
5
6SKPaymentQueue.default().start(settings)
运行机制
本指南将介绍如何按照Apple要求,使用艾克索拉API处理支付。
Apple要求:
不允许在应用内WebView中进行外部支付 — 支付必须通过Safari或默认浏览器进行。
外部支付链接目前仅在App Store的美国商店允许使用。请注意,Apple的应用审核准则指的是
美国商店,而不是用户位置 。
用户流程:
- 用户在iOS设备上打开游戏应用。
- 用户点击所需商品旁的购买按钮。
- 应用会在Safari(或默认浏览器)中打开包含支付令牌的支付中心链接。
- 支付中心为特定商品打开。
- 用户选择支付方式并完成购买。
- 支付中心将用户跳转回游戏应用。
- 应用通过Webhook接收购买确认。
快速指南
注册发布商帐户并创建项目
发布商帐户是配置艾克索拉功能以及对分析和交易进行操作的主要工具。
要进行注册,请前往发布商帐户并创建帐户。要创建项目,请在侧边栏中单击创建项目并填写所需信息。您可以稍后修改这些设置。

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

配置应用内购买商品(虚拟物品)
可选择以下方法之一来设置IAP SKU商品目录:
- 导入商品 — 上传JSON文件,快速将商品目录添加到发布商帐户。
- 使用虚拟物品和货币 > 管理文档部分的API调用创建商品目录。
配置通用链接
通用链接(Universal links)是类似https://your-site.com/your-game
的链接,如果用户设备上安装了应用程序则在应用中打开,如果未安装则在浏览器中打开。
要配置通用链接:
- 在您网站的根目录中添加域关联文件。例如:
https://your-site.com/apple-app-site-association
。 - 在Xcode项目中,前往
Signing & Capabilities > Associated Domains ,然后添加applinks:your-site.com
。
配置购买后将用户重定向回游戏应用
- 在发布商帐户中打开您的项目,前往付款 > 支付界面 > 设置 > 重定向策略部分。
- 在返回URL字段中,输入支付完成后重定向用户的URL地址或路径(深层链接)。此URL必须支持通用链接。为了提升游戏移动应用的用户体验,我们建议指定深层链接作为返回URL。
- 在自动重定向条件下拉列表中,选择所需的条件。
- 在手动重定向条件下拉列表中,选择无 — 不发生重定向。
- 单击保存。
检测iOS商店
外部支付系统目前仅在美国允许使用。要检查您的应用是否是从美国地区商店获取,请使用以下代码:
- swift
1let storefront = await Storefront.current
2let countryCode = storefront?.countryCode
3
4settings.enablePayments = countryCode == "USA"
5
6SKPaymentQueue.default().start(settings)
loadCurrentStorefrontCountryCode
方法会异步检索当前商店的三字母国家/地区代码。
进行购买
在应用程序服务器侧创建订单
应用客户端向您的服务器发送请求以获取支付令牌:
- swift
1struct TokenRequest: Codable {
2 let sku: String
3 let userId: String
4}
5
6func fetchPaymentToken(for sku: String, userId: String, completion: @escaping (Result<String, Error>) -> Void) {
7 let req = TokenRequest(sku: sku, userId: userId)
8 guard let url = URL(string: "https://your-backend.com/xsolla/create_token") else { return }
9 var request = URLRequest(url: url)
10 request.httpMethod = "POST"
11 request.setValue("application/json", forHTTPHeaderField: "Content-Type")
12 request.httpBody = try? JSONEncoder().encode(req)
13 URLSession.shared.dataTask(with: request) { data, _, error in
14 if let error = error {
15 completion(.failure(error)); return
16 }
17 let token = try! JSONDecoder().decode([String: String].self, from: data!)["token"]!
18 completion(.success(token))
19 }.resume()
20}
要使用用户和商品数据在艾克索拉侧创建订单,请使用为购买创建支付令牌API调用。该方法将返回一个支付令牌,用于打开支付UI并进行支付。要使用沙盒模式,请在获取令牌请求的正文中传入“sandbox”: true
参数。
打开支付UI
收到令牌后,通过以下链接生成用于在浏览器中打开支付UI的链接:https://secure.xsolla.com/paystation4/?token=TOKEN
,其中TOKEN
是获得的令牌。
- swift
1func openPayStation(token: String) {
2 let urlString = "https://secure.xsolla.com/paystation4/?token=\(token)"
3 guard let url = URL(string: urlString) else { return }
4 UIApplication.shared.open(url, options: [:], completionHandler: nil)
5}
要测试支付过程,您可以使用沙盒模式。它是一个独立环境,支持除真实付款和拒绝支付外实时环境的所有功能。在沙盒模式下,您可以使用银行卡和PayPal测试一次性支付和使用已保存支付方式的支付。
将用户重定向回应用
支付成功后,使用通用链接将用户重定向回您的应用。要处理重定向,请在SceneDelegate
或AppDelegate
中实现以下方法:
- swift
1func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
2 guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
3 let url = userActivity.webpageURL,
4 url.host == "your-site.com",
5 url.path.starts(with: "/payment_callback_success") else { return }
6 // Extract parameters (e.g., status, transaction_id)
7 let components = URLComponents(url: url, resolvingAgainstBaseURL: false)
8 let queryItems = components?.queryItems
9 let status = queryItems?.first { $0.name == "status" }?.value
10 handlePaymentResult(status: status)
11}
设置Webhook
- 在发布商帐户中打开您的项目,前往项目设置 > Webhooks部分。
- 在Webhook服务器字段中,指定服务器URL(即接收Webhook的地址),格式为
https://example.com
。您也可以使用Webhook测试工具中提供的URL。 - 将默认生成一个给项目Webhook签名的密钥。如要生成新密钥,请单击刷新图标。
- 单击启用Webhook。

要实现游戏内商店和支付管理的完整功能,必须实现对主要Webhook的处理:
Webhook名称 | 描述 |
---|---|
用户验证 > 用户验证(user_validation ) | 在支付过程的不同阶段发送,用于确保用户已在游戏中注册。 |
游戏服务 > 合并Webhook > 订单成功支付(order_paid ) | 包含支付数据、交易详情和所购商品的信息。使用此Webhook中的数据为用户添加商品。 |
游戏服务 > 合并Webhook > 订单取消(order_canceled ) | 包含取消的付款的数据、交易详情和所购商品信息。使用此Webhook中的数据移除购买的商品。 |
发布
- 要签署许可协议,请在发布商帐户中前往协议与税务信息 > 协议部分,填写协议表单。
- 完成税务信息调查。为此,请在发布商帐户中前往协议与税务信息 > 税务信息调查部分并填写表单。
- 切换到生产环境。为此,从创建令牌的请求中删除
“sandbox”: true
。
发现了错别字或其他内容错误? 请选择文本,然后按Ctrl+Enter。