All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.codename1.payment.Receipt Maven / Gradle / Ivy

There is a newer version: 7.0.161
Show newest version
/*
 * Copyright (c) 2012, Codename One and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Codename One designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *  
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 * 
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 * 
 * Please contact Codename One through http://www.codenameone.com/ if you 
 * need additional information or have any questions.
 */
package com.codename1.payment;

import com.codename1.io.Externalizable;
import com.codename1.io.Util;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * Encapsulates a receipt for an in-app purchase.
 * @author shannah
 */
public class Receipt implements Externalizable {
    
    public static final String STORE_CODE_ITUNES="itunes";
    public static final String STORE_CODE_PLAY="play";
    public static final String STORE_CODE_WINDOWS="windows";
    public static final String STORE_CODE_SIMULATOR="simulator";

    /**
     * @param aExternalizableRegistered the externalizableRegistered to set
     */
    private static void setExternalizableRegistered(boolean aExternalizableRegistered) {
        externalizableRegistered = aExternalizableRegistered;
    }
    
    /**
     * The product SKU
     */
    private String sku;
    
    /**
     * The expiry date of the receipt, in case this is a subscription receipt.
     */
    private Date expiryDate;
    
    /**
     * Cancellation date of the receipt, if it has been cancelled.  A cancelled
     * receipt should be treated as if the purchase had never been made in the 
     * first place.
     */
    private Date cancellationDate;
    
    /**
     * Date of purchase.
     */
    private Date purchaseDate;
    
    /**
     * Quantity.  Currently this will always be 1, but potentially could be used
     * internally to denote other quantities.
     */
    private int quantity;
    
    /**
     * The store-specific transaction ID.  This will match exactly the transaction
     * id of the store the issued the receipt.  Use the {@code storeCode} to differentiate
     * between transactions of different stores, which may potentially have the 
     * same transaction Ids.
     */
    private String transactionId;
    
    /**
     * The order data that may be used to verify the receipt with the appropriate
     * REST service.  This data will be in different formats for different stores.
     * 
     * 

iTunes has a base64 encoded string, Play has a JSON structure, Windows * has an XML string, etc...

* *

This will be filled in at the time that the receipt is generated by the * platform's implementation, so developers should never have to explicitly * set this.

*/ private String orderData; /** * The store code from which this receipt originated. Will usually be one of * {@link #STORE_CODE_ITUNES}, {@link #STORE_CODE_PLAY}, {@link #STORE_CODE_WINDOWS}, * or {@link #STORE_CODE_SIMULATOR}, but developers could also use custom codes * if they use a different store, or no store at all. This code can be used * for validating the receipt. */ private String storeCode; /** * An internal ID that may be optionally used to link the receipt to an internal * order ID. */ private String internalId; private static boolean externalizableRegistered; public Receipt() { } /** * Convenience constructor */ public Receipt(String sku, Date expiryDate, Date cancellationDate, Date purchaseDate, int quantity, String transactionId, String orderData, String storeCode, String internalId) { this.sku = sku; this.expiryDate = expiryDate; this.cancellationDate = cancellationDate; this.purchaseDate = purchaseDate; this.quantity = quantity; this.transactionId = transactionId; this.orderData = orderData; this.storeCode = storeCode; this.internalId = internalId; } /** * @return the sku */ public String getSku() { return sku; } /** * @param sku the sku to set * @see #getSku() */ public void setSku(String sku) { this.sku = sku; } /** * The expiry date of the receipt, in case this is a subscription receipt. * *

NOTE: The expiry date will NOT be set automatically when the * receipt is generated by the platform. It should be set by the {@link ReceiptStore} in the * {@link ReceiptStore#submitReceipt(com.codename1.payment.Receipt, com.codename1.util.SuccessCallback) } step, * and usually on the server-side (in cases where a server is being used to track subscriptions), then the expiry * date will be made available when the receipt is loaded using {@link ReceiptStore#fetchReceipts(com.codename1.util.SuccessCallback) }.

* @return the expiryDate Will be null for non-subscriptions. * */ public Date getExpiryDate() { return expiryDate; } /** * @param expiryDate the expiryDate to set * @see #getExpiryDate() */ public void setExpiryDate(Date expiryDate) { this.expiryDate = expiryDate; } /** * {@inheritDoc} */ public int getVersion() { return 1; } /** * {@inheritDoc} */ public void externalize(DataOutputStream out) throws IOException { Map m = new HashMap(); m.put("sku", getSku()); m.put("expiryDate", getExpiryDate()); m.put("cancellationDate", getCancellationDate()); m.put("purchaseDate", getPurchaseDate()); m.put("orderData", getOrderData()); m.put("transactionId", getTransactionId()); m.put("quantity", getQuantity()); m.put("storeCode", getStoreCode()); m.put("internalId", getInternalId()); Util.writeObject(m, out); } /** * {@inheritDoc} */ public void internalize(int version, DataInputStream in) throws IOException { Map m = (Map)Util.readObject(in); setSku((String)m.get("sku")); setExpiryDate((Date)m.get("expiryDate")); cancellationDate = (Date)m.get("cancellationDate"); purchaseDate = (Date)m.get("purchaseDate"); quantity = (Integer)m.get("quantity"); transactionId = (String)m.get("transactionId"); orderData = (String)m.get("orderData"); storeCode = (String)m.get("storeCode"); internalId = (String)m.get("internalId"); } /** * {@inheritDoc} * @return */ public String getObjectId() { return "com.codename1.payment.Receipt"; } /** * Checks whether we have registered the externalizable yet. * @see #registerExternalizable() * @return */ static boolean isExternalizableRegistered() { return externalizableRegistered; } /** * Registers this class as externalizable so that it can be serialized. */ static void registerExternalizable() { if (!isExternalizableRegistered()) { Util.register("com.codename1.payment.Receipt", Receipt.class); setExternalizableRegistered(true); } } /** * Cancellation date of the receipt, if it has been cancelled. A cancelled * receipt should be treated as if the purchase had never been made in the * first place. * @return the cancellationDate */ public Date getCancellationDate() { return cancellationDate; } /** * * @param cancellationDate the cancellationDate to set * @see #getCancellationDate() */ public void setCancellationDate(Date cancellationDate) { this.cancellationDate = cancellationDate; } /** * Date of purchase. * @return the purchaseDate */ public Date getPurchaseDate() { return purchaseDate; } /** * @param originalPurchaseDate the purchaseDate to set * @see #getPurchaseDate() */ public void setPurchaseDate(Date originalPurchaseDate) { this.purchaseDate = originalPurchaseDate; } /** * Quantity. Currently this will always be 1, but potentially could be used * internally to denote other quantities. * @return the quantity */ public int getQuantity() { return quantity; } /** * @param quantity the quantity to set * @see #getQuantity() */ public void setQuantity(int quantity) { this.quantity = quantity; } /** * The store-specific transaction ID. This will match exactly the transaction * id of the store the issued the receipt. Use the {@code storeCode} to differentiate * between transactions of different stores, which may potentially have the * same transaction Ids. * @return the transactionId */ public String getTransactionId() { return transactionId; } /** * @param transactionId the transactionId to set * @see #getTransactionId() */ public void setTransactionId(String transactionId) { this.transactionId = transactionId; } /** * The order data that may be used to verify the receipt with the appropriate * REST service. This data will be in different formats for different stores. * *

iTunes has a base64 encoded string, Play has a JSON structure, Windows * has an XML string, etc...

* *

This will be filled in at the time that the receipt is generated by the * platform's implementation, so developers should never have to explicitly * set this.

* @return the orderData */ public String getOrderData() { return orderData; } /** * @param orderData the orderData to set * @see #getOrderData() */ public void setOrderData(String orderData) { this.orderData = orderData; } /** * The store code from which this receipt originated. Will usually be one of * {@link #STORE_CODE_ITUNES}, {@link #STORE_CODE_PLAY}, {@link #STORE_CODE_WINDOWS}, * or {@link #STORE_CODE_SIMULATOR}, but developers could also use custom codes * if they use a different store, or no store at all. This code can be used * for validating the receipt. * @return the storeCode */ public String getStoreCode() { return storeCode; } /** * @param storeCode the storeCode to set * @see #getStoreCode() */ public void setStoreCode(String storeCode) { this.storeCode = storeCode; } /** * An internal ID that may be optionally used to link the receipt to an internal * order ID. * @return the internalId */ public String getInternalId() { return internalId; } /** * @param internalId the internalId to set * @see #getInternalId() */ public void setInternalId(String internalId) { this.internalId = internalId; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("Receipt {") .append("sku:").append(sku).append(", ") .append("expiryDate:").append(expiryDate).append(", ") .append("cancellationDate:").append(cancellationDate).append(", ") .append("purchaseDate:").append(purchaseDate).append(", ") .append("orderData:").append(orderData).append(", ") .append("quantity:").append(quantity).append(", ") .append("transactionId:").append(transactionId).append(", ") .append("storeCode:").append(storeCode).append(", ") .append("internalId:").append(internalId).append("}"); return sb.toString(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy