gpt4 book ai didi

android - Google Play In-app billing version 3 购买的服务器端验证

转载 作者:IT老高 更新时间:2023-10-28 21:41:18 24 4
gpt4 key购买 nike

在向用户提供可下载内容之前,我无法找到关于如何在服务器上验证应用内结算购买的直接答案。

我在应用计费版本 3 中使用。我使用基于 TrivialDrive 示例代码中的 IabHelper 类的代码购买托管产品。一切都很好,购买成功完成,我得到了一个完整的购买对象和以下原始 JSON 数据:

{
"orderId":"12999763169054705758.1364365967744519",
"packageName":"my package name",
"productId":"77",
"purchaseTime":1366217534000,
"purchaseState":0,
"purchaseToken":"utfwimslnrrwvglktizikdcd.AO-J1OwZ4l5oXz_3d2SAWAAUgFE3QErKoyIX8WuSEnBW26ntsyDmlLgoUd5lshqIY2p2LnlV4tpH4NITB4mJMX98sCtZizH7wGf6Izw3tfW_GflJDKFyb-g"
}

据我了解,我需要将 purchaseToken 和我看到的称为签名的东西传递给服务器。然后服务器使用私钥来验证购买。这个对吗?如果是这样,我从哪里获得签名?真的没有关于服务器端购买验证的像样文档吗?

最佳答案

where do I get the signature from ?

看看official docs ,

它表示在您的 onActivityResult() 方法中,您可以获取以下数据,如示例所示,

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1001) {
int responseCode = data.getIntExtra("RESPONSE_CODE", 0);
String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");
String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE");//this is the signature which you want

if (resultCode == RESULT_OK) {
try {
JSONObject jo = new JSONObject(purchaseData);//this is the JSONObject which you have included in Your Question right now
String sku = jo.getString("productId");
String purchaseToken = jo.getString("purchaseToken");
//you need to send sku and purchaseToken to server for verification
}
catch (JSONException e) {
alert("Failed to parse purchase data.");
e.printStackTrace();
}
}
}
}

用于服务器端验证,看看official docs

如前所述,客户端应用程序会将 skupurchaseToken 发送到服务器 API。服务器必须接收这些值,并且必须使用 android publish api 执行检查以验证购买:

服务器可以通过添加必要的参数来调用以下GET请求:

https://www.googleapis.com/androidpublisher/v2/applications/ packageName/purchases/products/productId/tokens/token

这里,
packageName = 客户端应用的 packageName
productId = 从客户端应用收到的 sku
token = 从客户端应用收到的 purchaseToken

这将产生一个 JSONObject 响应,如提到的格式:

{
"kind": "androidpublisher#productPurchase",
"purchaseTimeMillis": long,
"purchaseState": integer,
"consumptionState": integer,
"developerPayload": string,
"orderId": string,
"purchaseType": integer
}

这里,purchaseState = 0 表示有效购买

希望对你有帮助!!

关于android - Google Play In-app billing version 3 购买的服务器端验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16067180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com