#!/bin/bash
# Download recent transaction history from Paypal as JSON,
# and print on stdout.
#
# Requirements: a Paypal developer account, curl, jq (optional, just for pretty-printing)
#
# brew install jq
#
# Limitations: 
# - sees only the last 30 days of history (within the current timezone)
# - gets only the first page of results (no more than 500 transactions)
#
# Paypal API doc: https://developer.paypal.com/docs/api/transaction-search/v1

# credentials for an API app which you have created in https://developer.paypal.com
CLIENT_ID=$PAYPAL_CLIENT_ID
SECRET=$PAYPAL_SECRET

# GNU date (gdate on mac)
date() 
{ 
    if hash gdate 2>/dev/null; then gdate "$@"; else date "$@"; fi
}

# max date range is 31d
START=`date +%Y-%m-%dT00:00:00Z -d '-30 days'`
END=`date +%Y-%m-%dT00:00:00Z -d '+1 day'`
# for testing:
# START=2021-05-21T00:00:00-0000
# END=2021-05-22T00:00:00-0000

# get a token allowing temporary access to the API
TOKEN=`curl -s https://api-m.paypal.com/v1/oauth2/token -d "grant_type=client_credentials" -u "$CLIENT_ID:$SECRET" | jq .access_token -r`

# 1. fetch json from paypal
# 2. prettify it with jq
curl -s -H "Authorization: Bearer $TOKEN" "https://api.paypal.com/v1/reporting/transactions?start_date=$START&end_date=$END&fields=all&page_size=500&page=1" \
| jq

echo
