60 lines
1.4 KiB
JavaScript
60 lines
1.4 KiB
JavaScript
import { CartBaseController } from "./cart_base_controller";
|
|
|
|
/*
|
|
* Replaces checkout.js.
|
|
*
|
|
* When the customer is redirected back from the approval URL, there's
|
|
* three params attached to the URL. We need paymentId and PayerID to
|
|
* execute the payment and later capture it via IPN. The token can be
|
|
* discarded.
|
|
*/
|
|
export default class extends CartBaseController {
|
|
async connect() {
|
|
if (this.params.PayerID === undefined) return;
|
|
|
|
this.site = window.site;
|
|
this.element.innerHTML = this.site.i18n.cart.layouts.paypal.confirming;
|
|
|
|
fetch(this.executeURL)
|
|
.then(
|
|
(r) =>
|
|
(this.element.innerHTML =
|
|
this.site.i18n.cart.layouts.paypal[r.ok ? "confirmed" : "failure"])
|
|
)
|
|
.catch(
|
|
(e) =>
|
|
(this.element.innerHTML = this.site.i18n.cart.layouts.paypal.failure)
|
|
);
|
|
}
|
|
|
|
/*
|
|
* Convert URL params to Object
|
|
*
|
|
* @return [Object]
|
|
*/
|
|
get params() {
|
|
if (this._params) return this._params;
|
|
|
|
this._params = Object.fromEntries(
|
|
decodeURIComponent(window.location.search.replace("?", ""))
|
|
.split("&")
|
|
.map((x) => x.split("="))
|
|
);
|
|
|
|
return this._params;
|
|
}
|
|
|
|
/*
|
|
* URL to contact the store and execute the payment.
|
|
*/
|
|
get executeURL() {
|
|
return [
|
|
window.spree.host,
|
|
"paypal",
|
|
"execute",
|
|
this.params.orderId,
|
|
this.params.paymentId,
|
|
this.params.PayerID,
|
|
].join("/");
|
|
}
|
|
}
|