我有一个我正在测试的应用程序可以免费使用,但有应用程序内购买。我让它在 google play store 上运行 alpha,我过去使用了 android.test SKU,然后安装了我自己的那个工作。现在,当有人进行购买时,我希望应用程序向我的服务器传达我的服务器所必需的信息,以便我的服务器询问谷歌应用程序购买是否合法,然后在服务控制完成后转身并适当记入他们的帐户由服务器。到目前为止,我有这个:
在我的节点服务器的 index.js 文件中,我有一个像这样的段:
var Verifier = require('google-play-purchase-validator');
function validUserPurchases (receipt) {
var options = {
email: "#################@developer.gserviceaccount.com",
key: "-----BEGIN PRIVATE madness -----END PRIVATE KEY-----\n",
keyFile: "./Google Play Android Developer-##########.json"
};
var verifier = new Verifier(options);
verifier.verify(receipt, function cb(err, response) {
if (err) {
console.log("there was an error validating the receipt");
console.log(err);
} else {
console.log("sucessfully validated the receipt");
//do crap on my server to grant that account new privileges
console.log(response);
}
});
}
收据是一个字符串,是应用程序中我的 mainactivity.java 中以下代码行中的 purchase.getOriginalJson() 对象:
@Override
public void StartPayment(String payment) {
pricing = payment; // this is a SKU set by the user in a fragment
my_socket.getDeveloperPayload(); //this gets a public key for the app from my server
}
@Override
public void yourDeveloperPayLoad(String s) {
your_pay_load = s; //something I am doing to uniquely stamp each transaction on my end
if (your_pay_load.isEmpty()) {
toastShort("Your account was not billed, something went wrong, try again.");
} else {
mHelper.launchPurchaseFlow(this, pricing, 100001,
mPurchaseFinishedListener, your_pay_load);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data)
{
if (!mHelper.handleActivityResult(requestCode,
resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data);
}
}
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener =
new IabHelper.OnIabPurchaseFinishedListener() {
@Override
public void onIabPurchaseFinished(IabResult result, Purchase info) {
if (result.isFailure()) {
//handle errors
return;
} else if (info.getSku().equals(pricing)) {
consumeItem();
}
}
};
private void consumeItem() {
mHelper.queryInventoryAsync(mReceivedInventoryListener);
}
IabHelper.QueryInventoryFinishedListener mReceivedInventoryListener
= new IabHelper.QueryInventoryFinishedListener() {
@Override
public void onQueryInventoryFinished(IabResult result, Inventory inv) {
if (result.isFailure()) {
//handle failure
} else {
mHelper.consumeAsync(inv.getPurchase(pricing),
mConsumeFinishedListener);
}
}
};
IabHelper.OnConsumeFinishedListener mConsumeFinishedListener
= new IabHelper.OnConsumeFinishedListener() {
@Override
public void onConsumeFinished(Purchase purchase, IabResult result) {
if (result.isSuccess()) {
System.out.println("Checkout was successful");
//System.out.println("Purchase has: " + purchase);
//System.out.println("Purchase SKU: " + purchase.getSku());
System.out.println("Purchase getDeveloperPayload: " + purchase.getDeveloperPayload());
System.out.println("Purchase getItemType: " + purchase.getItemType());
System.out.println("Purchase getOriginalJson(): " + purchase.getOriginalJson());
System.out.println("Purchase getOrderId(): " + purchase.getOrderId());
System.out.println("Purchase getPackageName(): " + purchase.getPackageName());
System.out.println("Purchase getSignature(): " + purchase.getSignature());
System.out.println("Purchase getToken(): " + purchase.getToken());
System.out.println("Purchase getPurchaseState(): " + purchase.getPurchaseState());
System.out.println("Purchase getPurchaseTime(): " + purchase.getPurchaseTime());
System.out.println("Purchase hashCode(): " + purchase.hashCode());
my_socket.sendPaymentVerification(purchase.getOriginalJson());
} else {
System.out.println("Checkout was not successful");
}
}
};
我认为这purchase.getOriginalJson()
将构成服务器需要发送给谷歌的所有内容,verifier.verify(receipt, function cb(err, response)
但是当我尝试使用测试购买时,我得到:
验证收据时出错
[错误:没有找到给定包名的应用程序。]
不知道我做错了什么,不purchase.getOriginalJson()
构成我需要放入收据中以供谷歌验证这是发生的真实购买吗?我无法在 Alpha 或 Beta 测试通道中测试此功能吗?你的时间。