Add prototype PayPal subscriber report.
This commit is contained in:
		
						commit
						d298456efe
					
				
					 1 changed files with 72 additions and 0 deletions
				
			
		
							
								
								
									
										72
									
								
								paypal_report.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								paypal_report.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,72 @@ | ||||||
|  | """Download subscriber info from PayPal. | ||||||
|  | 
 | ||||||
|  | Run it like this: | ||||||
|  | 
 | ||||||
|  | $ export PAYPAL_CLIENT_ID=XXX | ||||||
|  | $ export PAYPAL_CLIENT_SECRET=YYY | ||||||
|  | $ python3 paypal_report.py 2021-11-01T00:00:00-0700 2021-11-30T23:59:59-0700 > out.csv | ||||||
|  | 
 | ||||||
|  | """ | ||||||
|  | import argparse | ||||||
|  | import csv | ||||||
|  | import sys | ||||||
|  | import os | ||||||
|  | 
 | ||||||
|  | import requests | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def get_access_token(client_id, client_secret): | ||||||
|  |     url = 'https://api-m.paypal.com/v1/oauth2/token?grant_type=client_credentials' | ||||||
|  |     response = requests.post( | ||||||
|  |         url, | ||||||
|  |         auth=(client_id, client_secret), | ||||||
|  |         headers={ | ||||||
|  |             'Accept': 'application/json', | ||||||
|  |             'Accept-Language': 'en_US', | ||||||
|  |         }, | ||||||
|  |     ) | ||||||
|  |     data = response.json() | ||||||
|  |     return data['access_token'] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def get_transactions(access_token, start_date, end_date, page=1): | ||||||
|  |     print(f'Fetching transactions page {page}.', file=sys.stderr) | ||||||
|  |     url = f'https://api-m.paypal.com/v1/reporting/transactions?start_date={start_date}&end_date={end_date}&fields=all&page_size=500&page={page}' | ||||||
|  |     response = requests.get( | ||||||
|  |         url, | ||||||
|  |         headers={ | ||||||
|  |             'Content-Type': 'application/json', | ||||||
|  |             'Authorization': f'Bearer {access_token}', | ||||||
|  |         }, | ||||||
|  |     ) | ||||||
|  |     data = response.json() | ||||||
|  |     if page < data['total_pages']: | ||||||
|  |         return data['transaction_details'] + get_transactions(access_token, start_date, end_date, page + 1) | ||||||
|  |     else: | ||||||
|  |         return data['transaction_details'] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | if __name__ == '__main__': | ||||||
|  |     parser = argparse.ArgumentParser(description='Download PayPal subscriber info.') | ||||||
|  |     parser.add_argument('start_date', help='start date inclusive (eg. 2021-11-01T00:00:00-0700)') | ||||||
|  |     parser.add_argument('end_date', help='end date inclusive (eg. 2021-11-30T23:59:59-0700)') | ||||||
|  |     args = parser.parse_args() | ||||||
|  |     try: | ||||||
|  |         client_id = os.environ['PAYPAL_CLIENT_ID'] | ||||||
|  |         client_secret = os.environ['PAYPAL_CLIENT_SECRET'] | ||||||
|  |     except KeyError: | ||||||
|  |         sys.exit('Please set PAYPAL_CLIENT_ID and PAYPAL_CLIENT_SECRET environment variables.') | ||||||
|  |     access_token = get_access_token(client_id, client_secret) | ||||||
|  |     transactions = get_transactions(access_token, args.start_date, args.end_date) | ||||||
|  |     writer = csv.writer(sys.stdout) | ||||||
|  |     for t in transactions: | ||||||
|  |         transaction_info = t['transaction_info'] | ||||||
|  |         if 'paypal_reference_id' in transaction_info: | ||||||
|  |             writer.writerow( | ||||||
|  |                 ( | ||||||
|  |                     transaction_info['paypal_reference_id'], | ||||||
|  |                     transaction_info['transaction_subject'], | ||||||
|  |                 ), | ||||||
|  |             ) | ||||||
|  |         else: | ||||||
|  |             print(f'Skipping transaction {transaction_info["transaction_id"]} with no PayPal Reference ID.', file=sys.stderr) | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue