pear:packages:payment_process2

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
pear:packages:payment_process2 [2009/02/26 00:25] clockwerxpear:packages:payment_process2 [2009/05/06 07:09] clockwerx
Line 5: Line 5:
 doconnor, dbezborodow doconnor, dbezborodow
  
-==== PEPR proposal ==== +===== Migrating ===== 
-  <del>Get approval for open sourcing work</del>+To migrate code which uses [[pear:packages:payment_process]] 
 +  - Find and replace ''Payment_Process'' to ''Payment_Process2'' 
 +  - Find and replace ''Payment/Process'' to ''Payment/Process2'' 
 +  - If you set up any driver specific options with curl, you will need to swap to injecting a preconfigured instance of [[pear:packages:HTTP_Request2]]. 
 +<code php> 
 +$payment = Payment_Process::factory('MyDriver'); 
 +$payment->setOption('curl_options', array('monkeys' => true)); 
 +</code>
  
 +becomes
 +<code php>
 +$adapter = new HTTP_Request2_Adapter_Curl();
 +$adapter->setOption('monkies', true);
  
 +$request = new HTTP_Request2($adapter);
 +
 +$payment = Payment_Process2::factory('MyDriver', $request);
 +</code>
 +
 +===== Implementing a driver =====
 +You need to implement two classes and some unit tests.
 +
 +The first is ''Payment_Process2_YourDriver'', which should implement all of the methods in the interface''Payment_Process2_Driver''.
 +
 +The second is ''Payment_Process2_Result_YourDriver'', which should implement all of the methods in the interface''Payment_Process2_Result_Driver''.
 +
 +The interface documentation should provide more detail on this.
 +
 +===== Testing a driver =====
 +You want to build a small script pointed at a test server which ''var_dump()''s out results. This is used to quickly verify that it actually works. You take that test data and save it in ''tests/data/Driver/foo.html''
 +
 +To test the driver; implement coverage of:
 +  - It calls the HTTP_Request object to send off a request via ''process()''
 +  - It reads the response from the server and makes a result object via ''process()''
 +  - It renders a request correctly via ''process()''
 +  - It builds any request data correctly  via ''prepareRequestData()''
 +
 +<code php>
 +public function testShouldSendPaymentsAndReturnResults() {
 +    $response = new HTTP_Request2_Response('HTTP/1.1 200 OK');
 +    $response->appendBody(file_get_contents(dirname(__FILE__) . '/tests/data/Driver/foo.html'));
 +
 +    $adapter = new HTTP_Request2_Adapter_Mock();
 +    $adapter->addResponse($response);
 +
 +    $request = new HTTP_Request2($adapter);
 +
 +    $payment = Payment_Process2::factory('Driver', $request);
 +
 +    $result = $payment->process();
 +
 +    $this->assertSame($expected_code, $result->getCode());
 +    $this->assertSame($expected_message, $result->getMessage());
 +}
 +</code>
 +
 +You also want very good coverage of your result object, which a variety of test cases like:
 +<code php>
 +public function testShouldParseDataAndPopulateResultObject() {
 +    $data = file_get_contents(dirname(__FILE__) . '/tests/data/Driver/foo.html');
 +
 +    $fake_driver = new Payment_Process2_YourDriver(new HTTP_Request2());
 +    $result = new Payment_Process2_Result_YourDriver($data, $fake_driver);
 +
 +    $result->parse();
 +
 +    $this->assertSame($expected_code, $result->getCode());
 +    $this->assertSame($expected_message, $result->getMessage());
 +}
 +</code>
 +
 +
 +
 +===== Roadmap =====
 ==== 0.1.0 ==== ==== 0.1.0 ====
 +  * <del>Get approval for open sourcing work</del>
   * <del>Swap to PHP5, HTTP_Request2</del>   * <del>Swap to PHP5, HTTP_Request2</del>
   * <del>Swap to Interfaces as needed</del>   * <del>Swap to Interfaces as needed</del>
 +  * <del>Dropping Paycom/Epoch driver</del> Dropped
 +    * Support people won't give access to test environment
 +    * doconnor has mailed other open source projects which provide paycom drivers to see if he can get test data
 +  * <del>Swap to Exceptions as needed</del> Done.
 +
 +
 +
 +==== 0.2.0 ====
 +  * Add a new driver for an Australian Bank (Payment_Process2_ANZ) ((needs clearing))
 +  * <del>Add a new driver for Paygea (Payment_Process2_Paygea)</del> Licences
 +  * Fix protected / public properties - dbezborodow
   * Unit test coverage (mocked out) for all drivers   * Unit test coverage (mocked out) for all drivers
     * Running into problems here with many providers     * Running into problems here with many providers
-      * TrustCommerce seems helpful, speaking to support people, rpeake helping lots!+      * TrustCommerce - simple coverage done.
       * Paypal - TBA       * Paypal - TBA
-      * Transfirst - TBA +      * Transfirst - asking original author 
-      * Linkpoint uses DTA((A popular german banking xml format)), so [[pear::packages:payment_data]] / [[mschutte]] might be able to help+      * Linkpoint - TBA
       * Bibit - TBA       * Bibit - TBA
       * AuthorizeNet - TBA       * AuthorizeNet - TBA
-    * Lots of failures, errors and E_NOTICEs from existing drivers+    * <del>Lots of errors and E_NOTICEs from existing drivers</del> 
 +    * <del>Lots of</del> Some failures in test coverage 
 +    * Test coverage is not extensive!
     * Need to improve the test case loaders and what have you     * Need to improve the test case loaders and what have you
-  Dropping Paycom/Epoch driver +    <del>Swap to class constants.</del> 
-    * Support people won't give access to test environment +=== API changes === 
-    * doconnor has mailed other open source projects which provide paycom drivers to see if he can get test data+Anything which used 
 +<code php> 
 +PAYMENT_PROCESS_SOMETHING_CONSTANT 
 +</code> 
 +will be  
 +<code php> 
 +Payment_Process2::SOMETHING_CONSTANT 
 +</code>
  
 +Also; setPayment() is now a lot more angry about things.
  
 +Finally; Payment_Process2_Type::isValid() doesn't exist anymore.
  
 +==== 0.3.0 ====
 +  * <del>Add ANZ driver</del>
 +  * Fix typeMapping concept
 +  * Fix cvvCode concept in results
 +  * Use reflection where appropriate
 +<code php>
 +<?php
  
-==== 0.2.0 ==== +$process Payment_Process2::factory('ANZ')
-  * Add a new driver for an Australian Bank (Payment_Process2_ANZ) ((needs clearing)+$process->setLogin('Damo'); 
-  * <del>Add a new driver for Paygea (Payment_Process2_Paygea)</del> Licences+$process->setPassword('secret');
  
-==== 0.3.0 ==== +$cc Payment_Process2_Type::factory('CreditCard'); 
-  * Swap to Exceptions as needed+$cc->setType(Payment_Process2_Type_CreditCard::MASTERCARD); 
 +$cc->setCardNumber('5123456789012346'); 
 +$cc->setExpDate('05/2011'); 
 +$cc->setCvv('123'); 
 + 
 +$action Payment_Process2_Action::factory($process, 'Normal'); 
 +$action->setPayment($cc); 
 +$action->setOrderInfo('123432'); 
 +$action->setTransactionReference('123432/1'); 
 + 
 +$result $process->process($action); 
 + 
 +/* 
 + 
 +Responsibilities: 
 + 
 +  Processor: 
 +    Knows the endpoint, prepares the request from data. 
 +    Knows credentials. 
 +    Has a translator for the action types. 
 +    Has a translator for the base fields such as credentials. 
 +    Has a process() method that: 
 +      Passes response data into a Result and call the parser method. 
 +      Returns the Result. 
 + 
 +  Action: 
 +    Has a translator for the data 
 +    Prepares data. 
 + 
 +  Translator: 
 +    Very generic. Is never extended so that we don't litter 
 +      the class tree; instead, we set up the translator in 
 +      constructor methods. 
 + 
 +  Result: 
 +    Has a parser that transforms the response into data that is given to it 
 +      by the processor. 
 +    Has a translator for the result data. 
 + 
 +*/ 
 +</code>
  
          
pear/packages/payment_process2.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1