from typing import Optional
import requests
from config import get_api_key
from pin_payments.base import Base
[docs]
class Disputes(Base):
"""
The disputes API allows you to retrieve details of
disputes against your charges and perform actions
to either challenge or accept them.
"""
def __init__(self, api_key: str, mode: str = 'live'):
super().__init__(api_key=api_key, mode=mode)
self._base_url += 'disputes/'
[docs]
def list_disputes(
self,
sort: Optional[str] = None,
direction: Optional[int] = 1
) -> dict:
"""
Returns a paginated list of all disputes.
:param sort: The field used to sort the disputes.
:param direction: The direction in which to sort the disputes (1 for ascending or -1 for descending).
:return: dict
"""
params = {}
if sort is not None:
params['sort'] = sort
params['direction'] = direction
response = requests.get(self._base_url, auth=self._auth, params=params)
return self._handle_response(
response,
'list_disputes',
200
)
[docs]
def search_disputes(
self,
query: Optional[str] = None,
status: Optional[str] = None,
sort: Optional[str] = None,
direction: Optional[int] = 1
) -> dict:
"""
Returns a paginated list of disputes matching the search criteria.
:param query: Query for searching disputes.
:param status: The status of the disputes.
:param sort: The field used to sort the disputes.
:param direction: The direction of sorting.
:return: dict
"""
params = {}
if query is not None:
params['query'] = query
if status is not None:
params['status'] = status
if sort is not None:
params['sort'] = sort
params['direction'] = direction
response = requests.get(f"{self._base_url}search", auth=self._auth, params=params)
return self._handle_response(
response,
'search_disputes',
200
)
[docs]
def get_dispute_details(self, dispute_token: str) -> dict:
"""
Returns the details of a dispute.
:param dispute_token: The token of the dispute.
:return: dict
"""
response = requests.get(f"{self._base_url}{dispute_token}", auth=self._auth)
return self._handle_response(
response,
'get_dispute_details',
200
)
[docs]
def get_dispute_activity(self, dispute_token: str) -> dict:
"""
Returns the activity feed for a dispute.
:param dispute_token: The token of the dispute.
:return: dict
"""
response = requests.get(f"{self._base_url}{dispute_token}/activity", auth=self._auth)
return self._handle_response(
response,
'get_dispute_activity',
200
)
[docs]
def get_dispute_evidence(self, dispute_token: str) -> dict:
"""
Displays current evidence batch for a dispute.
:param dispute_token: The token of the dispute.
:return: dict
"""
response = requests.get(f"{self._base_url}{dispute_token}/evidence", auth=self._auth)
return self._handle_response(
response,
'get_dispute_evidence',
200
)
[docs]
def update_dispute_evidence(
self,
dispute_token: str,
evidence_data: dict[str, str]
) -> dict:
"""
Updates evidence batch for a dispute.
:param dispute_token: The token of the dispute.
:param evidence_data: The evidence data to be updated.
:return: dict
"""
response = requests.put(f"{self._base_url}{dispute_token}/evidence", auth=self._auth, json=evidence_data)
return self._handle_response(
response,
'update_dispute_evidence',
200
)
[docs]
def submit_dispute_evidence(self, dispute_token: str) -> dict:
"""
Submits current evidence batch for review.
:param dispute_token: The token of the dispute.
:return: dict
"""
response = requests.post(f"{self._base_url}{dispute_token}/evidence", auth=self._auth)
return self._handle_response(
response,
'submit_dispute_evidence',
200
)
[docs]
def accept_dispute(self, dispute_token: str) -> dict:
"""
Accepts a dispute.
:param dispute_token: The token of the dispute.
:return: dict
"""
response = requests.post(f"{self._base_url}{dispute_token}/accept", auth=self._auth)
return self._handle_response(
response,
'accept_dispute',
200
)
if __name__ == '__main__':
disputes_api = Disputes(api_key=get_api_key(), mode='test')
all_disputes = disputes_api.list_disputes()
print("All Disputes:", all_disputes)
searched_disputes = disputes_api.search_disputes(query="unrecognized", status="open")
print("Searched Disputes:", searched_disputes)
dispute_token = "your_dispute_token_here"
dispute_details = disputes_api.get_dispute_details(dispute_token)
print("Dispute Details:", dispute_details)
dispute_activity = disputes_api.get_dispute_activity(dispute_token)
print("Dispute Activity:", dispute_activity)
dispute_evidence = disputes_api.get_dispute_evidence(dispute_token)
print("Dispute Evidence:", dispute_evidence)
evidence_data = {"customer_communication": "Evidence of communication with the customer."}
updated_evidence = disputes_api.update_dispute_evidence(dispute_token, evidence_data)
print("Updated Evidence:", updated_evidence)
submitted_evidence = disputes_api.submit_dispute_evidence(dispute_token)
print("Submitted Evidence for Review:", submitted_evidence)
accepted_dispute = disputes_api.accept_dispute(dispute_token)
print("Accepted Dispute:", accepted_dispute)