Android IAP unmaneged Items Server Checksum
When the IAP is successful, the status of this purchase is recorded on Google server. You can request this status via the Google Play Android Developer API to complete the checksum and send the player the appropriate props.
1> client String, ORDERID (Order ID), productId (purchase item name), PackageName (app package name), Purchasetoken (token, unique value), this 4 string is required for verification, and passed to the server.
2> calls the Google Play Android Developer API (https://developers.google.com/android-publisher/api_usage) requires the use of OAuth2.0, Can be used in Java, Python,. Net, Ruby, PHP, etc. (https://developers.google.com/identity/protocols/OAuth2WebServer)
This article uses Python implementations.
3> setting up the environment
Enable Google Play Android Developer API interface in console.developers.google.com
Set API permissions in play.google.com, OAuth client project Settings
4> Script Implementation
Import httplib2import pprintimport sysimport timeimport osimport mysqldblist_bill=[]from apiclient.discovery Import Buildfrom oauth2client.client Import signedjwtassertioncredentialsdef Main (argv): # Connect the db to get billdb= MySQLdb.connect ("localhost", "root", "pass", Sys.argv[1]) cursor=db.cursor () try:# Query the string Cursor.callproc from the client (' Getbill ', (' 2 ')) Results=cursor.fetchall () while (Cursor.nextset ()):p rint "111111111111" for result in results:# Load the Key in PKCS \ Downloaded from the Google api# Console when you created your Service account.f = file (' Con The path of P12 key in Sole ', ' RB ') key = F.read () f.close () # Create an httplib2. HTTP object to handle our HTTP requests and authorize it# with the Credentials. Note that the first parameter, service_account_name,# are the Email address created for the service account. The It must is the email# address associated with the key is created.credentials = Signedjwtassertioncredentials (' PLAY.G Oogle.com OAuth Authorized Account ', key,scope= ' Https://www.googleApis.com/auth/androidpublisher ') http = httplib2. HTTP () http = credentials.authorize (http) #service Buildservice = Build ("Androidpublisher", "V2", Http=http) #get Billlist_bill=result[4].split (') transaction_id=list_bill[0]product_id=list_bill[1]packagename=list_bill[2] Token=list_bill[3]try:print ' try to get ' lists = Service.purchases (). Products (). Get (Packagename=packagename, Productid=product_id,token=token). Execute (http=http) except:# bill is missing or invalid BILLCURSOR.CALLPROC (# SQL processing code while (Cursor.nextset ()):p rint "111111111111" Db.commit () continuepprint.pprint (lists) # to determine if it is legal and not consumed if (lists[' Purchasestate ']==0 and lists[' consumptionstate ']==0):d iff=time.time ()-float (lists[' Purchasetimemillis '][0:10]) if (diff>2592000): #over time Bill, the record the Logcursor.callproc (# SQL processing code) while (Cursor.nextset ()):p rint " 111111111111 "Db.commit () Continueelse: #good receiptnum=product_id.split ('. ') [3]cursor.callproc (' Check_bill ', (Result[0],1,num,time.time (), ", transaction_id)) while (Cursor.nextset ())):p rint "111111111111" Db.commit () continue# has consumed elif (lists[' purchasestate ']==0 and lists[' Consumptionstate ']==1): Cursor.callproc (# SQL processing code) while (Cursor.nextset ()):p rint "111111111111" Db.commit () print "already consumed" continueexcept:# SQL Get is wrongprint "SQL Err" Finally:cursor.close () db.close () if __name__ = = ' __main__ ': while (1): if ( Os.path.exists ("/tmp/stop_gp_iap_check-" +sys.argv[1]+ ". txt")):p rint "Stop" Breakelse:main (SYS.ARGV) time.sleep (2)
[Android] Google IAP unmaneged Items Server Checksum