GooglePlay 应用内购买服务器端产品购买验证失败,使用'android.test.purchased'时出现 400 错误



我创建了一个支持应用内购买的Android应用程序。为了开发应用内购买功能,我需要在GooglePlay控制台中设置应用内购买。

为了在GooglePlay控制台中创建应用内购买,我需要首先上传应用程序。然而,我的应用程序需要在应用程序内购买才能完成开发。

因此,我上传了我的不完整的应用程序在谷歌播放关闭阿尔法轨道。从一些研究中,我了解到我还需要发布应用程序,否则应用程序内购买将不起作用。

然而,情况是谷歌需要很长时间来审查该应用程序,并且该应用程序的状态被困在"被审查";持续3天以上。我不知道审查是否会通过,因为该应用程序不完整,也不起作用。

好吧,经过一些研究,我了解到我可以使用测试应用内购买项目,例如android.test.purchaseandroid.test.canceled

因此,我开始测试我的应用内购买功能,我的移动应用程序调用我的后端来验证购买结果,然后我开始在服务器端收到来自谷歌的400错误。

下面是我的服务器端代码,用于验证从移动应用程序收到的购买:

let performGooglePlayValidationLogic = async function(userid, sku, purchaseToken) {
let auth = new google.auth.GoogleAuth({
credentials: {
client_email: '4655XXXXXXXX-compute@developer.gserviceaccount.com',
private_key: '-----BEGIN PRIVATE KEY-----XXXXXXXXXXXXX-----END PRIVATE KEY-----n'
},
scopes: ['https://www.googleapis.com/auth/androidpublisher'],
});
const authClient = await auth.getClient();
google.options({ auth: authClient });
let purchaseResponse = {};
let purchases = google.androidpublisher({version: 'v3',}).purchases;
try {
//products
purchaseResponse = await purchases.products.get({
packageName: 'com.mycompany.myapp',
productId: sku,
token: purchaseToken,
});
if (purchaseResponse.data.purchaseState !== 0) {
throw new BadRequestException('Purchase is either Pending or Cancelled!');
} else if (purchaseResponse.data.consumptionState !== 0) {
throw new BadRequestException('Purchase is already consumed!');
} else {

下面是我传递给这个方法的参数(值是从移动应用程序接收的(

sku: android.test.purchased
purchaseToken: inapp:com.mycompany.myapp:android.test.purchased

然后我在purchaseResponse = await purchases.products.get({:行收到异常

status:400
statusText:'Bad Request'
url: https://androidpublisher.googleapis.com/androidpublisher/v3/applications/com.mycompany.myapp/purchases/products/android.test.purchased/tokens/inapp%3Acom.mycompany.myapp%3Aandroid.test.purchased'

我不确定这个400错误是由我的应用程序引起的。我仍在审查中,所以包名com.mycompany.myapp可能还可用,还是因为我做错了什么?

从我的研究来看,400错误很可能是由无效的购买令牌引起的,在我的情况下,它是inapp:com.mycompany.myapp:android.test.purchased。我确实觉得它看起来很可疑,但它是从我的移动应用程序中收到的,由GooglePlay发布。

经过2天的调查,我们发现:

由应用程序采购项目android.test.purchased生成的采购令牌(inapp:com.mycompany.myapp:android.test.purchased(不能用于服务器端验证,因为androidpublisher.googleapis.com将返回此类采购令牌的错误400。

我希望我两天的工作能帮助其他人节省时间。

最新更新