Flutter iOS内购:获取正确Transaction Id进行服务器验证失败排查
Flutter iOS内购验证故障排查
问题概述
我正在Flutter中开发iOS内购功能,需要将唯一交易ID发送到服务器完成验证。目前使用npm的app-store-server-api包实现服务器端逻辑,也参考过相关代码示例,但始终无法完成交易验证,服务器返回错误码4000006。
核心疑问
- 正确的交易ID(transaction id)是什么?应该从哪里获取?
- 错误码4000006的具体含义是什么?如何解决?
- 使用App Connect测试账号时出现认证错误,是否遗漏了必要设置?
已尝试的操作
获取交易ID的Flutter代码
purchaseID = purchaseDetails.purchaseID; if (purchaseDetails is AppStorePurchaseDetails) { final originalTransaction = purchaseDetails.skPaymentTransaction.originalTransaction; if (originalTransaction != null) { purchaseID = originalTransaction.transactionIdentifier; } }
服务器端API初始化代码
import { AppStoreServerAPI, Environment } from "app-store-server-api" import { IOS_PACKAGE_NAME } from "../controller/shared"; export const iosApi = new AppStoreServerAPI( KEY, KEY_ID, ISSUER_ID, APP_BUNDLE_ID, Environment.Sandbox )
测试中的异常现象
- 模拟器登录App Connect测试账号完成支付后,控制台输出错误:
return (<SKPaymentQueue: 0x6000004e9650>: Payment completed with error: Error Domain=ASDErrorDomain Code=500 "Unhandled exception" UserInfo={NSUnderlyingError=0x60000091ab20 {Error Domain=AMSErrorDomain Code=100 "Authentication Failed" UserInfo={NSMultipleUnderlyingErrorsKey=( "Error Domain=AMSErrorDomain Code=2 "发生未知错误,请重试。" UserInfo={NSLocalizedDescription=发生未知错误,请重试。"}, "Error Domain=com.apple.accounts Code=4 "没有验证com.apple.account.iTunesStore.sandbox类型账户凭证的认证插件" UserInfo={NSLocalizedDescription=没有验证com.apple.account.iTunesStore.sandbox类型账户凭证的认证插件"} ), NSLocalizedDescription=Authentication Failed, NSLocalizedFailureReason=The authentication failed.}}, storefront-country-code=USA, client-environment-type=Sandbox, AMSServerErrorCode=0, NSLocalizedFailureReason=An unknown error occurred, NSLocalizedDescription=Unhandled exception} )
- 设备和Xcode的StoreKit Override中可完成支付流程,但返回的transactionIds为
1或0;真机上获取到类似2000000369143999的交易ID,但服务器始终判定无效。
文档参考提示
查阅App Store Server通知文档时看到以下说明:
如果调用成功,说明原始交易ID属于沙箱环境;如果调用返回相同错误码,则该原始交易ID在任一环境中都不存在。
但我遇到的正是错误码4000006,没有更多上下文信息,无法定位问题根源。
内容的提问来源于stack exchange,提问作者user11756851
相关产品推荐
相关产品推荐

