Update Paypal invokeApi to only throw exceptions.
authoreileen <emcnaughton@wikimedia.org>
Tue, 10 Dec 2019 11:11:41 +0000 (00:11 +1300)
committereileen <emcnaughton@wikimedia.org>
Wed, 11 Dec 2019 10:53:58 +0000 (23:53 +1300)
commit5a57460ff9f6dd1c49f20ec77d742ab8c7daad47
tree1eb2004b19227d34bba241b35dbdf8c1a01c14d6
parentee3bab5603fcac14174948ed640fa92be8798c83
Update Paypal invokeApi to only throw exceptions.

Currently invokeAPI will return an error for a curl function and throw a processorException for an outcome other than success.

In just about every instance where it is called the Core_Error is converted into an exception anyway - this
can all be cleaned up as a follow up. The exceptions are

doQuery -  called by doPayment
doDirectPayment - this is called by doPayment which converts it into an exception. Calling doDirectPayment directly was deprecated in 4.6
createRecurringPayments - called by doExpressCheckout which in already throws exceptions in other scenarios,
updateSubscriptionBillingInfo - we can update the one place that calls this in core as a follow up like https://github.com/civicrm/civicrm-core/pull/15676

However, note that an exception was already thrown in all these places in the more common error scenario of the action not succeeding as opposed
to the rare curl error scenario

Follow ons to consider
1) introduce more nuance into PaymentProcessorExceptions - extend the exception class with PaymentProcessorConfigException, PaymentProcessingException or similar to differentiate
2) remove all the handling for invokeApi to have returned an error object.
3) fix the code that calls updateSubscriptionBillingInfo
4) ensure docs reflect that doPayment should throw an exception. AFAIK we have not yet documented other 'do' functions & I'd prefer to stdise them first
CRM/Core/Payment/PayPalImpl.php