Я интегрировал In-App Billing API в свое приложение (Android), чтобы позволить пользователю покупать монеты, чтобы иметь возможность чем-то еще из приложения ...
в onPurchasesUpdated, если ответ «ОК», я делаю запрос залпа, чтобы увеличить пользовательский баланс ...
проблема ... если запрос не выполнен из-за какой-либо ошибки (ошибка сервера - ошибка тайм-аута),
Кто-нибудь есть идеи, как вернуть деньги пользователя программно?
это мой код ..
@Override
public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) {
Log.e("responseCode", responseCode + " ===== " + BillingClient.BillingResponse.OK);
if (responseCode == BillingClient.BillingResponse.OK) {
if (purchases != null) {
Log.e("purchases size", purchases.size() + "");
for (int i = 0; i < purchases.size(); i++) {
for (int j = 0; j < SKUS.get(BillingClient.SkuType.INAPP).size(); j++) {
if (purchases.get(i).getSku().equals(SKUS.get(BillingClient.SkuType.INAPP).get(j).getId())) {
deposit(activity.getApplicationContext(), SKUS.get(BillingClient.SkuType.INAPP).get(j).getPrice(), purchases.get(i).getPurchaseToken());
}
}
}
}
Log.e("OPU response", "true");
} else {
Log.e("OPU error", "false");
}
}
это мой запрос ...
protected void deposit(final Context context, double price, final String token) {
JSONObject amount = new JSONObject();
try {
amount.put("amount", price);
amount.put("payment_type", "playStore");
} catch (JSONException e) {
e.printStackTrace();
}
Log.e("amount", amount.toString());
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST,
URLs.DEPOSIT,
amount,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.e("deposit res", response.toString());
billingClient.consumeAsync(token, new ConsumeResponseListener() {
@Override
public void onConsumeResponse(int responseCode, String purchaseToken) {
if (responseCode == BillingClient.BillingResponse.OK) {
Log.e("Done", "done");
}
}
});
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("deposit", error.toString());
billingClient.consumeAsync(token, new ConsumeResponseListener() {
@Override
public void onConsumeResponse(int responseCode, String purchaseToken) {
if (responseCode == BillingClient.BillingResponse.OK) {
Log.e("Done", "done");
}
}
});
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<>();
String token = "Bearer " + MySingleton.getmInstance(context).getUserToken();
headers.put("Content-Type", "application/json; charset=utf-8");
headers.put("Authorization", token);
return headers;
}
};
jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(
0,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
jsonObjectRequest.setShouldCache(false);
MySingleton.getmInstance(context).addToRQ(jsonObjectRequest);
}
заранее спасибо