Version 4.0.13.1
This commit is contained in:
1 parent
f9e857d255
commit
c6a86f0d9b
7517 files changed
+597400
-668041
No files matched your search
@@ -0,0 +1,225 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 2Checkout Gateway
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @subpackage Nexus
|
||||
* @since 17 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\nexus\Gateway;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* 2Checkout Gateway
|
||||
*/
|
||||
class _TwoCheckout extends \IPS\nexus\Gateway
|
||||
{
|
||||
/* !Features (Each gateway will override) */
|
||||
|
||||
const SUPPORTS_REFUNDS = TRUE;
|
||||
const SUPPORTS_PARTIAL_REFUNDS = TRUE;
|
||||
|
||||
/* !Payment Gateway */
|
||||
|
||||
/**
|
||||
* Authorize
|
||||
*
|
||||
* @param \IPS\nexus\Transaction $transaction Transaction
|
||||
* @param array|\IPS\nexus\Customer\CreditCard $values Values from form OR a stored card object if this gateway supports them
|
||||
* @param \IPS\nexus\Fraud\MaxMind\Request|NULL $maxMind *If* MaxMind is enabled, the request object will be passed here so gateway can additional data before request is made
|
||||
* @return \IPS\DateTime|NULL Auth is valid until or NULL to indicate auth is good forever
|
||||
* @throws \LogicException Message will be displayed to user
|
||||
*/
|
||||
public function auth( \IPS\nexus\Transaction $transaction, $values, \IPS\nexus\Fraud\MaxMind\Request $maxMind = NULL )
|
||||
{
|
||||
$settings = json_decode( $this->settings, TRUE );
|
||||
$transaction->save();
|
||||
|
||||
/* Basic Data */
|
||||
$data = array(
|
||||
'sid' => $settings['sid'],
|
||||
'nexustransactionid' => $transaction->id,
|
||||
'mode' => '2CO',
|
||||
'currency_code' => $transaction->amount->currency,
|
||||
'purchase_step' => 'payment-method',
|
||||
'x_receipt_link_url' => \IPS\Settings::i()->base_url . 'applications/nexus/interface/gateways/2checkout.php',
|
||||
'card_holder_name' => $transaction->member->cm_name,
|
||||
'street_address' => $transaction->invoice->billaddress->addressLines[0],
|
||||
'street_address2' => isset( $transaction->invoice->billaddress->addressLines[1] ) ? $transaction->invoice->billaddress->addressLines[1] : '',
|
||||
'city' => $transaction->invoice->billaddress->city,
|
||||
'state' => $transaction->invoice->billaddress->region,
|
||||
'zip' => $transaction->invoice->billaddress->postalCode,
|
||||
'country' => $transaction->invoice->billaddress->country,
|
||||
'email' => $transaction->member->email,
|
||||
'phone' => $transaction->member->cm_phone
|
||||
);
|
||||
|
||||
/* Shipping address */
|
||||
if ( $transaction->invoice->shipaddress )
|
||||
{
|
||||
$data['ship_name'] = $transaction->member->cm_name;
|
||||
$data['ship_street_address'] = $transaction->invoice->shipaddress->addressLines[0];
|
||||
if ( isset( $transaction->invoice->shipaddress->addressLines[1] ) )
|
||||
{
|
||||
$data['ship_street_address2'] = $transaction->invoice->shipaddress->addressLines[1];
|
||||
}
|
||||
$data['ship_city'] = $transaction->invoice->shipaddress->city;
|
||||
$data['ship_state'] = $transaction->invoice->shipaddress->region;
|
||||
$data['ship_zip'] = $transaction->invoice->shipaddress->postalCode;
|
||||
$data['ship_country'] = $transaction->invoice->shipaddress->country;
|
||||
}
|
||||
|
||||
/* Items */
|
||||
if ( $transaction->amount->amount == $transaction->invoice->total->amount )
|
||||
{
|
||||
$summary = $transaction->invoice->summary();
|
||||
|
||||
$k = 0;
|
||||
foreach ( $summary['items'] as $item )
|
||||
{
|
||||
$data["li_{$k}_type"] = $item->price->amount >= 0 ? 'product' : 'coupon';
|
||||
$data["li_{$k}_name"] = $item->name;
|
||||
$data["li_{$k}_quantity"] = $item->quantity;
|
||||
$data["li_{$k}_price"] = abs( $item->price->amount );
|
||||
$data["li_{$k}_tangible"] = $item->physical ?'Y' : 'N';
|
||||
|
||||
$d = 0;
|
||||
foreach ( $item->details as $label => $value )
|
||||
{
|
||||
$data["li_{$k}_option_{$d}_name"] = $label;
|
||||
$data["li_{$k}_option_{$d}_value"] = $value;
|
||||
$d++;
|
||||
}
|
||||
|
||||
$k++;
|
||||
}
|
||||
|
||||
foreach ( $summary['shipping'] as $shipping )
|
||||
{
|
||||
$data["li_{$k}_type"] = 'shipping';
|
||||
$data["li_{$k}_name"] = $shipping->name;
|
||||
$data["li_{$k}_quantity"] = 1;
|
||||
$data["li_{$k}_price"] = $shipping->price->amount;
|
||||
$data["li_{$k}_tangible"] = 'Y';
|
||||
|
||||
$k++;
|
||||
}
|
||||
|
||||
foreach ( $summary['tax'] as $tax )
|
||||
{
|
||||
$data["li_{$k}_type"] = 'tax';
|
||||
$data["li_{$k}_name"] = $tax['name'];
|
||||
$data["li_{$k}_quantity"] = 1;
|
||||
$data["li_{$k}_price"] = $tax['amount']->amount;
|
||||
$data["li_{$k}_tangible"] = 'N';
|
||||
|
||||
$d = 0;
|
||||
foreach ( $item['details'] as $label => $value )
|
||||
{
|
||||
$data["li_{$k}_option_{$d}_name"] = $label;
|
||||
$data["li_{$k}_option_{$d}_value"] = $value;
|
||||
$d++;
|
||||
}
|
||||
|
||||
$k++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$data["li_0_type"] = 'product';
|
||||
$data["li_0_name"] = $transaction->member->language()->addToStack( 'partial_payment_desc', FALSE, array( 'sprintf' => array( $transaction->invoice->id ) ) );
|
||||
$data["li_0_quantity"] = 1;
|
||||
$data["li_0_price"] = $transaction->amount->amount;
|
||||
$data["li_0_tangible"] = 'N';
|
||||
}
|
||||
|
||||
/* Test mode */
|
||||
if ( \IPS\NEXUS_TEST_GATEWAYS )
|
||||
{
|
||||
$data['demo'] = 'Y';
|
||||
}
|
||||
|
||||
\IPS\Output::i()->redirect( \IPS\Http\Url::external( 'https://www.2checkout.com/checkout/purchase' )->setQueryString( $data ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Refund
|
||||
*
|
||||
* @param \IPS\nexus\Transaction $transaction Transaction to be refunded
|
||||
* @param float|NULL $amount Amount to refund (NULL for full amount - always in same currency as transaction)
|
||||
* @return mixed Gateway reference ID for refund, if applicable
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function refund( \IPS\nexus\Transaction $transaction, $amount = NULL )
|
||||
{
|
||||
$data = array(
|
||||
'sale_id' => $transaction->gw_id,
|
||||
'category' => 5,
|
||||
'comment' => 'Nexus'
|
||||
);
|
||||
|
||||
if ( $amount )
|
||||
{
|
||||
$data['amount'] = $amount;
|
||||
$data['currency'] = 'vendor';
|
||||
}
|
||||
|
||||
$settings = json_decode( $this->settings, TRUE );
|
||||
$response = \IPS\Http\Url::external( 'https://www.2checkout.com/api/sales/refund_invoice' )->request()->login( $settings['api_username'], $settings['api_password'] )->post( $data )->decodeJson();
|
||||
|
||||
if ( $response['response_code'] != 'OK' )
|
||||
{
|
||||
throw new \LogicException( $response['response_message'] );
|
||||
}
|
||||
}
|
||||
|
||||
/* !ACP Configuration */
|
||||
|
||||
/**
|
||||
* Settings
|
||||
*
|
||||
* @param \IPS\Helpers\Form $form The form
|
||||
* @return void
|
||||
*/
|
||||
public function settings( &$form )
|
||||
{
|
||||
$settings = json_decode( $this->settings, TRUE );
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\Text( 'twocheckout_api_username', $settings['api_username'], TRUE ) );
|
||||
$form->add( new \IPS\Helpers\Form\Text( 'twocheckout_api_password', $settings['api_password'], TRUE ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Settings
|
||||
*
|
||||
* @param array $settings Settings
|
||||
* @return array
|
||||
* @throws \InvalidArgumentException
|
||||
*/
|
||||
public function testSettings( $settings )
|
||||
{
|
||||
$response = \IPS\Http\Url::external( 'https://www.2checkout.com/api/acct/detail_company_info' )->request()->setHeaders( array( 'Accept' => 'application/json' ) )->login( $settings['api_username'], $settings['api_password'] )->get()->decodeJson();
|
||||
if ( isset( $response['errors'] ) )
|
||||
{
|
||||
throw new \LogicException( $response['errors'][0]['message'] );
|
||||
}
|
||||
if ( $response['response_code'] != 'OK' )
|
||||
{
|
||||
throw new \LogicException( $response['response_message'] );
|
||||
}
|
||||
|
||||
$settings['sid'] = $response['vendor_company_info']['vendor_id'];
|
||||
$settings['word'] = $response['vendor_company_info']['secret_word'];
|
||||
return $settings;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user