应用内支付
这是用于耗材、非耗材等一次购买即完成的商品的一次性支付 SDK。服务介绍和控制台设置方法请参考 应用内支付介绍文档请参考。
联动流程请按以下顺序进行。
获取商品列表 —
getProductItemList发起支付请求 —
createOneTimePurchaseOrder恢复未完成订单 —
getPendingOrders,completeProductGrant查询订单状态 —
getCompletedOrRefundedOrders或 订单状态查询 API
IAP 对象
IAP是汇集应用内支付相关函数的对象。
签名
属性
getProductItemListtypeof getProductItemList
这是用于获取可通过应用内支付购买的商品列表的函数。详细内容请参考 getProductItemList。
createOneTimePurchaseOrdertypeof createOneTimePurchaseOrder
这是用于发起应用内支付请求的函数。详细内容请参考 createOneTimePurchaseOrder。
getPendingOrderstypeof getPendingOrders
获取待处理订单列表。详细内容请参考 getPendingOrders 文档。
getCompletedOrRefundedOrderstypeof getCompletedOrRefundedOrders
获取通过应用内支付购买或已退款的订单列表。详细内容请参考 getCompletedOrRefundedOrders 文档。
completeProductGranttypeof completeProductGrant
向应用传递商品发放处理已完成的消息。详细内容请参考 completeProductGrant 文档。
查询商品列表
SDK 函数: getProductItemList
getProductItemList 是包含可通过应用内支付购买的商品列表的函数。用于在界面上展示商品列表。
签名
返回值
Promise<{ products: IapProductListItem\[] } | undefined>返回包含商品列表的对象。如果应用版本低于最低支持版本(5.219.0),
undefined则返回。
属性
IapProductListItem
这是包含可通过应用内支付购买的单个商品信息的对象。用于在界面上展示商品列表。
sku · 必填 ·
string是商品的唯一 ID。 IAP.createOneTimePurchaseOrder调用时使用的
productId值相同。
示例
获取可购买的应用内支付商品列表
示例响应
体验示例应用
apps-in-toss-examples 在仓库中 with-in-app-purchase 下载代码并试用。
发起一次性支付请求
SDK 函数: createOneTimePurchaseOrder
createOneTimePurchaseOrder 该函数会打开应用内支付弹窗,用户将继续完成支付。若支付过程中发生错误,将根据错误类型跳转到错误页面。
签名
参数
options · 必填
这是应用内支付所需的选项。
params.sku · 必填 ·
string是要下单的商品 ID。
params.processProductGrant · 必填 ·
(params: { orderId: string }) => boolean | Promise<boolean>订单创建后,实际发放商品时调用。
orderId接收后将发放成功与否true或Promise<true>返回为。若发放失败,false则返回。
onEvent · 必填 ·
(event: SuccessEvent) => void | Promise<void>支付成功时调用。
event.type · 必填 ·
"success"是事件类型。
"success"则返回。event.data · 必填 ·
IapCreateOneTimePurchaseOrderResult应用内支付完成后,会返回包含支付详情和商品信息的结果。可使用返回的信息在界面上展示已购买商品的信息。
event.data.orderId · 必填 ·
string是支付订单 ID。支付完成后 查询支付状态时使用。
event.data.displayName · 必填 ·
string是要在界面上显示的商品名称。
event.data.displayAmount · 必填 ·
string是包含货币单位的价格信息。
event.data.amount · 必填 ·
number是商品价格的数值。
event.data.currency · 必填 ·
string是商品价格的货币单位。
event.data.fraction · 必填 ·
number是用于决定显示价格时保留到小数点后几位的值。
event.data.miniAppIconUrl ·
string | null是迷你应用图标图片的 URL。
onError · 必填 ·
(error: unknown) => void | Promise<void>支付过程中发生错误时调用。接收错误对象后,可以进行日志记录或执行恢复流程。
错误代码
INVALID_PRODUCT_ID : 商品 ID 无效,或该商品不存在。请确认商品 ID。
在商品 ID 无效或该商品不存在时发生。
返回值
() => void
返回 App Bridge cleanup 函数。应用内支付功能结束后,必须调用此函数释放资源。
示例
跳转到特定的应用内支付订单页
体验示例应用
apps-in-toss-examples 在仓库中 with-in-app-purchase 下载代码并试用。
查询未完成订单
SDK 函数: getPendingOrders
getPendingOrders 是 已完成支付但商品尚未发放的订单列表的获取函数。请确认查询到的订单信息后向用户发放商品。 createOneTimePurchaseOrder 即使函数调用后未收到结果,也可以查询该订单。
如果应用版本低于最低支持版本(Android 5.234.0、iOS 5.231.0), undefined则返回。
签名
返回值
Promise<{ orders: Order\[] } | undefined>返回包含待处理订单列表(orders)的对象。如果应用版本低于最低支持版本(Android 5.234.0、iOS 5.231.0),
undefined则返回。
返回对象属性
orders · 必填 ·
Order\[]是待处理订单的数组。如果没有待处理订单,则返回空数组。
orders[].orderId · 必填 ·
string是订单的唯一 ID。
orders[].sku · 必填 ·
string是订单商品的唯一 ID。
orders[].paymentCompletedDate · 必填 ·
string表示支付完成的时间。
示例
完成商品发放处理
SDK 函数: completeProductGrant
completeProductGrant 该函数 用于完成待处理订单商品发放处理的函数。请向用户发放商品并 completeProductGrant 调用函数将发放状态更改为完成。
如果应用版本低于最低支持版本(Android 5.231.0、iOS 5.231.0), undefined则返回。
签名
参数
{ params: { orderId: string } }
是包含已完成支付订单信息的对象。
params.order ·
Id string是订单的唯一 ID。用于指定要完成商品发放的订单。
返回值
Promise<boolean | undefined>返回商品发放是否完成。若应用版本低于最低支持版本(Android 5.233.0、iOS 5.233.0),
undefined则返回。
示例
查询已完成·已退款订单
SDK 函数: getCompletedOrRefundedOrders
getCompletedOrRefundedOrders 是获取通过应用内支付购买并退款的订单列表的函数。可以查询已完成支付及商品发放的订单和已退款订单。
已完成支付但商品尚未发放的订单不会被查询到。 getPendingOrders通过函数 orderId查询后,向用户发放商品并 completeProductGrant通过函数将商品发放处理标记为完成。
如果应用版本低于最低支持版本(Android 5.231.0、iOS 5.231.0), undefined则返回。
签名
返回值
Promise<{ CompletedOrRefundedOrdersResult } | undefined>返回包含分页的订单列表对象。如果应用版本低于最低支持版本(Android 5.231.0、iOS 5.231.0),
undefined则返回。
返回对象属性
hasNext · 必填 ·
boolean是否有下一页。
`true`如果是,则还有更多订单。nextKey(可选) ·
string | null · null用于查询下一页的游标键。上一条响应的
nextKey使用该值。首次调用时可省略或null传入。orders · 必填 ·
Array包含订单信息的数组。每个元素表示一笔订单。
orders[].orderId · 必填 ·
string是订单的唯一 ID。
示例
可以通过 API 在服务器端直接查询应用内支付订单状态。即使未收到批准或退款响应,也可以使用。
Content-type:
application/jsonMethod:
POSTURL:
/api-partner/v1/apps-in-toss/order/get-order-status请求头
如果不包含该头部,则会返回所有订单。
在头部中
x-toss-user-key包含该值时,只会返回对应 userKey 的订单。请求参数
响应
status (enum)
响应示例
上线前务必 沙盒应用环境请测试其中的应用内支付是否正常运行。在沙盒中不会发生真实支付(扣费),所有支付都会按测试场景处理。
1. 在沙盒中查询商品列表时的行为
在沙盒应用中
getProductItemList()调用时,在控制台中注册的应用内支付商品中 展示状态为 ON的商品才会被查询到。实际在控制台注册的商品列表会原样返回。
在控制台中 展示 OFF的商品在沙盒应用中也看不到。
2. 必须测试的场景
在沙盒中,下面 3 种测试必须分别执行。请确认应用在每个场景下是否正确响应。
① 支付成功测试
成功回调(
event.type: success)是否能正常传递。不会发生真实支付(扣费)。
在 SDK 1.1.3 及以上版本中,合作方的 连商品发放逻辑也成功后,才算最终成功处理。
[观看视频](../../../../resources/development/iap/iap_sandbox_test_1.mp4)
② 支付成功(服务器失败)测试
虽然支付成功,但合作方服务器的发放逻辑失败的情况必须测试。
应用需要支持以下处理:
发放完成后
completeProductGrant调用应用重新启动时
getPendingOrders恢复未完成订单向用户提示发放失败
这是在正式服务中也很可能发生的场景,因此必须测试。
[观看视频](../../../../resources/development/iap/iap_sandbox_test_2.mp4)
③ 错误测试
请提前模拟支付过程中发生错误的各种情况。
[观看视频](../../../../resources/development/iap/iap_sandbox_test_3.mp4)
3. 测试检查清单
商品列表展示
✔️
控制台中注册的商品是否能正常返回
支付成功测试
✔️
event.data 处理、发放逻辑、UI 处理
支付成功 + 服务器发放失败(订单恢复)
✔️
未完成订单恢复及重新发放处理
错误测试
✔️
错误 UI、错误处理、重试流程
订单状态查询 API
推荐
服务器验证及一致性确认
PURCHASED
订单完成
应用内支付和商品发放都已完成的状态
PAYMENT_COMPLETED
支付完成
在 SDK 1.1.3 及以上版本中,支付已完成但商品发放失败的状态
FAILED
订单失败
支付失败的情况
REFUNDED
订单已退款
已完成退款的情况
ORDER_IN_PROGRESS
订单进行中
订单已创建,但支付/发放处理尚未完成的情况
NOT_FOUND
无订单
找不到对应订单号的情况
MINIAPP_MISMATCH
商品不匹配
所订购的商品不是该应用的商品的情况
ERROR
内部错误
发生系统内部错误时
orderId
String
请求的订单号
sku
String
所订购的商品 ID
statusDeterminedAt
String
订单完成时间(yyyy-MM-dd'T'HH🇲🇲ss,固定为 KST) status为 REFUNDED时为退款完成时间
status
String
订单状态(enum)
reason
String
状态说明
orderId
String
Y
支付创建后获取的订单号(uuid v7)
x-toss-user-key
string
N
通过 Toss 登录 获取的 userKey 值
最后更新于
这有帮助吗?