Dispute.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <?php
  2. namespace Braintree;
  3. /**
  4. * Creates an instance of Dispute as returned from a transaction
  5. *
  6. *
  7. * @package Braintree
  8. *
  9. * @property-read string $amount
  10. * @property-read string $currencyIsoCode
  11. * @property-read date $receivedDate
  12. * @property-read string $reason
  13. * @property-read string $status
  14. * @property-read string $disbursementDate
  15. * @property-read object $transactionDetails
  16. */
  17. class Dispute extends Base
  18. {
  19. protected $_attributes = [];
  20. /* Dispute Status */
  21. const ACCEPTED = 'accepted';
  22. const DISPUTED = 'disputed';
  23. const EXPIRED = 'expired';
  24. const OPEN = 'open';
  25. const WON = 'won';
  26. const LOST = 'lost';
  27. /* deprecated; for backwards compatibilty */
  28. const Open = 'open';
  29. /* Dispute Reason */
  30. const CANCELLED_RECURRING_TRANSACTION = "cancelled_recurring_transaction";
  31. const CREDIT_NOT_PROCESSED = "credit_not_processed";
  32. const DUPLICATE = "duplicate";
  33. const FRAUD = "fraud";
  34. const GENERAL = "general";
  35. const INVALID_ACCOUNT = "invalid_account";
  36. const NOT_RECOGNIZED = "not_recognized";
  37. const PRODUCT_NOT_RECEIVED = "product_not_received";
  38. const PRODUCT_UNSATISFACTORY = "product_unsatisfactory";
  39. const TRANSACTION_AMOUNT_DIFFERS = "transaction_amount_differs";
  40. const RETRIEVAL = "retrieval";
  41. /* Dispute Kind */
  42. const CHARGEBACK = 'chargeback';
  43. const PRE_ARBITRATION = 'pre_arbitration';
  44. // RETRIEVAL for kind already defined under Dispute Reason
  45. protected function _initialize($disputeAttribs)
  46. {
  47. $this->_attributes = $disputeAttribs;
  48. if (isset($disputeAttribs['transaction'])) {
  49. $transactionDetails = new Dispute\TransactionDetails($disputeAttribs['transaction']);
  50. $this->_set('transactionDetails', $transactionDetails);
  51. $this->_set('transaction', $transactionDetails);
  52. }
  53. if (isset($disputeAttribs['evidence'])) {
  54. $evidenceArray = array_map(function($evidence) {
  55. return new Dispute\EvidenceDetails($evidence);
  56. }, $disputeAttribs['evidence']);
  57. $this->_set('evidence', $evidenceArray);
  58. }
  59. if (isset($disputeAttribs['statusHistory'])) {
  60. $statusHistoryArray = array_map(function($statusHistory) {
  61. return new Dispute\StatusHistoryDetails($statusHistory);
  62. }, $disputeAttribs['statusHistory']);
  63. $this->_set('statusHistory', $statusHistoryArray);
  64. }
  65. if (isset($disputeAttribs['transaction'])) {
  66. $this->_set('transaction',
  67. new Dispute\TransactionDetails($disputeAttribs['transaction'])
  68. );
  69. }
  70. }
  71. public static function factory($attributes)
  72. {
  73. $instance = new self();
  74. $instance->_initialize($attributes);
  75. return $instance;
  76. }
  77. public function __toString()
  78. {
  79. $display = [
  80. 'amount', 'reason', 'status',
  81. 'replyByDate', 'receivedDate', 'currencyIsoCode'
  82. ];
  83. $displayAttributes = [];
  84. foreach ($display AS $attrib) {
  85. $displayAttributes[$attrib] = $this->$attrib;
  86. }
  87. return __CLASS__ . '[' .
  88. Util::attributesToString($displayAttributes) .']';
  89. }
  90. /**
  91. * Accepts a dispute, given a dispute ID
  92. *
  93. * @param string $id
  94. */
  95. public static function accept($id)
  96. {
  97. return Configuration::gateway()->dispute()->accept($id);
  98. }
  99. /**
  100. * Adds file evidence to a dispute, given a dispute ID and a document ID
  101. *
  102. * @param string $disputeId
  103. * @param string $documentIdOrRequest
  104. */
  105. public static function addFileEvidence($disputeId, $documentIdOrRequest)
  106. {
  107. return Configuration::gateway()->dispute()->addFileEvidence($disputeId, $documentIdOrRequest);
  108. }
  109. /**
  110. * Adds text evidence to a dispute, given a dispute ID and content
  111. *
  112. * @param string $id
  113. * @param string $contentOrRequest
  114. */
  115. public static function addTextEvidence($id, $contentOrRequest)
  116. {
  117. return Configuration::gateway()->dispute()->addTextEvidence($id, $contentOrRequest);
  118. }
  119. /**
  120. * Finalize a dispute, given a dispute ID
  121. *
  122. * @param string $id
  123. */
  124. public static function finalize($id)
  125. {
  126. return Configuration::gateway()->dispute()->finalize($id);
  127. }
  128. /**
  129. * Find a dispute, given a dispute ID
  130. *
  131. * @param string $id
  132. */
  133. public static function find($id)
  134. {
  135. return Configuration::gateway()->dispute()->find($id);
  136. }
  137. /**
  138. * Remove evidence from a dispute, given a dispute ID and evidence ID
  139. *
  140. * @param string $disputeId
  141. * @param string $evidenceId
  142. */
  143. public static function removeEvidence($disputeId, $evidenceId)
  144. {
  145. return Configuration::gateway()->dispute()->removeEvidence($disputeId, $evidenceId);
  146. }
  147. /**
  148. * Search for Disputes, given a DisputeSearch query
  149. *
  150. * @param DisputeSearch $query
  151. */
  152. public static function search($query)
  153. {
  154. return Configuration::gateway()->dispute()->search($query);
  155. }
  156. }
  157. class_alias('Braintree\Dispute', 'Braintree_Dispute');