mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-13 10:22:42 +01:00
7a5f622820
Summary: This has no real behavioral changes (except better error handling), it just factors things out to be a bit cleaner. In particular: - Move more shared form behaviors into the common JS form component. - Move more error handling into shared pathways. - Make the specialized Stripe / Balanced methods do less work. This needs some more polish for nontrival errors (especially on the Balanced side) but none of the error behavior is worse than it was and a lot of it is much better. Ref T2787. Test Plan: Hit all invalid form errors, added valid payment methods with Stripe and Balacned. Reviewers: btrahan, chad Reviewed By: btrahan CC: aran Maniphest Tasks: T2787 Differential Revision: https://secure.phabricator.com/D5771
140 lines
3.3 KiB
PHP
140 lines
3.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @task addmethod Adding Payment Methods
|
|
*/
|
|
abstract class PhortunePaymentProvider {
|
|
|
|
|
|
/* -( Selecting Providers )------------------------------------------------ */
|
|
|
|
|
|
public static function getAllProviders() {
|
|
$objects = id(new PhutilSymbolLoader())
|
|
->setAncestorClass('PhortunePaymentProvider')
|
|
->loadObjects();
|
|
|
|
return mpull($objects, null, 'getProviderKey');
|
|
}
|
|
|
|
public static function getEnabledProviders() {
|
|
$providers = self::getAllProviders();
|
|
foreach ($providers as $key => $provider) {
|
|
if (!$provider->isEnabled()) {
|
|
unset($providers[$key]);
|
|
}
|
|
}
|
|
return $providers;
|
|
}
|
|
|
|
public static function getProvidersForAddPaymentMethod() {
|
|
$providers = self::getEnabledProviders();
|
|
foreach ($providers as $key => $provider) {
|
|
if (!$provider->canCreatePaymentMethods()) {
|
|
unset($providers[$key]);
|
|
}
|
|
}
|
|
return $providers;
|
|
}
|
|
|
|
abstract public function isEnabled();
|
|
|
|
final public function getProviderKey() {
|
|
return $this->getProviderType().'@'.$this->getProviderDomain();
|
|
}
|
|
|
|
|
|
/**
|
|
* Return a short string which uniquely identifies this provider's protocol
|
|
* type, like "stripe", "paypal", or "balanced".
|
|
*/
|
|
abstract public function getProviderType();
|
|
|
|
|
|
/**
|
|
* Return a short string which uniquely identifies the domain for this
|
|
* provider, like "stripe.com" or "google.com".
|
|
*
|
|
* This is distinct from the provider type so that protocols are not bound
|
|
* to a single domain. This is probably not relevant for payments, but this
|
|
* assumption burned us pretty hard with authentication and it's easy enough
|
|
* to avoid.
|
|
*/
|
|
abstract public function getProviderDomain();
|
|
|
|
abstract public function getPaymentMethodDescription();
|
|
abstract public function getPaymentMethodIcon();
|
|
abstract public function getPaymentMethodProviderDescription();
|
|
|
|
|
|
/**
|
|
* Determine of a provider can handle a payment method.
|
|
*
|
|
* @return bool True if this provider can apply charges to the payment
|
|
* method.
|
|
*/
|
|
abstract public function canHandlePaymentMethod(
|
|
PhortunePaymentMethod $method);
|
|
|
|
abstract protected function executeCharge(
|
|
PhortunePaymentMethod $payment_method,
|
|
PhortuneCharge $charge);
|
|
|
|
|
|
/* -( Adding Payment Methods )--------------------------------------------- */
|
|
|
|
|
|
/**
|
|
* @task addmethod
|
|
*/
|
|
public function canCreatePaymentMethods() {
|
|
return false;
|
|
}
|
|
|
|
|
|
/**
|
|
* @task addmethod
|
|
*/
|
|
public function translateCreatePaymentMethodErrorCode($error_code) {
|
|
throw new PhortuneNotImplementedException($this);
|
|
}
|
|
|
|
|
|
/**
|
|
* @task addmethod
|
|
*/
|
|
public function getCreatePaymentMethodErrorMessage($error_code) {
|
|
throw new PhortuneNotImplementedException($this);
|
|
}
|
|
|
|
|
|
/**
|
|
* @task addmethod
|
|
*/
|
|
public function validateCreatePaymentMethodToken(array $token) {
|
|
throw new PhortuneNotImplementedException($this);
|
|
}
|
|
|
|
|
|
/**
|
|
* @task addmethod
|
|
*/
|
|
public function createPaymentMethodFromRequest(
|
|
AphrontRequest $request,
|
|
PhortunePaymentMethod $method,
|
|
array $token) {
|
|
throw new PhortuneNotImplementedException($this);
|
|
}
|
|
|
|
|
|
/**
|
|
* @task addmethod
|
|
*/
|
|
public function renderCreatePaymentMethodForm(
|
|
AphrontRequest $request,
|
|
array $errors) {
|
|
throw new PhortuneNotImplementedException($this);
|
|
}
|
|
|
|
|
|
}
|