我已经完成了所有的设置来验证我的收据服务器端(在python中使用requests包)。
这是我的代码:
url = "https://buy.itunes.apple.com/verifyReceipt"
request_body = {"receipt-data": token}
headers = {'Content-Type': 'application/json'}
response = requests.post(url=url, headers=headers, data=request_body)这里唯一的变量是从客户机(flutter)发送的token,即:purchaseDetails.verificationData.serverVerificationData。
我无法验证收据,因为如果我将token作为string传递,我总是收到一个21002错误(格式错误)。
如果我在python中尝试这样的东西:
token = base64.b64encode(token)它抛出了这个错误:a bytes-like object is required, not 'str',我不理解它,因为我实际上是在传递一个bytes对象。
传递给POST请求以验证iOS收据的正确格式是什么?颤音是正确的还是我们应该编码什么?
任何具体的例子都会被接受,因为我找不到。
PS :如果生产失败,我将重定向到沙箱url "https://sandbox.itunes.apple.com/verifyReceipt"。沙箱response与生产沙箱(statusCode: 21002)相同。
发布于 2022-05-19 21:03:22
看起来您的收据不正确(沙箱有时有问题),或者您的服务器端设置错误。
对于第一点,可以通过生成storeKit配置文件来尝试创建收据。这是不可能在颤振中完成的,您必须使用代码打开iOS模块,并通过这里设置存储工具包配置文件。
在设置了存储包文件之后,您可以直接从xCode运行应用程序,也可以直接关闭xCode,然后从您喜欢的颤振IDE中运行。
现在,当您尝试从应用程序中获取/购买产品时,iOS将永远不会命中生产采购标识符,而是从您的storekit配置中获取产品并从这些配置中生成收据。此收据由apple验证端点接受,您还可以使用存储配置测试来自xCode的退款和订阅取消。
对于第二点,您必须在iTunes连接中启用应用程序特定的共享秘密,然后在收据验证API中的“密码”键中使用该密钥。这里是你找到它的地方AppStoreConnect >你的应用程序>订阅
如果它仍然不能解决这个问题,我很乐意提供进一步的帮助。

编辑:我只是测试购买一个自动更新订阅购买沙箱(不是商店t),然后验证它使用沙箱URL,它返回正确的收据数据。在上面的文章中,您不需要对purchaseDetails.verificationData.serverVerificationData进行base64编码,因为它已经被编码了。你在邮递员身上测试过这个吗?它在那里起作用
编辑:所以请求格式错误,因为您没有以字符串的形式发送数据,因此需要转储dict:
request_body = json.dumps({"receipt-data": token})https://stackoverflow.com/questions/72249340
复制相似问题