示例#1
0
 def post(self):
     
     user = users.get_current_user()
     
     user_prefs = UserPrefs.all().filter('google_account =', user).get()
     if user_prefs is None:
         return self.error(404)
     
     receipt_data = self.request.get('receipt_data')
     logging.info('Row: %s' % receipt_data)
     
     store_purchase_tmp_history = StorePurchaseTmpHistory()
     store_purchase_tmp_history.user_prefs = user_prefs.key()
     store_purchase_tmp_history.platform = 'ios'
     store_purchase_tmp_history.receipt_data = receipt_data
     store_purchase_tmp_history.status = 'pending'
     store_purchase_tmp_history.secret_key = uuid.uuid4().hex
     store_purchase_tmp_history.put()
     
     try:
         taskqueue.add(url = '/store_api/task/verify_receipt', params = {'id': store_purchase_tmp_history.key().id()})
     
         json = simplejson.dumps({'status': True, 'key': store_purchase_tmp_history.secret_key}, ensure_ascii=False)
         self.response.content_type = 'application/json'
         return self.response.out.write(json)
         
     except:
         logging.error('Add task failed.')
     
     json = simplejson.dumps({'status': False, 'key': None}, ensure_ascii=False)
     self.response.content_type = 'application/json'
     self.response.out.write(json)
示例#2
0
 def post(self):
     
     receipt_id = self.request.get('id')
     
     store_purchase_tmp_history = StorePurchaseTmpHistory.get_by_id(int(receipt_id))
     if store_purchase_tmp_history is not None:
         receipt_data = store_purchase_tmp_history.receipt_data
         user_prefs = store_purchase_tmp_history.user_prefs
         
         logging.info('Row: %s' % receipt_data)
         
         debug_mode = True
                 
         if debug_mode:
             verify_url = 'https://sandbox.itunes.apple.com/verifyReceipt'
         else:
             verify_url = 'https://buy.itunes.apple.com/verifyReceipt'
         
         receipt_data_b64 = base64.b64encode(receipt_data)
         logging.info('B64: %s' % receipt_data_b64)
         
         payload = simplejson.dumps({'receipt-data': receipt_data_b64}, ensure_ascii=False)
         
         logging.info('Verify URL: %s' % verify_url)
         
         response = urlfetch.fetch(url=verify_url, payload=payload, method=urlfetch.POST, headers={'Content-Type': 'application/json'})
         if response.status_code == 200:
             result = simplejson.loads(response.content)
             logging.info(response.content)
             if result['status'] == 0:
                 
                 store_purchase_history = StorePurchaseHistory()
                 store_purchase_history.user_prefs = user_prefs.key()
                 store_purchase_history.product_id = result['receipt']['product_id']
                 store_purchase_history.platform = 'ios'
                 store_purchase_history.receipt = response.content
                 store_purchase_history.status = 'pending'
                 store_purchase_history.put()
                 
                 logging.info('Status: Success')
                 
                 store_purchase_tmp_history.status = 'success'
                 store_purchase_tmp_history.put()
                 
                 try:
                     taskqueue.add(url = '/store_api/task/item_count_up', params = {'id': store_purchase_history.key().id()})
                 except:
                     logging.error('Add task failed.')
                     return self.error(500)
                 
                 logging.info('verify receipt success.')
             else:
                 logging.error('Status: Failed')
         else:
             logging.error('ResponseCode: %d' % response.status_code)
             return self.error(500)
             
         logging.info('verify receipt failed.')
     else:
         logging.error('receipt_id not found.')
示例#3
0
 def post(self):
     secret_key = self.request.get('key')
     
     store_purchase_tmp_history = StorePurchaseTmpHistory.all().filter('secret_key =', secret_key).get()
     if store_purchase_tmp_history is not None:
         if store_purchase_tmp_history.status == 'pending':
             json = simplejson.dumps({'pending': True}, ensure_ascii=False)
         else:
             json = simplejson.dumps({'pending': False}, ensure_ascii=False)
             
         logging.info('Result: %s' % json)
         self.response.content_type = 'application/json'
         self.response.out.write(json)
     else:
         self.error(404)