duccong / marketbilling

Automatically exported from code.google.com/p/marketbilling
0 stars 0 forks source link

What's wrong with in-app billing today ? #29

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
I've got an app on the market that uses in-app billing to unlock advanced 
features. This morning I noticed a FULL PAGE of cancelled transactions followed 
by a bad reviews saying my app never got a response from their market purchase. 
Now I'm seeing double-billed orders on a managed product and transaction going 
through on failed orders. A few customers have contacted me and I've refunded 
their purchases after many failed attempts to fix this, but I fear I'll be 
getting lots of angry emails from the ones who will only notice the error on 
their credit card bill.

The app has been working just fine for weeks prior to today's events and SOME 
users have been able to unlock the features just fine today so I know it's not 
happening to EVERYONE.

What's going on Google?

There is an item on today's known issues pages stating some app orders are not 
being charged, but my issue sounds different as people are being charged 
without receiving the product. 

I've seen issue #14, but this isn't a few random transactions, I've had no 
problems before and today has been almost nothing but errors and incorrect 
billing? 

I have a few order numbers if that will help.

Original issue reported on code.google.com by rejeanpo...@gmail.com on 14 Jun 2011 at 7:13

GoogleCodeExporter commented 8 years ago
Hi,

we experience exactly the same issues. We haven't published the App yet (the 
In-App products are published) and had the same problems as you described above 
while doing a final round of testing:
 * 'automatically' cancelled transactions
 * despite the products are 'managed per user account' we can buy it twice (and the user is billed twice when we checked the checkout account).
 * we never receive the IN_APP_NOTIFY message
 * a RESTORE_TRANSACTIONS returns only an empty list of orders, despite the (test-)users are billed for it.

Before the weekend, it used to work like a charm. There goes our release today 
:(

Let us know if we can supply additional informations to help resolve this issue.

Original comment by si...@lachinger.org on 14 Jun 2011 at 8:11

GoogleCodeExporter commented 8 years ago
I now have a complete debug log of the issue happening on another phone. Here 
are the relevant lines to the market transaction that seems to have failed, but 
then succeeded (charged the CC) later, without my app being notified.

06-14 20:21:48.143: INFO/ActivityManager(96): Displayed activity 
com.android.vending/.billing.InAppBuyPageActivity: 546 ms (total 546 ms)

[...]

06-14 20:21:49.313: DEBUG/vending(5875): [1] 
BaseBuyPageActivity.onPostResponse(): {PurchaseResult=ERROR_GAIA_AUTH, 
PurchaseInfo=PurchaseInfo=, SignupStatus=NEW_USER, TId=null, ShoppingCart=null, 
RefundPolicy=[], ErrorFields=[]}
06-14 20:21:49.313: DEBUG/vending(5875): [1] 
BaseBuyPageActivity.onPostResponse(): Invalid checkout token: 
{DQAAAOgAAABKcD5Q-[truncated, NOT my public key]-o5Pn590N6NU}
06-14 20:21:49.453: DEBUG/GoogleLoginService(271): onBind: Intent { 
act=android.accounts.AccountAuthenticator 
mp=com.google.android.gsf/.loginservice.GoogleLoginService }

[...]

06-14 20:21:51.623: DEBUG/vending(5875): [1] 
BaseBuyPageActivity.onPostResponse(): {PurchaseResult=OK, 
PurchaseInfo=PurchaseInfo=, SignupStatus=SIGNED_UP, TId=673828659801454, 
ShoppingCart=[ItemPrice=AU$3.99, TaxInclusive=, TaxExclusive=, Total=AU$3.99, 
HasTaxMessage=false, TaxMessage=null, HasFooterMessage=false, 
FooterMessage=null], RefundPolicy=This in-app purchase cannot be refunded. 
<br/> <a 
href="http://market.android.com/support/bin/answer.py?answer=1061913">More 
info</a><br/><a 
href="http://www.google.com/mobile/android/disclaimer-au.html">AU-Notice</a>, 
Instruments=[[Id=852812502358443, Name=VISA xxx-2740 Invalid=false 
Type=CREDIT_CARD] [Id=256887422074780, Name=VISA xxx-2740 Invalid=true 
Type=CREDIT_CARD] ], DefaultBillingInstrument=852812502358443, ErrorFields=[]}
06-14 20:21:51.643: DEBUG/vending(5875): [1] 
BaseBuyPageActivity.shouldAddCarrierBilling(): isProvisioned(): false 
isSavedonServer(): false radio available? true
06-14 20:21:51.643: DEBUG/vending(5875): [1] 
BaseBuyPageActivity.shouldAddCarrierBilling(): isProvisioned(): false 
isSavedonServer(): false radio available? true

[...]

06-14 20:22:10.963: DEBUG/vending(5875): [1] 
BaseBuyPageActivity.onOrderResponse(): state: CART_PURCHASE response: 
[PurchaseResult=OK]

Not sure what to make of this, but the first vending message seems odd with the 
"PurchaseInfo=PurchaseInfo=", looks like a bad response.

Today has been a horrible today as an Android developer and I'm seriously 
considering ripping all this in-app billing out and using PayPal... not sure 
I'd recommend in-app billing to new developers. 

Original comment by rejeanpo...@gmail.com on 14 Jun 2011 at 10:53

GoogleCodeExporter commented 8 years ago
Hi,

the log output from our App is exactly the same:

06-14 12:55:26.749: DEBUG/vending(981): [124] 
LocalAssetCache.updateOnePackage(): No local info for com.[...]
06-14 12:55:35.601: DEBUG/vending(981): [126] 
LocalAssetCache.updateOnePackage(): No local info for com.[...]
06-14 12:56:01.765: DEBUG/vending(981): [1] 
BaseBuyPageActivity.onPostResponse(): {PurchaseResult=ERROR_GAIA_AUTH, 
PurchaseInfo=PurchaseInfo=, SignupStatus=NEW_USER, TId=null, ShoppingCart=null, 
RefundPolicy=[], ErrorFields=[]}
06-14 12:56:01.765: DEBUG/vending(981): [1] 
BaseBuyPageActivity.onPostResponse(): Invalid checkout token: {DQAAA-[...]-SVg}
06-14 12:56:04.449: DEBUG/vending(981): [1] 
BaseBuyPageActivity.onPostResponse(): {PurchaseResult=OK, 
PurchaseInfo=PurchaseInfo=, SignupStatus=SIGNED_UP, TId=768296573358262, 
ShoppingCart=[ItemPrice=3,99 €, TaxInclusive=, TaxExclusive=, 
Total=3,99 €, HasTaxMessage=false, TaxMessage=null, HasFooterMessage=false, 
FooterMessage=null], RefundPolicy=Der Betrag für diesen In-App-Kauf kann nicht 
erstattet werden. <br/> <a 
href="http://market.android.com/support/bin/answer.py?answer=1061913">Weitere 
Informationen</a><br/><a 
href="http://www.google.com/mobile/android/fsa-notification.html">Geregelt 
durch Financial Services Authority (FSA, britische Bankenaufsichtsbehörde), 
Großbritannien</a>, Instruments=[[Id=107222246370128, Name=VISA xxx-6842 
Invalid=false Type=CREDIT_CARD] ], DefaultBillingInstrument=107222246370128, 
ErrorFields=[]}
06-14 12:56:04.472: DEBUG/vending(981): [1] 
BaseBuyPageActivity.shouldAddCarrierBilling(): isProvisioned(): false 
isSavedonServer(): false radio available? true
06-14 12:56:04.472: DEBUG/vending(981): [1] 
BaseBuyPageActivity.shouldAddCarrierBilling(): isProvisioned(): false 
isSavedonServer(): false radio available? true
06-14 12:56:06.699: DEBUG/vending(981): [1] 
BaseBuyPageActivity.onOrderResponse(): state: CART_PURCHASE response: 
[PurchaseResult=OK]

I also posted to the google groups mailing list, is there another place to get 
support / answers?

Thx!

Original comment by n.trie...@gmail.com on 14 Jun 2011 at 11:06

GoogleCodeExporter commented 8 years ago
The problem seems to be releated to the user accounts. We created new gmail 
accounts today, those seem to work, even with the same credit card...

Original comment by n.trie...@gmail.com on 14 Jun 2011 at 6:16

GoogleCodeExporter commented 8 years ago
[deleted comment]
GoogleCodeExporter commented 8 years ago
I am facing the similar problem. My phone has someone@gmail.com (A) (i can 
share this account id if needed) as the primary account. The account I am 
commenting on this issue (B) is a test account.

(B) is also the account which is my android market account.

My phone is upgraded market app to 2.3.6, but yet I get a 
mBillingService.checkBillingSupported() return as false.

I have blogged about my issues and solutions, please find the time to go thru. 
http://mcondev.wordpress.com/2011/06/12/securityexception-binder-invocation-to-a
n-incorrect-interface/

Original comment by mcon...@gmail.com on 14 Jun 2011 at 6:26

GoogleCodeExporter commented 8 years ago
I had my INTERNET permission incorrectly set. But now I am getting a false on  

boolean bindResult = bindService(
                    new Intent(Consts.MARKET_BILLING_SERVICE_ACTION),
                    this,  // ServiceConnection.
                    Context.BIND_AUTO_CREATE);

Original comment by mcon...@gmail.com on 14 Jun 2011 at 6:42

GoogleCodeExporter commented 8 years ago
One more question.
The sample code has a file IMarketBillingService.aidl, eclipse auto generates a 
java file IMarketBillingService.java 

But the developer.android.com site 
(http://developer.android.com/guide/market/billing/billing_integrate.html) 
refers to the following code
new Intent("com.android.vending.billing.MarketBillingService.BIND")

Question is, how is the bindService going to find MarketBillingService if it 
actually should be looking for a IMarketBillingService right ?

Or am I getting this wrong ? Please clarify.

Original comment by mcon...@gmail.com on 14 Jun 2011 at 7:13

GoogleCodeExporter commented 8 years ago
My androidmanifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      android:versionCode="1"
      android:versionName="1.0" package="com.mcondev1.dungeons">

    <!-- Required permission to use in-app billing. -->
    <uses-permission android:name="com.android.vending.BILLING" />
    <uses-permission android:name="android.permission.INTERNET" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name="com.mcondev1.dungeons.Dungeons"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service android:name="com.mcondev1.dungeons.BillingService" />

        <receiver android:name="com.mcondev1.dungeons.BillingReceiver">
            <intent-filter>
                <action android:name="com.android.vending.billing.IN_APP_NOTIFY" />
                <action android:name="com.android.vending.billing.RESPONSE_CODE" />
                <action android:name="com.android.vending.billing.PURCHASE_STATE_CHANGED" />
            </intent-filter>    
        </receiver>

    </application>
    <uses-sdk android:minSdkVersion="4" />

</manifest>

Original comment by mcon...@gmail.com on 14 Jun 2011 at 7:49

GoogleCodeExporter commented 8 years ago
Ok... we found a solution:

 * we removed the email addresses from the list of test users in the Android Market developer home
 * saved
 * re-added those accounts
 * it worked :)

No idea how and what caused the issue, but it works...

Original comment by si...@lachinger.org on 15 Jun 2011 at 8:11

GoogleCodeExporter commented 8 years ago
As discussed, this work around didn't work for my test users. More importantly, 
I've had this happen to many live customers as well. Many double-billed 
transactions today in fact. Who knows if the single-billed ones actually 
succeeded. You can't know unless the customer writes you (or you spam each 
customer through the temporary merchant email given)

Original comment by rejeanpo...@gmail.com on 15 Jun 2011 at 9:51

GoogleCodeExporter commented 8 years ago
I have the same problem as comment #2 above.
Billing is going through, but response is not coming back from the market.
Same strange:
BaseBuyPageActivity.onPostResponse(): {PurchaseResult=OK, 
PurchaseInfo=PurchaseInfo=, SignupStatus=.....

Original comment by sdk...@gmail.com on 15 Jun 2011 at 8:54

GoogleCodeExporter commented 8 years ago
Attached is the test project which I am trying to run. Unable to run it on my 
account mcondev at gmail dot com.

Original comment by jagtiani...@gmail.com on 16 Jun 2011 at 2:14

Attachments:

GoogleCodeExporter commented 8 years ago
i'm very disappointed with such bad quality service from google, damn

Original comment by thy.ri...@gmail.com on 16 Jun 2011 at 3:01

GoogleCodeExporter commented 8 years ago
I was going to release an application today as well but all of a sudden I 
cannot get any in-app purchases to go through.  I also tried with the Dungeons 
Example and get the same result.  It just sits there at "Authorizing Purchase" 
until that dialog goes away.  I never receive final confirmation of the 
purchase.

Original comment by st...@dogsbyte.net on 17 Jun 2011 at 1:51

GoogleCodeExporter commented 8 years ago
Yup, that's what my customers are getting too, still broken today. I don't know 
if it's something wrong with the Dungeons example that's not supported on the 
back-end anymore, but most people's code was based off that and now it no 
longer works.

Original comment by rejeanpo...@gmail.com on 17 Jun 2011 at 1:57

GoogleCodeExporter commented 8 years ago
Same thing here ---- still broken for 3 days. 
I'm thinking of not doing the In-App billing at all now. With no word from 
Google about the LodSys patent lawsuits, I'm not sure I even want to mess with 
it. 
If if it's this fragile AND we might get sued, where's the up-side???

Original comment by sdk...@gmail.com on 17 Jun 2011 at 4:39

GoogleCodeExporter commented 8 years ago
I've been at this all day and can't figure it out.  This was working fine 
during testing about two weeks ago.  Now it just sits at "Authorizing Purchase" 
forever... the market never responds even though my merchant account shows the 
purchase.

Original comment by st...@dogsbyte.net on 17 Jun 2011 at 5:03

GoogleCodeExporter commented 8 years ago
Okay, this bug report has gotten out of hand. I count at least 4 different bug 
reports scattered throughout the comments (if not more). Also, "What's wrong 
with in-app billing today?" is not an acceptable summary. This is not a 
discussion board.

That being said, there are two issues that likely caused the issues the 
original poster was describing:

- Earlier in the week our payment gateway had a brief outage. Any order that 
takes longer than ~3 minutes to process is automatically canceled by Market. 
This has been resolved.

- We are currently tracking an issue that allows users to purchase managed 
items more than once. We're working on fixing this.

Since this bug is already way off-topic, I'm going to close it this as invalid. 
We're still working on the duplicate purchase issue, and if somebody wants to 
open a bug for that, that's fine. If you're experiencing other issues and are 
sure they're not user error, feel free to open bugs on those too. (And if 
you're not sure, then please ask on one of the mailing lists first.)

Original comment by trevorjohns@google.com on 17 Jun 2011 at 7:15

GoogleCodeExporter commented 8 years ago
Trevor,  I am able to purchase a managed item over and over repeatedly.  If I 
request to restore transactions, the market reports no purchases.  Is this 
related to the issue you are tracking?  Any ETA?  Is it only affecting certain 
accounts?  I have an app ready for market but in-app billing stopped working.  
Do I wait for you to fix it or scrap it and go another route?

Original comment by st...@dogsbyte.net on 17 Jun 2011 at 7:59

GoogleCodeExporter commented 8 years ago
Yes, this sounds like the issue we're tracking.

I do not have an ETA at this time, nor can I accurately say which accounts are 
affected. (It's quite likely that it's any account using managed purchases.)

As a short term work-around, I recommend disabling your "buy" button until you 
get some sort of response from market, either confirming or canceling the 
order. That won't fix the problem with restoreTransactions(), but it does avoid 
double-billing.

(Disabling the buy button in this case is a good idea anyway. It's much easier, 
from a computational perspective, for your app to check a local db to see if an 
item has been purchased then to make an RPC call to Market and have us pull up 
the user's account.

Also worth noting: At the time I'm writing this, the response code for an 
attempted duplicate purchase of a managed item, assuming everything is working 
properly, is RESULT_OK, which gives you limited error handling options. There 
is a feature request open to change this behavior, but it hasn't been decided 
when, or if, this will be implemented.)

Original comment by trevorjohns@google.com on 17 Jun 2011 at 8:19

GoogleCodeExporter commented 8 years ago
Trevor, apologies for the bad summary. I agree it was more of a discussion 
board topic that a bug report. At the time (which was probably during the 
outage) it wasn't JUST double billing, it was a page full of failed 
transactions, double billing and other random issues hence the general 
(although bad) title.

As for off-topic responses, that's not in my control is it? I can't moderate 
and remove posts, so please don't punish the rest of us trying to find 
something in common with our issues because of someone asking for help 
integrating market tutorials. Without any word from you for days, and angry 
customers piling up, the best we can do is try and suggest workarounds to each 
other.

I'll file issues for specific issue if they don't already exist because I'd 
like to be notified when this is fixed.

It looks like you're already aware of what's causing this, but if you need 
duplicate order numbers, I'm sure between us we have quite a few to submit if 
that can help.

Original comment by rejeanpo...@gmail.com on 17 Jun 2011 at 10:53

GoogleCodeExporter commented 8 years ago
When are these issues going to be fixed?

I am still getting double (even triple) purchases, as well as orders that are 
automatically cancelled.

My users give me bad reviews because of all this behavior.

Original comment by w...@cybernited.be on 21 Dec 2011 at 6:30