PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.13.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.13.0
4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / Models / Checkout.php
surecart / app / src / Models Last commit date
Traits 2 years ago AbandonedCheckout.php 3 years ago AbandonedCheckoutProtocol.php 3 years ago Account.php 3 years ago AccountPortalSession.php 3 years ago Activation.php 3 years ago ApiToken.php 3 years ago BalanceTransaction.php 3 years ago Brand.php 3 years ago Bump.php 3 years ago BuyLink.php 3 years ago CancellationAct.php 3 years ago CancellationReason.php 3 years ago Charge.php 3 years ago Checkout.php 2 years ago Collection.php 3 years ago Component.php 3 years ago Coupon.php 3 years ago Customer.php 2 years ago CustomerLink.php 3 years ago CustomerNotificationProtocol.php 3 years ago DatabaseModel.php 2 years ago Download.php 3 years ago Event.php 3 years ago Form.php 3 years ago Fulfillment.php 3 years ago FulfillmentItem.php 3 years ago IncomingWebhook.php 2 years ago Integration.php 3 years ago Invoice.php 3 years ago License.php 3 years ago LineItem.php 2 years ago ManualPaymentMethod.php 3 years ago Media.php 3 years ago Model.php 2 years ago ModelInterface.php 3 years ago Order.php 3 years ago OrderProtocol.php 3 years ago PaymentIntent.php 3 years ago PaymentMethod.php 3 years ago Period.php 3 years ago PortalProtocol.php 3 years ago PortalSession.php 3 years ago Price.php 3 years ago Processor.php 3 years ago Product.php 2 years ago ProductCollection.php 2 years ago ProductGroup.php 2 years ago ProductMedia.php 3 years ago Promotion.php 3 years ago ProvisionalAccount.php 3 years ago Purchase.php 3 years ago Refund.php 3 years ago RegisteredWebhook.php 2 years ago ReturnItem.php 2 years ago ReturnReason.php 2 years ago ReturnRequest.php 2 years ago ShippingMethod.php 3 years ago ShippingProfile.php 3 years ago ShippingProtocol.php 3 years ago ShippingRate.php 3 years ago ShippingZone.php 3 years ago Statistic.php 3 years ago Subscription.php 2 years ago SubscriptionProtocol.php 3 years ago TaxProtocol.php 3 years ago TaxRegistration.php 3 years ago TaxZone.php 3 years ago Upload.php 3 years ago User.php 2 years ago Variant.php 2 years ago VariantOption.php 2 years ago VariantValue.php 2 years ago VerificationCode.php 3 years ago Webhook.php 2 years ago WebhookRegistration.php 2 years ago
Checkout.php
188 lines
1 <?php
2
3 namespace SureCart\Models;
4
5 use SureCart\Models\Traits\HasCustomer;
6 use SureCart\Models\Traits\HasSubscriptions;
7 use SureCart\Models\LineItem;
8 use SureCart\Models\Traits\CanFinalize;
9 use SureCart\Models\Traits\HasDiscount;
10 use SureCart\Models\Traits\HasPaymentIntent;
11 use SureCart\Models\Traits\HasPaymentMethod;
12 use SureCart\Models\Traits\HasProcessorType;
13 use SureCart\Models\Traits\HasPurchases;
14 use SureCart\Models\Traits\HasShippingAddress;
15
16 /**
17 * Order model
18 */
19 class Checkout extends Model {
20 use HasCustomer,
21 HasSubscriptions,
22 HasDiscount,
23 HasShippingAddress,
24 HasPaymentIntent,
25 HasPaymentMethod,
26 HasPurchases,
27 CanFinalize,
28 HasProcessorType;
29
30 /**
31 * Rest API endpoint
32 *
33 * @var string
34 */
35 protected $endpoint = 'checkouts';
36
37 /**
38 * Object name
39 *
40 * @var string
41 */
42 protected $object_name = 'checkout';
43
44 /**
45 * Need to pass the processor type on create
46 *
47 * @param array $attributes Optional attributes.
48 * @param string $type stripe, paypal, etc.
49 */
50 public function __construct( $attributes = [], $type = '' ) {
51 $this->processor_type = $type;
52 parent::__construct( $attributes );
53 }
54
55 /**
56 * Set attributes during write actions.
57 *
58 * @return void
59 */
60 protected function setWriteAttributes() {
61 $this->setAttribute( 'ip_address', $this->getIPAddress() );
62 if ( isset( $_COOKIE['sc_click_id'] ) ) {
63 $this->setAttribute( 'last_click', $_COOKIE['sc_click_id'] );
64 }
65 }
66
67 /**
68 * Create a new model
69 *
70 * @param array $attributes Attributes to create.
71 *
72 * @return $this|\WP_Error|false
73 */
74 protected function create( $attributes = [] ) {
75 $this->setWriteAttributes();
76 return parent::create( $attributes );
77 }
78
79 /**
80 * Update the model
81 *
82 * @param array $attributes Attributes to create.
83 *
84 * @return $this|\WP_Error|false
85 */
86 protected function update( $attributes = [] ) {
87 $this->setWriteAttributes();
88 return parent::update( $attributes );
89 }
90
91 /**
92 * Get the IP address of the user
93 *
94 * TOD0: Move this to a helper class.
95 *
96 * @return string
97 */
98 protected function getIPAddress() {
99 return $_SERVER['HTTP_CLIENT_IP'] ?? $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'] ?? '';
100 }
101
102 /**
103 * Set the product attribute
104 *
105 * @param object $value Product properties.
106 * @return void
107 */
108 public function setLineItemsAttribute( $value ) {
109 $this->setCollection( 'line_items', $value, LineItem::class );
110 }
111
112 /**
113 * Finalize the session for checkout.
114 *
115 * @return $this|\WP_Error
116 */
117 protected function manuallyPay() {
118 if ( $this->fireModelEvent( 'manually_paying' ) === false ) {
119 return false;
120 }
121
122 if ( empty( $this->attributes['id'] ) ) {
123 return new \WP_Error( 'not_saved', 'Please create the checkout session.' );
124 }
125
126 $finalized = \SureCart::request(
127 $this->endpoint . '/' . $this->attributes['id'] . '/manually_pay/',
128 [
129 'method' => 'PATCH',
130 'query' => $this->query,
131 'body' => [
132 $this->object_name => $this->getAttributes(),
133 ],
134 ]
135 );
136
137 if ( is_wp_error( $finalized ) ) {
138 return $finalized;
139 }
140
141 $this->resetAttributes();
142
143 $this->fill( $finalized );
144
145 $this->fireModelEvent( 'manually_paid' );
146
147 return $this;
148 }
149
150 /**
151 * Cancel an checkout
152 *
153 * @return $this|\WP_Error
154 */
155 protected function cancel() {
156 if ( $this->fireModelEvent( 'cancelling' ) === false ) {
157 return false;
158 }
159
160 if ( empty( $this->attributes['id'] ) ) {
161 return new \WP_Error( 'not_saved', 'Please create the order.' );
162 }
163
164 $cancelled = $this->makeRequest(
165 [
166 'method' => 'PATCH',
167 'query' => $this->query,
168 'body' => [
169 $this->object_name => $this->getAttributes(),
170 ],
171 ],
172 $this->endpoint . '/' . $this->attributes['id'] . '/cancel/'
173 );
174
175 if ( is_wp_error( $cancelled ) ) {
176 return $cancelled;
177 }
178
179 $this->resetAttributes();
180
181 $this->fill( $cancelled );
182
183 $this->fireModelEvent( 'cancelled' );
184
185 return $this;
186 }
187 }
188