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

Reply via email to