用我下載的 PayPal 交易歷史計算餘額
PayPal 可讓您將賬戶中的每筆交易(自賬戶開通以來)下載到 CSV 文件中,供您根據需要進行處理。
我想確定實際賬戶餘額。
我已將整個 PayPal 導入到單個 SQL 數據庫表中,因此我可以對其執行查詢以執行計算和探索數據。無論如何,Excel 的數據太多了。
我的數據庫表的架構包含 CSV 文件中的所有欄位,但這些欄位特別突出:
DateTime, Type, Status, Gross, Fee, Net, TransactionId, ReferenceTransactionId
不幸的是,PayPal 沒有提供任何說明某些值的重要性的規範文件(交易 CSV 與 PayPal 的 IPN 不同)。
我對數據的第一個觀察是PayPal 重寫了歷史!. 有人會假設 PayPal 會像銀行一樣運作,因為交易一旦寫入日誌就不可更改:例如,如果向您的銀行賬戶添加了 50 美元,但幾天后交易被撤銷/退款,您會期望看到:
Date Amount Description 2016-01-04 50.00 $50 deposit 2016-01-07 -50.00 $50 deposit refunded
如果你這樣做,
SUM(Amount)
你會得到0.00
- 因為這兩個交易導致淨零。然而,使用 PayPal 的體驗是這樣的:
- 第 1 步:下載 1 月份的交易 CSV
- 第 2 步:CSV 文件將包含以下內容(釋義):
Date Amount Description Status 2016-01-04 50.00 $50 deposit Completed
- 第 3 步:幾天后重新下載 1 月份的交易 CSV
- 第 4 步:觀察 CSV 文件仍將只包含 1 行,但看起來像這樣:
Date Amount Description Status 2016-01-04 50.00 $50 deposit Canceled
…這意味著您需要始終重新下載至少一年前的歷史記錄,以擷取任何重寫的事務並將它們重新導入您的數據庫表中。
您可以爭辯說這不是問題 - 只需執行
SUM
whereStatus <> 'Canceled'
- 這可能是正確的解決方案,除了……
- 我已經確定了超過 47 種不同的
Type
和Status
值的獨特組合,這使得確定哪些應該包含在SUM
或不包含在變得更加困難:+-----------------------------------------+-----------+ | Type | Status | +-----------------------------------------+-----------+ | Add Funds from a Bank Account | Completed | | Authorization | Completed | | Cancelled Fee | Completed | | Chargeback Reimbursement | Completed | | Chargeback Settlement | Completed | | Donation Received | Canceled | | Donation Received | Cleared | | Donation Received | Completed | | Donation Received | Refunded | | Donation Received | Reversed | | Donation Received | Uncleared | | Donation Sent | Completed | | eCheck Sent | Cleared | | Express Checkout Payment Sent | Completed | | Mobile Payment Received | Completed | | Payment Received | Completed | | Payment Review | Cleared | | Payment Review | Placed | | Payment Sent | Completed | | Payment Sent | Refunded | | PayPal card confirmation refund | Completed | | Recurring Payment Received | Completed | | Recurring Payment Received | Refunded | | Refund | Completed | | Request Received | Canceled | | Request Received | Pending | | Reversal | Completed | | Shopping Cart Payment Sent | Completed | | Temporary Hold | Placed | | Temporary Hold | Removed | | Update to Add Funds from a Bank Account | Completed | | Update to eCheck Received | Canceled | | Update to eCheck Received | Cleared | | Update to eCheck Received | Updated | | Update to eCheck Sent | Cleared | | Update to Reversal | Canceled | | Web Accept Payment Received | Canceled | | Web Accept Payment Received | Cleared | | Web Accept Payment Received | Completed | | Web Accept Payment Received | Held | | Web Accept Payment Received | Refunded | | Web Accept Payment Received | Reversed | | Web Accept Payment Received | Uncleared | | Web Accept Payment Sent | Completed | | Withdraw Funds to a Bank Account | Completed | | Withdraw Funds to a Bank Account | Pending | | Withdraw Funds to Bank Account | Completed | +-----------------------------------------+-----------+
- PayPal 會重寫一些交易,但有時他們會將相關交易附加到您的歷史記錄中(指向 中的原始交易
ReferenceTxnId
) - 有時他們會同時執行這兩項操作。- 並且該
ReferenceTxnId
欄位用於表示交易的多層層次結構——即購買交易1
可以有相關的退款交易2
,而交易可以有引用和不引用2
的反退款交易)。
3``2``1
- 我必須編寫一個遞歸 CTE 查詢來檢索給定根事務的“事務樹”。
我觀察到的其他好奇心包括:
PayPal有時
Name
使用列(用於客戶姓名)來儲存交易類型資訊,並使用列(客戶的電子郵件地址)來包含 PayPal 自己的電子郵件地址,例如.From Email``riskmanagement@x.com
無法解釋且明顯不一致的使用:
- “
Canceled
”,對“Refunded
”,對“Reversed
”,對“Removed
”- “
Completed
”,對“Cleared
”,對“Placed
”和有什麼區別:
Type: Web Accept Payment Received, Status: Refunded
- …和…
Type: Refund, Status: Completed
…為什麼貝寶這麼遲鈍?
這是我導入的一系列交易的真實範例。讀者,我的問題是,假設這些是賬戶中唯一的交易,那麼最終的 PayPal 賬戶餘額是多少?
DateTimeUtc Name Type Status Gross Fee Net FromEmail TxnId ReferenceTxnId ------------------ ------------------------- ---------------------------- ---------- ----- ----- ----- -------------------- ---- -------------- 2014-06-15 17:47:30 (Customer name) Web Accept Payment Received Completed 20.00 -1.05 18.95 customer@hotmail.com 1111 2014-07-02 03:41:22 (Customer name) Temporary Hold Removed -20.00 1.05 -18.95 customer@hotmail.com 2222 1111 2014-07-16 21:00:58 Reversal Update to Reversal Canceled 18.95 0.00 18.95 customer@hotmail.com 3333 2222 2014-07-16 21:00:59 Chargeback Settlement Chargeback Settlement Completed -20.00 -20.00 -40.00 riskmanagement@x.com 4444 1111 2014-10-01 13:32:55 Chargeback Reimbursement Chargeback Reimbursement Completed 20.00 0.00 20.00 riskmanagement@x.com 5555 1111
根據您的解釋,它可能是:
- 1.05
17.90
-20.00
…我自己也不知道正確的答案是什麼!
我也遇到過這種情況,幾乎每個月下載的交易都與報表餘額不匹配。以我的經驗,這不一定是因為交易後來發生了變化;由於以下原因,我看到了差異:
- 處理退款時,固定費用部分不可退還,這不包括在下載的交易中。在您的 20 美元退款範例中,1.05 美元中的 0.05 美元是固定費用部分,不會退還給您,因此您的真實餘額將減少 5 美分。(我不知道為什麼真實金額沒有反映在下載的交易中。但在明細表上是正確的。)
- 當客戶與其信用卡提供商提出爭議時,PayPal 將與您聯繫並告知您,並且可以選擇批准退款。如果您批准,PayPal 將退還這筆錢並收取您 20 美元的費用,該費用不會顯示在您下載的交易中。(至少它發生的一次對我來說不是。)順便說一句,如果在過去 60 天內向您支付了 CC 爭議的退款,而不是批准退款,您應該能夠正常退還交易方式並避免 20 美元的費用。(為什麼人們會與他們的 CC 公司爭論收費,而不是僅僅通過電子郵件發送客戶支持並首先要求退款,這超出了我的理解……)
那麼該怎麼辦呢?到目前為止,我每個月都在手動核對明細表。對我來說,退款很少見,因此很容易發現差異。
旁注:我看到您正在使用小額支付費用表。由於您沒有預設設置,我相信您知道 PayPal 提供 2 種不同的時間表:
- 0.30 美元 + 2.9%(正常)
- 0.05 美元 + 5%(小額支付)
一些快速代數告訴我們,如果您的平均售價超過 11.90 美元,那麼您最好使用選項 1。即使您範例中的所有費用都是 20 美元或更多,您顯然也在使用選項 2。如果您的範例數字表明您的平均銷售額,您可能可以通過更改選項 1 來節省一些錢。請注意,我說可能而不是肯定的原因是因為當您獲得退款時,您無法獲得固定費用。因此,現在您每次退款僅損失 5 美分,而如果您切換,每次退款將損失 30 美分。您必須計算平均銷售價格的數字,並考慮您的退款率,才能知道哪個最適合您。
在這個問題上付出了很大的努力。
我只能建議:如果貝寶不提供映射表(類型、狀態、信用/借記),您將不得不自己建構它。
我會這樣處理:您的 SQL 映射表包含所有已知組合的貸記/借記條目,並且貸記/借記條目將是所有的 -1。然後,當您獲得交易列表時,您必須向使用者顯示所有可能的結果,然後使用者將勾選正確的結果(將其與餘額進行比較)。如果它是唯一的,您將儲存貸記/借記條目。這樣,隨著時間的推移,您將了解可能的組合。
它是第 n 個問題,所以可能先從少量事務開始。我希望你能很快建立起來。
這將是一個有趣的實驗……