Subscription.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. namespace Braintree;
  3. /**
  4. * Braintree Subscription module
  5. *
  6. * <b>== More information ==</b>
  7. *
  8. * For more detailed information on Subscriptions, see {@link https://developers.braintreepayments.com/reference/response/subscription/php https://developers.braintreepayments.com/reference/response/subscription/php}
  9. *
  10. * PHP Version 5
  11. *
  12. * @package Braintree
  13. */
  14. class Subscription extends Base
  15. {
  16. const ACTIVE = 'Active';
  17. const CANCELED = 'Canceled';
  18. const EXPIRED = 'Expired';
  19. const PAST_DUE = 'Past Due';
  20. const PENDING = 'Pending';
  21. // Subscription Sources
  22. const API = 'api';
  23. const CONTROL_PANEL = 'control_panel';
  24. const RECURRING = 'recurring';
  25. /**
  26. * @ignore
  27. */
  28. public static function factory($attributes)
  29. {
  30. $instance = new self();
  31. $instance->_initialize($attributes);
  32. return $instance;
  33. }
  34. /**
  35. * @ignore
  36. */
  37. protected function _initialize($attributes)
  38. {
  39. $this->_attributes = $attributes;
  40. $addOnArray = [];
  41. if (isset($attributes['addOns'])) {
  42. foreach ($attributes['addOns'] AS $addOn) {
  43. $addOnArray[] = AddOn::factory($addOn);
  44. }
  45. }
  46. $this->_attributes['addOns'] = $addOnArray;
  47. $discountArray = [];
  48. if (isset($attributes['discounts'])) {
  49. foreach ($attributes['discounts'] AS $discount) {
  50. $discountArray[] = Discount::factory($discount);
  51. }
  52. }
  53. $this->_attributes['discounts'] = $discountArray;
  54. if (isset($attributes['descriptor'])) {
  55. $this->_set('descriptor', new Descriptor($attributes['descriptor']));
  56. }
  57. if (isset($attributes['description'])) {
  58. $this->_set('description', $attributes['description']);
  59. }
  60. $statusHistory = [];
  61. if (isset($attributes['statusHistory'])) {
  62. foreach ($attributes['statusHistory'] AS $history) {
  63. $statusHistory[] = new Subscription\StatusDetails($history);
  64. }
  65. }
  66. $this->_attributes['statusHistory'] = $statusHistory;
  67. $transactionArray = [];
  68. if (isset($attributes['transactions'])) {
  69. foreach ($attributes['transactions'] AS $transaction) {
  70. $transactionArray[] = Transaction::factory($transaction);
  71. }
  72. }
  73. $this->_attributes['transactions'] = $transactionArray;
  74. }
  75. /**
  76. * returns a string representation of the customer
  77. * @return string
  78. */
  79. public function __toString()
  80. {
  81. $excludedAttributes = ['statusHistory'];
  82. $displayAttributes = [];
  83. foreach($this->_attributes as $key => $val) {
  84. if (!in_array($key, $excludedAttributes)) {
  85. $displayAttributes[$key] = $val;
  86. }
  87. }
  88. return __CLASS__ . '[' .
  89. Util::attributesToString($displayAttributes) .']';
  90. }
  91. // static methods redirecting to gateway
  92. public static function create($attributes)
  93. {
  94. return Configuration::gateway()->subscription()->create($attributes);
  95. }
  96. public static function find($id)
  97. {
  98. return Configuration::gateway()->subscription()->find($id);
  99. }
  100. public static function search($query)
  101. {
  102. return Configuration::gateway()->subscription()->search($query);
  103. }
  104. public static function fetch($query, $ids)
  105. {
  106. return Configuration::gateway()->subscription()->fetch($query, $ids);
  107. }
  108. public static function update($subscriptionId, $attributes)
  109. {
  110. return Configuration::gateway()->subscription()->update($subscriptionId, $attributes);
  111. }
  112. public static function retryCharge($subscriptionId, $amount = null, $submitForSettlement = false)
  113. {
  114. return Configuration::gateway()->subscription()->retryCharge($subscriptionId, $amount, $submitForSettlement);
  115. }
  116. public static function cancel($subscriptionId)
  117. {
  118. return Configuration::gateway()->subscription()->cancel($subscriptionId);
  119. }
  120. }
  121. class_alias('Braintree\Subscription', 'Braintree_Subscription');