2012-08-17 16 views
4

我最近在研究應用內結算v2的代碼。並且發現了一些問題。 我早先實施了應用內結算,但希望升級到訂閱。在我的研究中,我發現 Purchase token與成功購買訂閱的JSON(簽名數據)一起收到。訂閱樣本缺少purchaseToken的JSON解析

該演示的Security.java成功驗證簽名解析Json但是元素Purchase-token的解析在這裏丟失。

  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; 
//   purchaseToken part that I have added 
      String purchaseToken = jElement.optString("purchaseToken", ""); 

我還沒有運行的代碼,因爲預訂沒有測試產品的IDS,需要實際purchase.What我想知道的是這個令牌在這裏解析或者是提供的示例代碼有這部分正確實施。

回答

5

文森特,這是正確的。如果需要驗證purhcaseToken,則必須修改Security.java以及BillingService.java和ResponseHandler.java。

這就是:

Security.java:

在VerifyPurchase
public PurchaseState purchaseState; 
public String   notificationId; 
public String   productId; 
public String   orderId; 
public long    purchaseTime; 
public String   developerPayload; 
public String   purchaseToken; 
public String   packageName; 

public VerifiedPurchase(PurchaseState purchaseState, String notificationId, String productId, String orderId, long purchaseTime, 
     String developerPayload, String purchaseToken, String packageName) { 
    this.purchaseState = purchaseState; 
    this.notificationId = notificationId; 
    this.productId = productId; 
    this.orderId = orderId; 
    this.purchaseTime = purchaseTime; 
    this.developerPayload = developerPayload; 
    this.purchaseToken = purchaseToken; 
    this.packageName = packageName; 
    } 
} 

現在:

String developerPayload = jElement.optString("developerPayload", null); 
// VK: Changes to parse the purchaseToken 
String purchaseToken = jElement.optString("purchaseToken", null); 

BillingService.java:

在purchaseStateChanged,修改:

ResponseHandler.purchaseResponse(this, vp.purchaseState, vp.productId, vp.orderId, vp.purchaseTime, vp.developerPayload, vp.purchaseToken, vp.packageName); 

ResponseHandler.java:

最後,改變purchaseResponse來定義:

public static void purchaseResponse(final Context context, final PurchaseState purchaseState, final String productId, final String orderId, final long purchaseTime, final String developerPayload, final String purchaseToken,final String packageName) 

在這裏,你可以讓你的應用程序相關的邏輯變化,你在這裏將有purchaseToken。

如果一切正常,請接受!

+0

謝謝但是我的security.java在服務器端...你可以編輯你的答案... – 2012-09-13 09:27:17

+0

謝謝你,這工作完美! – tito 2012-10-05 14:18:29