jenkins-bot has submitted this change and it was merged. Change subject: Payments API for PayPal ......................................................................
Payments API for PayPal TODO: * Implement stuff. See fundraising-tools/audit/paypal/paypal_api.py . Could be just validate() for now. Change-Id: Ie75a689581ca46badd630949f06ac102f1428690 --- M PaymentProviders/PayPal/Job.php A PaymentProviders/PayPal/PayPalPaymentsAPI.php A PaymentProviders/PayPal/Tests/MockPayPalPaymentsAPI.php M PaymentProviders/PayPal/Tests/config_test.yaml M SmashPig.yaml 5 files changed, 47 insertions(+), 17 deletions(-) Approvals: Awight: Looks good to me, approved jenkins-bot: Verified diff --git a/PaymentProviders/PayPal/Job.php b/PaymentProviders/PayPal/Job.php index fd38d57..90dd9a2 100644 --- a/PaymentProviders/PayPal/Job.php +++ b/PaymentProviders/PayPal/Job.php @@ -14,27 +14,14 @@ // Verify message with paypal. - $url = $this->config->val( 'endpoints/listener/postback-url' ); - // XXX Why does everything get made into objects? $request = (array)$this->payload; $request['cmd'] = '_notify-validate'; - $ch = curl_init(); - curl_setopt( $ch, CURLOPT_URL, - $this->config->val( 'endpoints/listener/postback-url' ) ); - curl_setopt( $ch, CURLOPT_HEADER, 0 ); - curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 0 ); - curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); - curl_setopt( $ch, CURLOPT_POST, 1 ); - curl_setopt( $ch, CURLOPT_POSTFIELDS, $request ); - - $data = curl_exec( $ch ); - - // FIXME test server keeps returning INVALID - // if ( $data !== 'VERIFIED' ) { - // throw new \Exception( 'PayPal message verify fail: ' . $data ); - // } + $valid = $this->config->object( 'api' )->validate( $request ); + if ( ! $valid ) { + throw new \Exception( 'PayPal message verification failed' ); + } // Determine message type. diff --git a/PaymentProviders/PayPal/PayPalPaymentsAPI.php b/PaymentProviders/PayPal/PayPalPaymentsAPI.php new file mode 100644 index 0000000..9a8520a --- /dev/null +++ b/PaymentProviders/PayPal/PayPalPaymentsAPI.php @@ -0,0 +1,28 @@ +<?php namespace SmashPig\PaymentProviders\PayPal; + +use SmashPig\Core\Configuration; + +class PayPalPaymentsAPI { + + // Simply a function to override in testing. + protected function curl ( $ch ) { + return curl_exec( $ch ); + } + + /** + * @return boolean + */ + function validate( $post_fields ) { + $url = Configuration::getDefaultConfig() + ->val( 'endpoints/listener/postback-url' ); + $ch = curl_init(); + curl_setopt( $ch, CURLOPT_URL, $url ); + curl_setopt( $ch, CURLOPT_HEADER, 0 ); + curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 0 ); + curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); + curl_setopt( $ch, CURLOPT_POST, 1 ); + curl_setopt( $ch, CURLOPT_POSTFIELDS, $post_fields ); + // TODO we can put VERIFIED in config and generalize this + return $this->curl( $ch ) === 'VERIFIED'; + } +} diff --git a/PaymentProviders/PayPal/Tests/MockPayPalPaymentsAPI.php b/PaymentProviders/PayPal/Tests/MockPayPalPaymentsAPI.php new file mode 100644 index 0000000..da3fd0c --- /dev/null +++ b/PaymentProviders/PayPal/Tests/MockPayPalPaymentsAPI.php @@ -0,0 +1,9 @@ +<?php namespace SmashPig\PaymentProviders\PayPal\Tests; + +use SmashPig\PaymentProviders\PayPal\PayPalPaymentsAPI; + +class MockPayPalPaymentsAPI extends PayPalPaymentsAPI { + protected function curl () { + return 'VERIFIED'; + } +} diff --git a/PaymentProviders/PayPal/Tests/config_test.yaml b/PaymentProviders/PayPal/Tests/config_test.yaml index f3da12e..233ac68 100644 --- a/PaymentProviders/PayPal/Tests/config_test.yaml +++ b/PaymentProviders/PayPal/Tests/config_test.yaml @@ -1,4 +1,7 @@ paypal: + api: + class: SmashPig\PaymentProviders\PayPal\Tests\MockPayPalPaymentsAPI + data-store: verified: class: PHPQueue\Backend\PDO diff --git a/SmashPig.yaml b/SmashPig.yaml index 4f7ea35..544a529 100644 --- a/SmashPig.yaml +++ b/SmashPig.yaml @@ -352,6 +352,9 @@ charset: iso-8859-1 paypal: + api: + class: SmashPig\PaymentProviders\PayPal\PayPalPaymentsAPI + endpoints: listener: class: SmashPig\PaymentProviders\PayPal\Listener -- To view, visit https://gerrit.wikimedia.org/r/306601 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ie75a689581ca46badd630949f06ac102f1428690 Gerrit-PatchSet: 12 Gerrit-Project: wikimedia/fundraising/SmashPig Gerrit-Branch: master Gerrit-Owner: Awight <awi...@wikimedia.org> Gerrit-Reviewer: Awight <awi...@wikimedia.org> Gerrit-Reviewer: Cdentinger <cdentin...@wikimedia.org> Gerrit-Reviewer: Ejegg <eeggles...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits