Currently your callback function is invoked asynchronously but only supports a single set of callbacks (onPurchaseSuccess and onPurchaseFail). I believe there may be an issue if someone calls purchase twice in a row since you will overwrite the callbacks from the first invocation with the second.