アプリで初めてアプリ内課金を利用したいです。管理されていないアイテム (仮想通貨) を使用しており、サーバー側で公開鍵を使用してトランザクションを検証したいと考えています。
これを行うには、AndroidBillingLibraryを使用しました。そして、「validate(String signedData, String signature)」で呼び出される「signatureValidator」を設定しました。これは機能します。signedData と署名を受け取り、「正しい購入ではありません」と言うために「false」を返します。これで WS (非同期) を起動し、問題がなければ "BillingService.confirmNotifications()" を呼び出します。それ以外の場合は何もしません。
しかし、私の問題: サーバーがトランザクションを検証しない場合、「confirmNotification」を呼び出しませんが、トランザクションはまだ検証されており、顧客は支払う必要があります。サーバーの応答を待ってトランザクションをキャンセルする (または確認しない) にはどうすればよいですか?
ありがとう !
編集、いくつかのコードを追加します:
private void requestPurchase(String purchaseId) {
mPurchaseId = purchaseId;
// request my purchase
BillingController.requestPurchase(this, mPurchaseId, false, null);
}
// Receipt the answer of my purchase
@Override
public boolean validate(String signedData, String signature) {
// when a purchased need to be checked
mProgressDialog = ProgressDialog.show(this, null, getString(R.string.loading), true, false);
RequestHelper.getInstance().executeRequest(getRequestCheckReceipt(signedData, signature);
return false;
}
// Receipt the answer of my WS
@Override
public void onRequestReceived(Request request) {
if (mProgressDialog != null) {
mProgressDialog.dismiss();
mProgressDialog = null;
}
if(request.isOk()) {
BillingService.confirmNotifications(this, new String[] { mPurchaseId };);
}
}