Android上的应用内结算(购买确认,json字符串)

时间:2011-11-12 21:22:22

标签: android json in-app-purchase in-app-billing

我在编码付款方面遇到了问题。

这是一款网络游戏,我希望付款方式能够实现。

你到了一个网站并点击一个按钮(购买)。您将被重定向到一个网站,该网站会将购买信息发送到服务器,并将购买的商品添加到您的帐户。在此之前,我们有一个WebViewClient来检查所有网址。如果他找到了用于购买的网址,他将发送购买请求。现在,如果我们从Android市场获得一条消息,说明它成功了,他将继续进行重定向。

我对此很陌生,无法掌握这些付款的概念。我使用dungeon示例编写了我的代码。我试着根据自己的需要调整它。如果有人能指出我正确的方向,我将不胜感激。我正在试图弄清楚如何获得成功购买的回应。假设我的其余代码都没问题,它应该正常工作(我希望)。

我的项目文件中有BillingReciver.java,BillingSerivce.java,PurchaseObserver.java,ResponseHandler.java,Consts.java和Security.java。如果需要,我可以提供这些代码,但有很多,所以我希望已经看过这个例子的人能够提供帮助。


经过一些研究和咨询,我找到了我需要的东西:

     /**
     * 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);
       }

我需要从我的应用程序从Android市场获得的JSON字符串中获取数据。任何人都知道如何做到这一点?

2 个答案:

答案 0 :(得分:2)

2011年11月17日21:56 @Grzegorz'Gatz'Siennicki写道:

  

我需要从我的应用程序将获得的JSON字符串中获取数据   来自android市场。任何人都知道如何做到这一点?

查看示例中verifyPurchase()模块中的Security.java方法:

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);

请注意,由于JSON是由Android Market生成的,因此在JSONObject.getXXX()方法中指定字段名称的那些const字符串是“硬编码的”(即您无法将它们命名为任何您想要的名称)

答案 1 :(得分:0)

来自In App Billing的Android文档:

  

...当请求的交易改变状态时(例如,购买成功向信用卡收费或用户取消购买),Android Market应用程序发送IN_APP_NOTIFY广播意图。此消息包含通知ID,您可以使用该ID来检索REQUEST_PURCHASE请求的事务详细信息。

来自here