In-app-facturering op Android (aankoopbevestiging, json-tekenreeks)

Ik heb problemen met het coderen van betalingen.

Dit is een webgame en ik wil graag dat de betalingen werken.

U komt op een site en klikt op een knop (kopen). U wordt omgeleid naar een site die de informatie van een aankoop naar de server stuurt en het gekochte item aan uw account toevoegt. Daarvoor hebben we een WebViewClient die alle urls controleert. Als hij een URL vindt die bedoeld is voor aankopen, stuurt hij het aankoopverzoek. Als we nu een bericht ontvangen van de Android Market dat het succesvol was, zal hij doorgaan met de omleiding.

Ik ben hier vrij nieuw voor en begrijp het concept van deze betalingen gewoon niet. Ik heb mijn code geschreven met behulp van het kerker-voorbeeld. Ik heb geprobeerd het aan mijn behoeften aan te passen. Ik zou dankbaar zijn als iemand me in de juiste richting zou kunnen wijzen. Atm Ik probeer erachter te komen hoe ik het antwoord van een succesvolle aankoop kan krijgen. Ervan uitgaande dat de rest van mijn code in orde is, zou het moeten werken (hoop ik).

Ik heb in mijn projectbestanden BillingReciver.java, BillingSerivce.java, PurchaseObserver.java, ResponseHandler.java, Consts.java en Security.java die in het voorbeeld stonden. Als het nodig is, kan ik de code ervan provice, maar er is veel van, dus ik hoop dat iemand die het voorbeeld al heeft gezien, kan helpen.


Na enig onderzoek en overleg met sommige mensen, vond ik wat ik nodig heb:

     /**
     * This is called when Android Market sends information about a purchase state
     * change. The signedData parameter is a plaintext JSON string that is
     * signed by the server with the developer's private key. The signature
     * for the signed data is passed in the signature parameter.
     * @param context the context
     * @param signedData the (unencrypted) JSON string
     * @param signature the signature for the signedData
     */
    private void purchaseStateChanged(Context context, String signedData, String signature) {
        Intent intent = new Intent(Consts.ACTION_PURCHASE_STATE_CHANGED);
        intent.setClass(context, BillingService.class);
        intent.putExtra(Consts.INAPP_SIGNED_DATA, signedData);
        intent.putExtra(Consts.INAPP_SIGNATURE, signature);
        context.startService(intent);
       }

Ik moet de gegevens uit de JSON-reeks halen die mijn app van de Android Market zal krijgen. Heeft iemand een idee hoe dat te doen?

2
Dus ... wat is je vraag?
toegevoegd de auteur Kurtis Nusbaum, de bron
Heb je de publieke sleutel van je ontwikkelaarsaccount gedefinieerd? (ergens in de Security.java-klasse, als u de officiële voorbeelden van Android-ontwikkelaars gebruikt) Zonder deze optie kunt u geen enkele aankoop bevestigen.
toegevoegd de auteur yugidroid, de bron
Hoe krijg ik een antwoord van de Android Market dat het aankoopverzoek succesvol was?
toegevoegd de auteur Grzegorz 'Gatz' Siennicki, de bron

2 antwoord

Op 17 november '11 om 21:56 @Grzegorz schreef 'Gatz' Siennicki:

Ik moet de gegevens ophalen uit de JSON-reeks die mijn app zal krijgen   van Android Market. Heeft iemand een idee hoe dat moet?

Bekijk de methode verifyPurchase() in de module Security.java in de steekproef:

JSONObject jElement = jTransactionsArray.getJSONObject(i);
int response = jElement.getInt("purchaseState");
PurchaseState purchaseState = PurchaseState.valueOf(response);
String productId = jElement.getString("productId");
String packageName = jElement.getString("packageName");
long purchaseTime = jElement.getLong("purchaseTime");
String orderId = jElement.optString("orderId", "");
String notifyId = null;
if (jElement.has("notificationId")) {
  notifyId = jElement.getString("notificationId");
}
String developerPayload = jElement.optString("developerPayload", null);

Merk op dat, aangezien de JSON wordt gegenereerd door de Android Market, die const-strings die de veldnamen in de JSONObject.getXXX() -methoden specificeren, "hard gecodeerd" zijn (dwz u kunt ze niet echt een naam geven) alles wat je wilt).

2
toegevoegd

Van de Android-documentatie over In App Billing:

... wanneer de aangevraagde transactie van status verandert (de aankoop is bijvoorbeeld met succes in rekening gebracht op een creditcard of de gebruiker annuleert de aankoop), verzendt de Android Market-applicatie een IN_APP_NOTIFY uitzendingsintentie. Dit bericht bevat een meldings-id die u kunt gebruiken om de transactiegegevens voor de REQUEST_PURCHASE-aanvraag op te halen.

Heeft u dit van hier .

0
toegevoegd
Ik weet niet zeker wat ik je moet vertellen. Dat is alle informatie die ik weet.
toegevoegd de auteur Kurtis Nusbaum, de bron
ok, ik lees dat allemaal, maar ik begrijp nog steeds niet hoe ik de echte informatie eruit kan halen. In het ResponsHandler-bestand is er een methode "purchaseResponse" die door de factureringsservice moet worden aangeroepen en de informatie krijgt die ik nodig heb. Wat moet ik doen om het van de methode te krijgen?
toegevoegd de auteur Grzegorz 'Gatz' Siennicki, de bron
Mijn vraag bijgewerkt.
toegevoegd de auteur Grzegorz 'Gatz' Siennicki, de bron