Version Notes
Verify signature on inbound IPNs
Add support for full screen invoices
Download this release
Release Info
Developer | James Piechota |
Extension | Yellow_Pay |
Version | 0.2.0 |
Comparing to | |
See all releases |
Code changes from version 0.1.7 to 0.2.0
- app/code/local/Yellow/Bitcoin/Block/Form/Bitcoin.php +72 -52
- app/code/local/Yellow/Bitcoin/Block/Fullscreen.php +47 -0
- app/code/local/Yellow/Bitcoin/Block/Fullscreen/Widget/Content.php +51 -0
- app/code/local/Yellow/Bitcoin/Block/Fullscreen/Widget/Footer.php +122 -0
- app/code/local/Yellow/Bitcoin/Block/Fullscreen/Widget/Header.php +56 -0
- app/code/local/Yellow/Bitcoin/Block/Status.php +29 -28
- app/code/local/Yellow/Bitcoin/Block/Widget.php +61 -62
- app/code/local/Yellow/Bitcoin/Helper/Data.php +37 -28
- app/code/local/Yellow/Bitcoin/Model/Bitcoin.php +606 -485
- app/code/local/Yellow/Bitcoin/Model/Http.php +48 -46
- app/code/local/Yellow/Bitcoin/Model/Ipn.php +59 -56
- app/code/local/Yellow/Bitcoin/Model/Resource/Ipn.php +79 -70
- app/code/local/Yellow/Bitcoin/Model/Resource/Ipn/Collection.php +32 -30
- app/code/local/Yellow/Bitcoin/controllers/IndexController.php +199 -110
- app/code/local/Yellow/Bitcoin/etc/config.xml +2 -2
- app/code/local/Yellow/Bitcoin/etc/system.xml +1 -1
- app/code/local/Yellow/Bitcoin/sql/bitcoin_setup/mysql4-install-0.1.0.php +7 -5
- app/code/local/Yellow/Bitcoin/sql/bitcoin_setup/mysql4-upgrade-0.1.0-0.1.1.php +3 -3
- app/design/frontend/base/default/layout/bitcoin.xml +27 -11
- app/design/frontend/base/default/template/bitcoin/form/bitcoin.phtml +4 -3
- app/design/frontend/base/default/template/bitcoin/form/logo.phtml +14 -0
- app/design/frontend/base/default/template/bitcoin/fullscreen.phtml +47 -0
- app/design/frontend/base/default/template/bitcoin/fullscreen/widget/content.phtml +56 -0
- app/design/frontend/base/default/template/bitcoin/fullscreen/widget/footer.phtml +36 -0
- app/design/frontend/base/default/template/bitcoin/fullscreen/widget/header.phtml +7 -0
- app/design/frontend/base/default/template/bitcoin/widget.phtml +50 -47
- app/etc/modules/Yellow_Bitcoin.xml +9 -9
- package.xml +6 -5
- skin/frontend/base/default/css/bitcoin.css +322 -0
- skin/frontend/base/default/images/bitcoin/bitcoin_accepted.png +0 -0
app/code/local/Yellow/Bitcoin/Block/Form/Bitcoin.php
CHANGED
@@ -1,62 +1,82 @@
|
|
1 |
<?php
|
2 |
-
/**
|
3 |
-
*
|
4 |
-
* The MIT License (MIT)
|
5 |
-
*
|
6 |
-
* Copyright (c) 2014 YellowPay.co
|
7 |
-
*
|
8 |
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
9 |
-
* of this software and associated documentation files (the "Software"), to deal
|
10 |
-
* in the Software without restriction, including without limitation the rights
|
11 |
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
12 |
-
* copies of the Software, and to permit persons to whom the Software is
|
13 |
-
* furnished to do so, subject to the following conditions:
|
14 |
-
*
|
15 |
-
* The above copyright notice and this permission notice shall be included in all
|
16 |
-
* copies or substantial portions of the Software.
|
17 |
-
*
|
18 |
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
19 |
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
20 |
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
21 |
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
22 |
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
23 |
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
24 |
-
* SOFTWARE.
|
25 |
-
*
|
26 |
-
**/
|
27 |
-
/**
|
28 |
-
* Block for Yellow Bitcoin payment method form
|
29 |
-
*/
|
30 |
-
class Yellow_Bitcoin_Block_Form_Bitcoin extends Mage_Payment_Block_Form
|
31 |
-
{
|
32 |
-
|
33 |
/**
|
34 |
-
* Instructions text
|
35 |
*
|
36 |
-
*
|
37 |
-
|
38 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
|
40 |
/**
|
41 |
-
* Block
|
42 |
*/
|
43 |
-
|
44 |
{
|
45 |
-
parent::_construct();
|
46 |
-
$this->setTemplate('bitcoin/form/bitcoin.phtml');
|
47 |
-
}
|
48 |
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
}
|
59 |
-
return $this->_instructions;
|
60 |
-
}
|
61 |
|
62 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
/**
|
|
|
3 |
*
|
4 |
+
* The MIT License (MIT)
|
5 |
+
*
|
6 |
+
* Copyright (c) 2014 YellowPay.co
|
7 |
+
*
|
8 |
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
9 |
+
* of this software and associated documentation files (the "Software"), to deal
|
10 |
+
* in the Software without restriction, including without limitation the rights
|
11 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
12 |
+
* copies of the Software, and to permit persons to whom the Software is
|
13 |
+
* furnished to do so, subject to the following conditions:
|
14 |
+
*
|
15 |
+
* The above copyright notice and this permission notice shall be included in all
|
16 |
+
* copies or substantial portions of the Software.
|
17 |
+
*
|
18 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
19 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
20 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
21 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
22 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
23 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
24 |
+
* SOFTWARE.
|
25 |
+
*
|
26 |
+
**/
|
27 |
|
28 |
/**
|
29 |
+
* Block for Yellow Bitcoin payment method form
|
30 |
*/
|
31 |
+
class Yellow_Bitcoin_Block_Form_Bitcoin extends Mage_Payment_Block_Form
|
32 |
{
|
|
|
|
|
|
|
33 |
|
34 |
+
/**
|
35 |
+
* Instructions text
|
36 |
+
*
|
37 |
+
* @var string
|
38 |
+
*/
|
39 |
+
protected $_instructions;
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Block construction. Set block template.
|
43 |
+
*/
|
44 |
+
protected function _construct()
|
45 |
+
{
|
46 |
+
$class = Mage::getConfig()->getBlockClassName('core/template');
|
47 |
+
|
48 |
+
$guide = "";
|
49 |
+
|
50 |
+
if(Mage::helper("bitcoin")->isFullScreen()){
|
51 |
+
$guide = new $class;
|
52 |
+
$guide->setTemplate("bitcoin/form/bitcoin.phtml");
|
53 |
+
$guide = $guide->toHtml();
|
54 |
+
}
|
55 |
+
|
56 |
+
$logo = new $class;
|
57 |
+
$logo->setTemplate('bitcoin/form/logo.phtml');
|
58 |
+
$this->setTemplate('bitcoin/form/bitcoin.phtml')
|
59 |
+
->setRedirectMessage(
|
60 |
+
Mage::helper('bitcoin')->__('You will be paid via Yellow')
|
61 |
+
)
|
62 |
+
->setMethodTitle('')
|
63 |
+
->setMethodLabelAfterHtml($logo->toHtml() . $guide);
|
64 |
+
|
65 |
+
return parent::_construct();
|
66 |
}
|
|
|
|
|
67 |
|
68 |
+
/**
|
69 |
+
* Get instructions text from config
|
70 |
+
*
|
71 |
+
* @return string
|
72 |
+
*/
|
73 |
+
public function getInstructions()
|
74 |
+
{
|
75 |
+
return;
|
76 |
+
if (is_null($this->_instructions)) {
|
77 |
+
$this->_instructions = $this->getMethod()->getInstructions();
|
78 |
+
}
|
79 |
+
return $this->_instructions;
|
80 |
+
}
|
81 |
+
|
82 |
+
}
|
app/code/local/Yellow/Bitcoin/Block/Fullscreen.php
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
*
|
5 |
+
* The MIT License (MIT)
|
6 |
+
*
|
7 |
+
* Copyright (c) 2014 YellowPay.co
|
8 |
+
*
|
9 |
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
10 |
+
* of this software and associated documentation files (the "Software"), to deal
|
11 |
+
* in the Software without restriction, including without limitation the rights
|
12 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
13 |
+
* copies of the Software, and to permit persons to whom the Software is
|
14 |
+
* furnished to do so, subject to the following conditions:
|
15 |
+
*
|
16 |
+
* The above copyright notice and this permission notice shall be included in all
|
17 |
+
* copies or substantial portions of the Software.
|
18 |
+
*
|
19 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
20 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
21 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
22 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
23 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
24 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
25 |
+
* SOFTWARE.
|
26 |
+
*
|
27 |
+
**/
|
28 |
+
class Yellow_Bitcoin_Block_Fullscreen extends Yellow_Bitcoin_Block_Widget
|
29 |
+
{
|
30 |
+
public function GetWidgetUrl()
|
31 |
+
{
|
32 |
+
$order_id = Mage::getSingleton('checkout/session') ->getLastRealOrderId();
|
33 |
+
$order = Mage::getModel("sales/order")->loadBYIncrementId($order_id);
|
34 |
+
if (!($order)
|
35 |
+
or !($payment = $order->getPayment())
|
36 |
+
or !($instance = $payment->getMethodInstance())
|
37 |
+
or ($instance->getCode() != 'bitcoin')
|
38 |
+
) {
|
39 |
+
return 'no payment';
|
40 |
+
}
|
41 |
+
if (Mage::getStoreConfig('payment/bitcoin/fullscreen') != 1 ) {
|
42 |
+
return 'disabled';
|
43 |
+
}
|
44 |
+
$invoice = $instance->getInvoiceData();
|
45 |
+
return $invoice['url'];
|
46 |
+
}
|
47 |
+
}
|
app/code/local/Yellow/Bitcoin/Block/Fullscreen/Widget/Content.php
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
*
|
5 |
+
* The MIT License (MIT)
|
6 |
+
*
|
7 |
+
* Copyright (c) 2014 YellowPay.co
|
8 |
+
*
|
9 |
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
10 |
+
* of this software and associated documentation files (the "Software"), to deal
|
11 |
+
* in the Software without restriction, including without limitation the rights
|
12 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
13 |
+
* copies of the Software, and to permit persons to whom the Software is
|
14 |
+
* furnished to do so, subject to the following conditions:
|
15 |
+
*
|
16 |
+
* The above copyright notice and this permission notice shall be included in all
|
17 |
+
* copies or substantial portions of the Software.
|
18 |
+
*
|
19 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
20 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
21 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
22 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
23 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
24 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
25 |
+
* SOFTWARE.
|
26 |
+
*
|
27 |
+
**/
|
28 |
+
class Yellow_Bitcoin_Block_Fullscreen_Widget_Content extends Yellow_Bitcoin_Block_Widget
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* create an invoice & return the url of it
|
32 |
+
* @return string
|
33 |
+
*/
|
34 |
+
public function GetWidgetUrl()
|
35 |
+
{
|
36 |
+
$order_id = Mage::getSingleton('checkout/session') ->getLastRealOrderId();
|
37 |
+
$order = Mage::getModel("sales/order")->loadByIncrementId($order_id);
|
38 |
+
if (!($order)
|
39 |
+
or !($payment = $order->getPayment())
|
40 |
+
or !($instance = $payment->getMethodInstance())
|
41 |
+
or ($instance->getCode() != 'bitcoin')
|
42 |
+
) {
|
43 |
+
return 'no payment';
|
44 |
+
}
|
45 |
+
if (Mage::getStoreConfig('payment/bitcoin/fullscreen') != 1 ) {
|
46 |
+
return 'disabled';
|
47 |
+
}
|
48 |
+
$invoice = $instance->getInvoiceData();
|
49 |
+
return $invoice['url'];
|
50 |
+
}
|
51 |
+
}
|
app/code/local/Yellow/Bitcoin/Block/Fullscreen/Widget/Footer.php
ADDED
@@ -0,0 +1,122 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
*
|
5 |
+
* The MIT License (MIT)
|
6 |
+
*
|
7 |
+
* Copyright (c) 2014 YellowPay.co
|
8 |
+
*
|
9 |
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
10 |
+
* of this software and associated documentation files (the "Software"), to deal
|
11 |
+
* in the Software without restriction, including without limitation the rights
|
12 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
13 |
+
* copies of the Software, and to permit persons to whom the Software is
|
14 |
+
* furnished to do so, subject to the following conditions:
|
15 |
+
*
|
16 |
+
* The above copyright notice and this permission notice shall be included in all
|
17 |
+
* copies or substantial portions of the Software.
|
18 |
+
*
|
19 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
20 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
21 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
22 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
23 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
24 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
25 |
+
* SOFTWARE.
|
26 |
+
*
|
27 |
+
**/
|
28 |
+
|
29 |
+
Class Yellow_Bitcoin_Block_Fullscreen_Widget_Footer extends Yellow_Bitcoin_Block_Fullscreen_Widget_Header
|
30 |
+
{
|
31 |
+
/**
|
32 |
+
* @var Mage_Sales_Model_Order
|
33 |
+
*/
|
34 |
+
public $order;
|
35 |
+
/**
|
36 |
+
* @return sales email address
|
37 |
+
*/
|
38 |
+
public function getContactEmail(){
|
39 |
+
return Mage::getStoreConfig('trans_email/ident_sales/email');
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* get customer email
|
44 |
+
* @return string
|
45 |
+
*/
|
46 |
+
public function getCustomerEmail(){
|
47 |
+
if($this->order instanceof Mage_Sales_Model_Order){
|
48 |
+
$email = $this->order->getCustomerEmail();
|
49 |
+
}else{
|
50 |
+
$email = "";
|
51 |
+
}
|
52 |
+
return $email;
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* get customer email
|
57 |
+
* @return string
|
58 |
+
*/
|
59 |
+
public function getCustomerName()
|
60 |
+
{
|
61 |
+
if($this->order instanceof Mage_Sales_Model_Order){
|
62 |
+
$name = Mage::getModel("customer/customer")->load($this->order->getCustomerId())->getName();
|
63 |
+
}else{
|
64 |
+
$name= "";
|
65 |
+
}
|
66 |
+
return $name;
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* return billing address
|
71 |
+
* @return mixed
|
72 |
+
*/
|
73 |
+
public function getBillingAddress(){
|
74 |
+
$order = $this->getLastOrder();
|
75 |
+
$htmlAddress = $order->getBillingAddress()->format("html");
|
76 |
+
return $htmlAddress;
|
77 |
+
}
|
78 |
+
|
79 |
+
/**
|
80 |
+
* return yellow invoice data
|
81 |
+
* @return array
|
82 |
+
*/
|
83 |
+
public function getInvoiceData()
|
84 |
+
{
|
85 |
+
$order = $this->getLastOrder();
|
86 |
+
|
87 |
+
if (!($order)
|
88 |
+
or !($payment = $order->getPayment())
|
89 |
+
or !($instance = $payment->getMethodInstance())
|
90 |
+
or ($instance->getCode() != 'bitcoin')
|
91 |
+
) {
|
92 |
+
return 'no payment';
|
93 |
+
}
|
94 |
+
if (Mage::getStoreConfig('payment/bitcoin/fullscreen') != 1 ) {
|
95 |
+
return 'disabled';
|
96 |
+
}
|
97 |
+
$invoice = $instance->getInvoiceData();
|
98 |
+
return $invoice;
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* return last order object
|
103 |
+
* @return Mage_Sales_Model_Order $order
|
104 |
+
*/
|
105 |
+
public function getLastOrder()
|
106 |
+
{
|
107 |
+
$order_id = Mage::getSingleton('checkout/session') ->getLastRealOrderId();
|
108 |
+
$order = Mage::getModel("sales/order")->loadByIncrementId($order_id);
|
109 |
+
$this->order = $order;
|
110 |
+
return $this->order;
|
111 |
+
}
|
112 |
+
|
113 |
+
|
114 |
+
/**
|
115 |
+
* this was made for future use
|
116 |
+
*
|
117 |
+
* @param $order
|
118 |
+
*/
|
119 |
+
public function setLastOrder($order){
|
120 |
+
$this->order = $order;
|
121 |
+
}
|
122 |
+
}
|
app/code/local/Yellow/Bitcoin/Block/Fullscreen/Widget/Header.php
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
*
|
5 |
+
* The MIT License (MIT)
|
6 |
+
*
|
7 |
+
* Copyright (c) 2014 YellowPay.co
|
8 |
+
*
|
9 |
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
10 |
+
* of this software and associated documentation files (the "Software"), to deal
|
11 |
+
* in the Software without restriction, including without limitation the rights
|
12 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
13 |
+
* copies of the Software, and to permit persons to whom the Software is
|
14 |
+
* furnished to do so, subject to the following conditions:
|
15 |
+
*
|
16 |
+
* The above copyright notice and this permission notice shall be included in all
|
17 |
+
* copies or substantial portions of the Software.
|
18 |
+
*
|
19 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
20 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
21 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
22 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
23 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
24 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
25 |
+
* SOFTWARE.
|
26 |
+
*
|
27 |
+
**/
|
28 |
+
|
29 |
+
Class Yellow_Bitcoin_Block_Fullscreen_Widget_Header extends Mage_Core_Block_Template
|
30 |
+
{
|
31 |
+
/**
|
32 |
+
* return store name
|
33 |
+
* @return null|string
|
34 |
+
*/
|
35 |
+
public function getStoreName(){
|
36 |
+
return Mage::app()->getStore()->getName();
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* return store's logo src
|
41 |
+
* @return string
|
42 |
+
*/
|
43 |
+
public function getLogoSrc()
|
44 |
+
{
|
45 |
+
return $this->getSkinUrl(Mage::getStoreConfig('design/header/logo_src'));
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* return alt text for store's logo
|
50 |
+
* @return mixed
|
51 |
+
*/
|
52 |
+
public function getLogoAlt()
|
53 |
+
{
|
54 |
+
return Mage::getStoreConfig('design/header/logo_alt');
|
55 |
+
}
|
56 |
+
}
|
app/code/local/Yellow/Bitcoin/Block/Status.php
CHANGED
@@ -1,30 +1,31 @@
|
|
1 |
<?php
|
2 |
-
/**
|
3 |
-
*
|
4 |
-
* The MIT License (MIT)
|
5 |
-
*
|
6 |
-
* Copyright (c) 2014 YellowPay.co
|
7 |
-
*
|
8 |
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
9 |
-
* of this software and associated documentation files (the "Software"), to deal
|
10 |
-
* in the Software without restriction, including without limitation the rights
|
11 |
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
12 |
-
* copies of the Software, and to permit persons to whom the Software is
|
13 |
-
* furnished to do so, subject to the following conditions:
|
14 |
-
*
|
15 |
-
* The above copyright notice and this permission notice shall be included in all
|
16 |
-
* copies or substantial portions of the Software.
|
17 |
-
*
|
18 |
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
19 |
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
20 |
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
21 |
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
22 |
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
23 |
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
24 |
-
* SOFTWARE.
|
25 |
-
*
|
26 |
-
**/
|
27 |
|
28 |
-
|
29 |
-
|
30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
+
/**
|
4 |
+
*
|
5 |
+
* The MIT License (MIT)
|
6 |
+
*
|
7 |
+
* Copyright (c) 2014 YellowPay.co
|
8 |
+
*
|
9 |
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
10 |
+
* of this software and associated documentation files (the "Software"), to deal
|
11 |
+
* in the Software without restriction, including without limitation the rights
|
12 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
13 |
+
* copies of the Software, and to permit persons to whom the Software is
|
14 |
+
* furnished to do so, subject to the following conditions:
|
15 |
+
*
|
16 |
+
* The above copyright notice and this permission notice shall be included in all
|
17 |
+
* copies or substantial portions of the Software.
|
18 |
+
*
|
19 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
20 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
21 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
22 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
23 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
24 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
25 |
+
* SOFTWARE.
|
26 |
+
*
|
27 |
+
**/
|
28 |
+
class Yellow_Bitcoin_Block_Status extends Mage_Core_Block_Template
|
29 |
+
{
|
30 |
+
|
31 |
+
}
|
app/code/local/Yellow/Bitcoin/Block/Widget.php
CHANGED
@@ -1,74 +1,73 @@
|
|
1 |
<?php
|
2 |
-
/**
|
3 |
-
*
|
4 |
-
* The MIT License (MIT)
|
5 |
-
*
|
6 |
-
* Copyright (c) 2014 YellowPay.co
|
7 |
-
*
|
8 |
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
9 |
-
* of this software and associated documentation files (the "Software"), to deal
|
10 |
-
* in the Software without restriction, including without limitation the rights
|
11 |
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
12 |
-
* copies of the Software, and to permit persons to whom the Software is
|
13 |
-
* furnished to do so, subject to the following conditions:
|
14 |
-
*
|
15 |
-
* The above copyright notice and this permission notice shall be included in all
|
16 |
-
* copies or substantial portions of the Software.
|
17 |
-
*
|
18 |
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
19 |
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
20 |
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
21 |
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
22 |
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
23 |
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
24 |
-
* SOFTWARE.
|
25 |
-
*
|
26 |
-
**/
|
27 |
-
|
28 |
-
class Yellow_Bitcoin_Block_Widget extends Mage_Checkout_Block_Onepage_Payment
|
29 |
-
{
|
30 |
|
31 |
/**
|
32 |
-
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
**/
|
34 |
-
|
35 |
{
|
36 |
-
$this->setTemplate('bitcoin/widget.phtml');
|
37 |
-
parent::_construct();
|
38 |
-
}
|
39 |
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
return $quoteId;
|
49 |
-
}
|
50 |
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
*/
|
56 |
-
public function GetWidgetUrl()
|
57 |
-
{
|
58 |
-
if (!($quote = Mage::getSingleton('checkout/session')->getQuote())
|
59 |
-
or !($payment = $quote->getPayment())
|
60 |
-
or !($instance = $payment->getMethodInstance())
|
61 |
-
or ($instance->getCode() != 'bitcoin'))
|
62 |
{
|
63 |
-
|
|
|
|
|
|
|
64 |
}
|
65 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
{
|
67 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
68 |
}
|
69 |
-
$quote = $this->getQuote();
|
70 |
-
$payment = $quote->getPayment()->getMethodInstance();
|
71 |
-
$invoice = $payment->createInvoice($quote , false);
|
72 |
-
return $invoice['url'];
|
73 |
}
|
74 |
-
}
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
/**
|
4 |
+
*
|
5 |
+
* The MIT License (MIT)
|
6 |
+
*
|
7 |
+
* Copyright (c) 2014 YellowPay.co
|
8 |
+
*
|
9 |
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
10 |
+
* of this software and associated documentation files (the "Software"), to deal
|
11 |
+
* in the Software without restriction, including without limitation the rights
|
12 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
13 |
+
* copies of the Software, and to permit persons to whom the Software is
|
14 |
+
* furnished to do so, subject to the following conditions:
|
15 |
+
*
|
16 |
+
* The above copyright notice and this permission notice shall be included in all
|
17 |
+
* copies or substantial portions of the Software.
|
18 |
+
*
|
19 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
20 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
21 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
22 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
23 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
24 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
25 |
+
* SOFTWARE.
|
26 |
+
*
|
27 |
**/
|
28 |
+
class Yellow_Bitcoin_Block_Widget extends Mage_Checkout_Block_Onepage_Payment
|
29 |
{
|
|
|
|
|
|
|
30 |
|
31 |
+
/**
|
32 |
+
*
|
33 |
+
**/
|
34 |
+
protected function _construct()
|
35 |
+
{
|
36 |
+
$this->setTemplate('bitcoin/widget.phtml');
|
37 |
+
parent::_construct();
|
38 |
+
}
|
|
|
|
|
39 |
|
40 |
+
/**
|
41 |
+
* @return string
|
42 |
+
*/
|
43 |
+
public function GetQuoteId()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
{
|
45 |
+
$quote = $this->getQuote();
|
46 |
+
$quoteId = $quote->getId();
|
47 |
+
|
48 |
+
return $quoteId;
|
49 |
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* create an invoice and return the url so that widget.phtml can display it
|
53 |
+
*
|
54 |
+
* @return string
|
55 |
+
*/
|
56 |
+
public function GetWidgetUrl()
|
57 |
{
|
58 |
+
if (!($quote = Mage::getSingleton('checkout/session')->getQuote())
|
59 |
+
or !($payment = $quote->getPayment())
|
60 |
+
or !($instance = $payment->getMethodInstance())
|
61 |
+
or ($instance->getCode() != 'bitcoin')
|
62 |
+
) {
|
63 |
+
return 'no payment';
|
64 |
+
}
|
65 |
+
if (Mage::getStoreConfig('payment/bitcoin/fullscreen')) {
|
66 |
+
return 'disabled';
|
67 |
+
}
|
68 |
+
$quote = $this->getQuote();
|
69 |
+
$payment = $quote->getPayment()->getMethodInstance();
|
70 |
+
$invoice = $payment->createInvoice($quote, false);
|
71 |
+
return $invoice['url'];
|
72 |
}
|
|
|
|
|
|
|
|
|
73 |
}
|
|
app/code/local/Yellow/Bitcoin/Helper/Data.php
CHANGED
@@ -1,30 +1,39 @@
|
|
1 |
<?php
|
2 |
-
/**
|
3 |
-
*
|
4 |
-
* The MIT License (MIT)
|
5 |
-
*
|
6 |
-
* Copyright (c) 2014 YellowPay.co
|
7 |
-
*
|
8 |
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
9 |
-
* of this software and associated documentation files (the "Software"), to deal
|
10 |
-
* in the Software without restriction, including without limitation the rights
|
11 |
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
12 |
-
* copies of the Software, and to permit persons to whom the Software is
|
13 |
-
* furnished to do so, subject to the following conditions:
|
14 |
-
*
|
15 |
-
* The above copyright notice and this permission notice shall be included in all
|
16 |
-
* copies or substantial portions of the Software.
|
17 |
-
*
|
18 |
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
19 |
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
20 |
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
21 |
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
22 |
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
23 |
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
24 |
-
* SOFTWARE.
|
25 |
-
*
|
26 |
-
**/
|
27 |
|
28 |
-
|
29 |
-
|
30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
+
/**
|
4 |
+
*
|
5 |
+
* The MIT License (MIT)
|
6 |
+
*
|
7 |
+
* Copyright (c) 2014 YellowPay.co
|
8 |
+
*
|
9 |
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
10 |
+
* of this software and associated documentation files (the "Software"), to deal
|
11 |
+
* in the Software without restriction, including without limitation the rights
|
12 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
13 |
+
* copies of the Software, and to permit persons to whom the Software is
|
14 |
+
* furnished to do so, subject to the following conditions:
|
15 |
+
*
|
16 |
+
* The above copyright notice and this permission notice shall be included in all
|
17 |
+
* copies or substantial portions of the Software.
|
18 |
+
*
|
19 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
20 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
21 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
22 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
23 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
24 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
25 |
+
* SOFTWARE.
|
26 |
+
*
|
27 |
+
**/
|
28 |
+
class Yellow_Bitcoin_Helper_Data extends Mage_Core_Helper_Abstract
|
29 |
+
{
|
30 |
+
/**
|
31 |
+
* check if the fullscreen setting is set to yes / no
|
32 |
+
* @return bool
|
33 |
+
*/
|
34 |
+
public function isFullScreen()
|
35 |
+
{
|
36 |
+
return ( Mage::getStoreConfig('payment/bitcoin/fullscreen') == 1 );
|
37 |
+
}
|
38 |
+
|
39 |
+
}
|
app/code/local/Yellow/Bitcoin/Model/Bitcoin.php
CHANGED
@@ -1,518 +1,639 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
/**
|
4 |
-
*
|
5 |
-
* The MIT License (MIT)
|
6 |
-
*
|
7 |
-
* Copyright (c) 2014 YellowPay.co
|
8 |
-
*
|
9 |
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
10 |
-
* of this software and associated documentation files (the "Software"), to deal
|
11 |
-
* in the Software without restriction, including without limitation the rights
|
12 |
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
13 |
-
* copies of the Software, and to permit persons to whom the Software is
|
14 |
-
* furnished to do so, subject to the following conditions:
|
15 |
-
*
|
16 |
-
* The above copyright notice and this permission notice shall be included in all
|
17 |
-
* copies or substantial portions of the Software.
|
18 |
-
*
|
19 |
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
20 |
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
21 |
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
22 |
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
23 |
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
24 |
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
25 |
-
* SOFTWARE.
|
26 |
-
*
|
27 |
-
* */
|
28 |
-
Class Yellow_Bitcoin_Model_Bitcoin extends Mage_Payment_Model_Method_Abstract {
|
29 |
-
|
30 |
/**
|
31 |
-
* Payment method code
|
32 |
*
|
33 |
-
*
|
34 |
-
*/
|
35 |
-
protected $_code = 'bitcoin';
|
36 |
-
|
37 |
-
/**
|
38 |
-
* Payment Method features
|
39 |
-
* @var bool
|
40 |
-
*/
|
41 |
-
protected $_isGateway = true;
|
42 |
-
protected $_canOrder = true;
|
43 |
-
protected $_canAuthorize = true;
|
44 |
-
protected $_canCapture = true;
|
45 |
-
protected $_canCapturePartial = false;
|
46 |
-
protected $_canCaptureOnce = false;
|
47 |
-
protected $_canRefund = false;
|
48 |
-
protected $_canRefundInvoicePartial = false;
|
49 |
-
protected $_canVoid = false;
|
50 |
-
protected $_canUseInternal = false;
|
51 |
-
protected $_canUseCheckout = true;
|
52 |
-
protected $_canUseForMultishipping = true;
|
53 |
-
protected $_isInitializeNeeded = false;
|
54 |
-
protected $_canFetchTransactionInfo = false;
|
55 |
-
protected $_canReviewPayment = false;
|
56 |
-
protected $_canCreateBillingAgreement = false;
|
57 |
-
protected $_canManageRecurringProfiles = true;
|
58 |
-
|
59 |
-
/**
|
60 |
-
* Cash On Delivery payment block paths
|
61 |
-
* @var string
|
62 |
-
*/
|
63 |
-
protected $_formBlockType = 'bitcoin/form_bitcoin';
|
64 |
-
|
65 |
-
/**
|
66 |
-
* Server Root for Yellow API
|
67 |
-
* @var String
|
68 |
-
*/
|
69 |
-
private $server_root = "https://yolanda-perkins.herokuapp.com/";
|
70 |
-
|
71 |
-
/**
|
72 |
-
* create invoice URI
|
73 |
-
* @var String
|
74 |
-
*/
|
75 |
-
private $api_uri_create_invoice = "api/invoice/";
|
76 |
-
|
77 |
-
/**
|
78 |
-
* check invoice status URI
|
79 |
-
* @var String
|
80 |
-
*/
|
81 |
-
private $api_uri_check_payment = "api/invoice/[id]/";
|
82 |
-
|
83 |
-
/**
|
84 |
-
* @type Mage_Sales_Model_Order
|
85 |
-
**/
|
86 |
-
private $order;
|
87 |
-
|
88 |
-
/**
|
89 |
-
* Check whether payment method can be used
|
90 |
-
*
|
91 |
-
* @param Mage_Sales_Model_Quote|null $quote
|
92 |
*
|
93 |
-
*
|
94 |
-
*/
|
95 |
-
public function isAvailable($quote = null) {
|
96 |
-
parent::isAvailable($quote);
|
97 |
-
$quoteCurrency = $quote->getData("quote_currency_code");
|
98 |
-
$currencies = array_map('trim', explode(',', Mage::getStoreConfig('payment/bitcoin/currencies')));
|
99 |
-
return array_search($quoteCurrency, $currencies) !== false;
|
100 |
-
}
|
101 |
-
|
102 |
-
/**
|
103 |
-
* Get instructions text from config
|
104 |
*
|
105 |
-
*
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
/**
|
112 |
-
* can be used in regular checkout
|
113 |
-
*
|
114 |
-
* @return bool
|
115 |
-
*/
|
116 |
-
public function canUseCheckout() {
|
117 |
-
if (!$this->isApiKeyConfigured()) {
|
118 |
-
return false;
|
119 |
-
}
|
120 |
-
return $this->_canUseCheckout;
|
121 |
-
}
|
122 |
-
|
123 |
-
/**
|
124 |
-
* Returns true if the merchant has set their api key
|
125 |
*
|
126 |
-
*
|
127 |
-
|
128 |
-
public function isApiKeyConfigured() {
|
129 |
-
$public_key = Mage::helper('core')->decrypt(Mage::getStoreConfig('payment/bitcoin/public_key'));
|
130 |
-
$private_key = Mage::helper('core')->decrypt(Mage::getStoreConfig('payment/bitcoin/private_key'));
|
131 |
-
return (!empty($private_key) && !empty($public_key));
|
132 |
-
}
|
133 |
-
|
134 |
-
/**
|
135 |
-
* Authorize payment abstract method
|
136 |
*
|
137 |
-
*
|
138 |
-
*
|
|
|
|
|
|
|
|
|
|
|
139 |
*
|
140 |
-
*
|
141 |
-
|
142 |
-
|
143 |
-
if (!Mage::getStoreConfig('payment/bitcoin/fullscreen')) {
|
144 |
-
$data = $this->CheckForPayment($payment);
|
145 |
-
return $data;
|
146 |
-
} else {
|
147 |
-
return $this->CreateInvoiceAndRedirect($payment);
|
148 |
-
}
|
149 |
-
}
|
150 |
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
170 |
}
|
171 |
-
}
|
172 |
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
$quoteId = $order->getQuoteId();
|
182 |
-
$ipn = Mage::getModel('bitcoin/ipn');
|
183 |
-
$invoice = Mage::getSingleton('core/session')->getData("invoice");
|
184 |
-
$invoice_status = $this->checkInvoice($invoice["id"]);
|
185 |
-
if(!is_array($invoice_status)){
|
186 |
-
Mage::throwException(Mage::helper('bitcoin')->__("We're sorry. An internal error happened while completing your request. You can refresh the page to try again. You can always send us an email at support@yellowpay.co"));
|
187 |
}
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
case "authorizing":
|
202 |
-
Mage::getResourceModel("bitcoin/ipn")->MarkAsAuthorizing($invoice["id"]);
|
203 |
-
$payment->setIsTransactionPending(true);
|
204 |
-
$order = $payment->getOrder();
|
205 |
-
$status_message = "Yellow invoice created , Invoice Id: " .$invoice['id'];
|
206 |
-
$order->addStatusToHistory( Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW ,$status_message);
|
207 |
-
|
208 |
-
/* start to invoice the order */
|
209 |
-
/*$order = $payment->getOrder();
|
210 |
-
$order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true)->save();
|
211 |
-
if (!count($order->getInvoiceCollection())) {
|
212 |
-
$invoice = $order->prepareInvoice()
|
213 |
-
->setTransactionId(1)
|
214 |
-
->addComment('Invoiced automatically from widget payment')
|
215 |
-
->register()
|
216 |
-
->pay();
|
217 |
-
$transactionSave = Mage::getModel('core/resource_transaction')
|
218 |
-
->addObject($invoice)
|
219 |
-
->addObject($invoice->getOrder());
|
220 |
-
$transactionSave->save();
|
221 |
-
}*/
|
222 |
-
/* end invoice the order */
|
223 |
-
break;
|
224 |
-
case "paid":
|
225 |
-
$invoiceModel = Mage::getModel('sales/order_invoice_api');
|
226 |
-
$invoice_id = $invoiceModel->create($payment->getOrder()->getIncrementId(), array());
|
227 |
-
$invoiceModel->capture($invoice_id);
|
228 |
-
break;
|
229 |
-
case "expired":
|
230 |
-
Mage::throwException(Mage::helper('bitcoin')->__("I'm sorry the invoice has {$invoice_status["status"]}, please refresh shopping cart."));
|
231 |
-
break;
|
232 |
-
case "refund_owed":
|
233 |
-
Mage::throwException(Mage::helper('bitcoin')->__("Incorrect payment received, please request a refund."));
|
234 |
-
break;
|
235 |
-
case "refund_requested":
|
236 |
-
Mage::throwException(Mage::helper('bitcoin')->__("Refund requested! To place a new order, please refresh shopping cart."));
|
237 |
-
break;
|
238 |
-
default:
|
239 |
-
$this->log("EXCEPTION: UNKNOW STATUES : " . $invoice_status["status"]);
|
240 |
-
Mage::throwException(Mage::helper('bitcoin')->__("We're sorry. An internal error happened while completing your request. You can refresh the page to try again. You can always send us an email at support@yellowpay.co"));
|
241 |
-
break;
|
242 |
}
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
$
|
253 |
-
return $
|
254 |
-
} else {
|
255 |
-
return '';
|
256 |
}
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
|
|
|
|
272 |
}
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
280 |
}
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
)
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
$response = $http_client->request();
|
301 |
-
if ($response->getStatus() == "200") {
|
302 |
-
$this->log("Response: " . $response);
|
303 |
-
$body = $response->getBody();
|
304 |
-
$data = json_decode($body, true);
|
305 |
-
/* save the invoice in the database */
|
306 |
-
$invoice_data = array(
|
307 |
-
$array_key => $quote_id,
|
308 |
-
"invoice_id" => $data["id"],
|
309 |
-
"url" => $data["url"],
|
310 |
-
"status" => $data["status"],
|
311 |
-
"address" => $data["address"],
|
312 |
-
"invoice_price" => $data["invoice_price"],
|
313 |
-
"invoice_ccy" => $data["invoice_ccy"],
|
314 |
-
"server_time" => $data["server_time"],
|
315 |
-
"expiration_time" => $data["expiration"],
|
316 |
-
"raw_body" => $yellow_payment_data,
|
317 |
-
"base_price" => $yellow_payment_data["base_price"],
|
318 |
-
"base_ccy" => $yellow_payment_data["base_ccy"],
|
319 |
-
"hash" => $hash
|
320 |
);
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
326 |
} else {
|
327 |
-
|
328 |
-
$this->log("I had seen an error code {$response->getStatus()}");
|
329 |
-
$this->log("response body was :" . json_encode($response->getBody));
|
330 |
-
return false;
|
331 |
}
|
332 |
-
} catch (Exception $exc) {
|
333 |
-
$this->log($exc->getMessage());
|
334 |
-
$this->log("EXCEPTION:" . json_encode($exc));
|
335 |
-
Mage::throwException(Mage::helper('bitcoin')->__("We're sorry. An internal error happened while completing your request. You can refresh the page to try again. You can always send us an email at support@yellowpay.co " . $exc->getMessage()));
|
336 |
}
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
* @param integer $id
|
342 |
-
* @return boolean
|
343 |
-
*
|
344 |
-
*/
|
345 |
-
public function checkInvoice($id) {
|
346 |
-
$url = $this->server_root . str_replace("[id]", $id, $this->api_uri_check_payment);
|
347 |
-
$nonce = round(microtime(true) * 1000);
|
348 |
-
$message = $nonce . $url;
|
349 |
-
$private_key = Mage::helper('core')->decrypt($this->getConfiguration("private_key"));
|
350 |
-
$hash = hash_hmac("sha256", $message, $private_key, false);
|
351 |
-
$http_client = $this->getHTTPClient();
|
352 |
-
$http_client->setHeaders($this->getHeaders($nonce, $hash));
|
353 |
-
$http_client->setMethod("GET")->setUri($url);
|
354 |
-
try {
|
355 |
-
$body = $http_client->request()->getBody();
|
356 |
-
$data = json_decode($body, true);
|
357 |
-
Mage::getSingleton('core/session')->setData('check_invoice', $data);
|
358 |
-
return $data;
|
359 |
-
} catch (Exception $exc) {
|
360 |
-
$this->log($exc->getMessage());
|
361 |
-
$this->log("EXCEPTION:" . json_encode($exc));
|
362 |
-
Mage::throwException(Mage::helper('bitcoin')->__("We're sorry. An internal error happened while completing your request. You can refresh the page to try again. You can always send us an email at support@yellowpay.co " . $exc->getMessage() ));
|
363 |
}
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
379 |
}
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
391 |
}
|
392 |
-
|
393 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
394 |
$order = $this->getOrder();
|
395 |
-
|
396 |
-
|
397 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
398 |
return $data["status"];
|
399 |
}
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
|
|
407 |
}
|
408 |
-
return false;
|
409 |
-
}
|
410 |
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
if (!$this->order) {
|
426 |
-
$session = Mage::getSingleton('checkout/session');
|
427 |
-
if (!$session->getLastRealOrderId()) {
|
428 |
-
throw new \Exception(" order Id can't be null ", 500);
|
429 |
}
|
430 |
-
|
431 |
-
$this->order = $order;
|
432 |
}
|
433 |
-
return $this->order;
|
434 |
-
}
|
435 |
-
/**
|
436 |
-
* read from magento configuration
|
437 |
-
*
|
438 |
-
* @param string $param
|
439 |
-
* @return type
|
440 |
-
*/
|
441 |
-
private function getConfiguration($param) {
|
442 |
-
return $this->getConfigData($param);
|
443 |
-
}
|
444 |
-
/**
|
445 |
-
* get HTTP client
|
446 |
-
*
|
447 |
-
* @return \Yellow_Bitcoin_Model_Http
|
448 |
-
*/
|
449 |
-
private function getHTTPClient() {
|
450 |
-
return new Yellow_Bitcoin_Model_Http();
|
451 |
-
}
|
452 |
-
|
453 |
-
/**
|
454 |
-
* prepare HTTP Headers
|
455 |
-
*
|
456 |
-
* @param String $nonce
|
457 |
-
* @param String$signature
|
458 |
-
* @return string
|
459 |
-
*/
|
460 |
-
private function getHeaders($nonce, $signature) {
|
461 |
-
$headers = array(
|
462 |
-
"Content-type:application/json",
|
463 |
-
"API-Key:" . Mage::helper('core')->decrypt($this->getConfiguration('public_key')),
|
464 |
-
"API-Nonce:$nonce",
|
465 |
-
"API-Sign:$signature"
|
466 |
-
);
|
467 |
-
return $headers;
|
468 |
-
}
|
469 |
-
|
470 |
-
/**
|
471 |
-
* returns success status
|
472 |
-
*
|
473 |
-
* @return String
|
474 |
-
*/
|
475 |
-
public function getSuccessStatus() {
|
476 |
-
return Mage_Sales_Model_Order::STATE_PROCESSING;
|
477 |
-
}
|
478 |
-
|
479 |
-
/**
|
480 |
-
* returns failed status
|
481 |
-
*
|
482 |
-
* @return String
|
483 |
-
*/
|
484 |
-
public function getFailedStatus() {
|
485 |
-
return Mage_Sales_Model_Order::STATE_CANCELED;
|
486 |
-
}
|
487 |
-
/**
|
488 |
-
*
|
489 |
-
* @param string $invoiceIncrementId
|
490 |
-
* @return boolean
|
491 |
-
*/
|
492 |
-
public function captureInvoice($invoiceIncrementId){
|
493 |
-
return Mage::getModel("sales/order_invoice_api")->capture($invoiceIncrementId);
|
494 |
-
}
|
495 |
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
517 |
}
|
518 |
-
}
|
1 |
<?php
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
/**
|
|
|
4 |
*
|
5 |
+
* The MIT License (MIT)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
*
|
7 |
+
* Copyright (c) 2014 YellowPay.co
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
*
|
9 |
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
10 |
+
* of this software and associated documentation files (the "Software"), to deal
|
11 |
+
* in the Software without restriction, including without limitation the rights
|
12 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
13 |
+
* copies of the Software, and to permit persons to whom the Software is
|
14 |
+
* furnished to do so, subject to the following conditions:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
*
|
16 |
+
* The above copyright notice and this permission notice shall be included in all
|
17 |
+
* copies or substantial portions of the Software.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
*
|
19 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
20 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
21 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
22 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
23 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
24 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
25 |
+
* SOFTWARE.
|
26 |
*
|
27 |
+
* */
|
28 |
+
Class Yellow_Bitcoin_Model_Bitcoin extends Mage_Payment_Model_Method_Abstract
|
29 |
+
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
|
31 |
+
/**
|
32 |
+
* Payment method code
|
33 |
+
*
|
34 |
+
* @var string
|
35 |
+
*/
|
36 |
+
protected $_code = 'bitcoin';
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Payment Method features
|
40 |
+
*
|
41 |
+
* @var bool
|
42 |
+
*/
|
43 |
+
protected $_isGateway = true;
|
44 |
+
protected $_canOrder = true;
|
45 |
+
protected $_canAuthorize = true;
|
46 |
+
protected $_canCapture = true;
|
47 |
+
protected $_canCapturePartial = false;
|
48 |
+
protected $_canCaptureOnce = false;
|
49 |
+
protected $_canRefund = false;
|
50 |
+
protected $_canRefundInvoicePartial = false;
|
51 |
+
protected $_canVoid = false;
|
52 |
+
protected $_canUseInternal = false;
|
53 |
+
protected $_canUseCheckout = true;
|
54 |
+
protected $_canUseForMultishipping = true;
|
55 |
+
protected $_isInitializeNeeded = false;
|
56 |
+
protected $_canFetchTransactionInfo = false;
|
57 |
+
protected $_canReviewPayment = false;
|
58 |
+
protected $_canCreateBillingAgreement = false;
|
59 |
+
protected $_canManageRecurringProfiles = true;
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Cash On Delivery payment block paths
|
63 |
+
*
|
64 |
+
* @var string
|
65 |
+
*/
|
66 |
+
protected $_formBlockType = 'bitcoin/form_bitcoin';
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Server Root for Yellow API
|
70 |
+
*
|
71 |
+
* @var String
|
72 |
+
*/
|
73 |
+
private $server_root = "https://api.yellowpay.co/v1/";
|
74 |
+
|
75 |
+
/**
|
76 |
+
* create invoice URI
|
77 |
+
*
|
78 |
+
* @var String
|
79 |
+
*/
|
80 |
+
private $api_uri_create_invoice = "invoice/";
|
81 |
+
|
82 |
+
/**
|
83 |
+
* check invoice status URI
|
84 |
+
*
|
85 |
+
* @var String
|
86 |
+
*/
|
87 |
+
private $api_uri_check_payment = "invoice/[id]/";
|
88 |
+
|
89 |
+
/**
|
90 |
+
* @type Mage_Sales_Model_Order
|
91 |
+
**/
|
92 |
+
private $order;
|
93 |
+
|
94 |
+
/**
|
95 |
+
* Check whether payment method can be used
|
96 |
+
*
|
97 |
+
* @param Mage_Sales_Model_Quote|null $quote
|
98 |
+
*
|
99 |
+
* @return bool
|
100 |
+
*/
|
101 |
+
public function isAvailable($quote = null)
|
102 |
+
{
|
103 |
+
parent::isAvailable($quote);
|
104 |
+
$quoteCurrency = $quote->getData("quote_currency_code");
|
105 |
+
$currencies = array_map('trim', explode(',', Mage::getStoreConfig('payment/bitcoin/currencies')));
|
106 |
+
return array_search($quoteCurrency, $currencies) !== false;
|
107 |
}
|
|
|
108 |
|
109 |
+
/**
|
110 |
+
* Get instructions text from config
|
111 |
+
*
|
112 |
+
* @return string
|
113 |
+
*/
|
114 |
+
public function getInstructions()
|
115 |
+
{
|
116 |
+
return trim($this->getConfigData('instructions'));
|
|
|
|
|
|
|
|
|
|
|
|
|
117 |
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* can be used in regular checkout
|
121 |
+
*
|
122 |
+
* @return bool
|
123 |
+
*/
|
124 |
+
public function canUseCheckout()
|
125 |
+
{
|
126 |
+
if (!$this->isApiKeyConfigured()) {
|
127 |
+
return false;
|
128 |
+
}
|
129 |
+
return $this->_canUseCheckout;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
130 |
}
|
131 |
+
|
132 |
+
/**
|
133 |
+
* Returns true if the merchant has set their api key
|
134 |
+
*
|
135 |
+
* @return boolean
|
136 |
+
*/
|
137 |
+
public function isApiKeyConfigured()
|
138 |
+
{
|
139 |
+
$public_key = Mage::helper('core')->decrypt(Mage::getStoreConfig('payment/bitcoin/public_key'));
|
140 |
+
$private_key = Mage::helper('core')->decrypt(Mage::getStoreConfig('payment/bitcoin/private_key'));
|
141 |
+
return (!empty($private_key) && !empty($public_key));
|
|
|
|
|
142 |
}
|
143 |
+
|
144 |
+
/**
|
145 |
+
* Authorize payment abstract method
|
146 |
+
*
|
147 |
+
* @param Varien_Object $payment
|
148 |
+
* @param float $amount
|
149 |
+
*
|
150 |
+
* @return Mage_Payment_Model_Abstract | direct redirect to Yellow fullscreen payment page
|
151 |
+
*/
|
152 |
+
public function authorize(Varien_Object $payment, $amount)
|
153 |
+
{
|
154 |
+
if (!Mage::getStoreConfig('payment/bitcoin/fullscreen')) {
|
155 |
+
$data = $this->CheckForPayment($payment);
|
156 |
+
return $data;
|
157 |
+
} else {
|
158 |
+
return $this->CreateInvoiceAndRedirect($payment);
|
159 |
+
}
|
160 |
}
|
161 |
+
|
162 |
+
/**
|
163 |
+
*
|
164 |
+
* create a yellow invoice
|
165 |
+
*
|
166 |
+
* @param $payment
|
167 |
+
* @param $amount
|
168 |
+
*
|
169 |
+
* @return Yellow_Bitcoin_Model_Bitcoin
|
170 |
+
*/
|
171 |
+
public function CreateInvoiceAndRedirect($payment)
|
172 |
+
{
|
173 |
+
$order = $payment->getOrder();
|
174 |
+
if (is_array($this->createInvoice($order))) {
|
175 |
+
$payment->setIsTransactionPending(true); // status will be PAYMENT_REVIEW instead of PROCESSING
|
176 |
+
//$orderId = $order->getIncrementId();
|
177 |
+
//$invoiceId = Mage::getModel('sales/order_invoice_api')->create($orderId, array());
|
178 |
+
return $this;
|
179 |
+
} else {
|
180 |
+
$this->log("An error occurred during invoice creation: " . __LINE__);
|
181 |
+
Mage::throwException(
|
182 |
+
Mage::helper('bitcoin')->__(
|
183 |
+
"We're sorry, an error has occurred while completing your request. Please refresh the page to try again. If the error persists, please send us an email at support@yellowpay.co"
|
184 |
+
)
|
185 |
+
);
|
186 |
+
}
|
187 |
}
|
188 |
+
|
189 |
+
/**
|
190 |
+
* @param Varien_Object $payment
|
191 |
+
*
|
192 |
+
* @return Yellow_Bitcoin_Model_Bitcoin
|
193 |
+
*/
|
194 |
+
public function CheckForPayment($payment)
|
195 |
+
{
|
196 |
+
$order = $payment->getOrder();
|
197 |
+
$order->setCanSendNewEmailFlag(false);
|
198 |
+
$quoteId = $order->getQuoteId();
|
199 |
+
$ipn = Mage::getModel('bitcoin/ipn');
|
200 |
+
$invoice = Mage::getSingleton('core/session')->getData("invoice");
|
201 |
+
$invoice_status = $this->checkInvoice($invoice["id"]);
|
202 |
+
if (!is_array($invoice_status)) {
|
203 |
+
Mage::throwException(
|
204 |
+
Mage::helper('bitcoin')->__(
|
205 |
+
"We're sorry, an error has occurred while completing your request. Please refresh the page to try again. If the error persists, please send us an email at support@yellowpay.co"
|
206 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
207 |
);
|
208 |
+
}
|
209 |
+
switch ($invoice_status["status"]) {
|
210 |
+
case "new":
|
211 |
+
// This is the error that is displayed to the customer during checkout.
|
212 |
+
Mage::throwException("Order has not been paid. Please pay first and then place your order.");
|
213 |
+
Mage::log(
|
214 |
+
'Order has not been paid. Please pay first and then place your order.',
|
215 |
+
Zend_Log::CRIT,
|
216 |
+
'yellow.log'
|
217 |
+
);
|
218 |
+
break;
|
219 |
+
case "partial":
|
220 |
+
// This is the error that is displayed to the customer during checkout.
|
221 |
+
Mage::getResourceModel("bitcoin/ipn")->MarkAsPartial($invoice["id"]);
|
222 |
+
Mage::throwException("Order has been partially paid. We don't support partial payment yet.");
|
223 |
+
Mage::log(
|
224 |
+
'Order has been partially paid. We don\'t support partial payment yet.',
|
225 |
+
Zend_Log::CRIT,
|
226 |
+
'yellow.log'
|
227 |
+
);
|
228 |
+
break;
|
229 |
+
|
230 |
+
case "authorizing":
|
231 |
+
Mage::getResourceModel("bitcoin/ipn")->MarkAsAuthorizing($invoice["id"]);
|
232 |
+
$payment->setIsTransactionPending(true);
|
233 |
+
$order = $payment->getOrder();
|
234 |
+
$status_message = "Yellow invoice created. Invoice Id: " . $invoice['id'];
|
235 |
+
$order->addStatusToHistory(Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW, $status_message);
|
236 |
+
|
237 |
+
/* start to invoice the order */
|
238 |
+
/*$order = $payment->getOrder();
|
239 |
+
$order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true)->save();
|
240 |
+
if (!count($order->getInvoiceCollection())) {
|
241 |
+
$invoice = $order->prepareInvoice()
|
242 |
+
->setTransactionId(1)
|
243 |
+
->addComment('Invoiced automatically from widget payment')
|
244 |
+
->register()
|
245 |
+
->pay();
|
246 |
+
$transactionSave = Mage::getModel('core/resource_transaction')
|
247 |
+
->addObject($invoice)
|
248 |
+
->addObject($invoice->getOrder());
|
249 |
+
$transactionSave->save();
|
250 |
+
}*/
|
251 |
+
/* end invoice the order */
|
252 |
+
break;
|
253 |
+
case "paid":
|
254 |
+
$invoiceModel = Mage::getModel('sales/order_invoice_api');
|
255 |
+
$invoice_id = $invoiceModel->create($payment->getOrder()->getIncrementId(), array());
|
256 |
+
$invoiceModel->capture($invoice_id);
|
257 |
+
break;
|
258 |
+
case "expired":
|
259 |
+
Mage::throwException(
|
260 |
+
Mage::helper('bitcoin')->__(
|
261 |
+
"I'm sorry the invoice has {$invoice_status["status"]}, please refresh the shopping cart."
|
262 |
+
)
|
263 |
+
);
|
264 |
+
break;
|
265 |
+
case "refund_owed":
|
266 |
+
Mage::throwException(
|
267 |
+
Mage::helper('bitcoin')->__("Incorrect payment received, please request a refund.")
|
268 |
+
);
|
269 |
+
break;
|
270 |
+
case "refund_requested":
|
271 |
+
Mage::throwException(
|
272 |
+
Mage::helper('bitcoin')->__(
|
273 |
+
"Refund requested! To place a new order, please refresh shopping cart."
|
274 |
+
)
|
275 |
+
);
|
276 |
+
break;
|
277 |
+
default:
|
278 |
+
$this->log("EXCEPTION - UNKNOW STATUS: " . $invoice_status["status"]);
|
279 |
+
Mage::throwException(
|
280 |
+
Mage::helper('bitcoin')->__(
|
281 |
+
"We're sorry, an error has occurred while completing your request. Please refresh the page to try again. If the error persists, please send us an email at support@yellowpay.co"
|
282 |
+
)
|
283 |
+
);
|
284 |
+
break;
|
285 |
+
}
|
286 |
+
return $this;
|
287 |
+
}
|
288 |
+
|
289 |
+
/**
|
290 |
+
* read the invoice url from session and redirect to it
|
291 |
+
*
|
292 |
+
* @return string
|
293 |
+
*/
|
294 |
+
public function getOrderPlaceRedirectUrl()
|
295 |
+
{
|
296 |
+
if (Mage::getStoreConfig('payment/bitcoin/fullscreen')) {
|
297 |
+
$target_url = Mage::getUrl("bitcoin/index/pay");
|
298 |
+
return $target_url;
|
299 |
} else {
|
300 |
+
return '';
|
|
|
|
|
|
|
301 |
}
|
|
|
|
|
|
|
|
|
302 |
}
|
303 |
+
|
304 |
+
public function getInvoiceData()
|
305 |
+
{
|
306 |
+
return Mage::getSingleton('core/session')->getData("invoice");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
307 |
}
|
308 |
+
|
309 |
+
/**
|
310 |
+
*
|
311 |
+
* @param Mage_Sales_Model_Quote $quote
|
312 |
+
* @param boolean $redirect
|
313 |
+
* @return boolean
|
314 |
+
*/
|
315 |
+
public function createInvoice($quote, $redirect = true)
|
316 |
+
{
|
317 |
+
$this->clearSessionData();
|
318 |
+
if (get_class($quote) == "Mage_Sales_Model_Quote") {
|
319 |
+
$array_key = "quoteId";
|
320 |
+
$currency_code_key = "quote_currency_code";
|
321 |
+
} else {
|
322 |
+
$array_key = "orderId";
|
323 |
+
$currency_code_key = "order_currency_code";
|
324 |
+
}
|
325 |
+
$base_price = $quote->getData("grand_total");
|
326 |
+
$base_ccy = $quote->getData($currency_code_key);
|
327 |
+
$quote_id = $quote->getData("entity_id");
|
328 |
+
$ipnUrl = Mage::getUrl("bitcoin/index/ipn", array( "_secure" => true , "id" => base64_encode($quote_id)));
|
329 |
+
$redirectUrl = "";
|
330 |
+
/*if ($redirect) {
|
331 |
+
$redirectUrl = Mage::getUrl("bitcoin/index/status");
|
332 |
+
}*/
|
333 |
+
$http_client = $this->getHTTPClient();
|
334 |
+
$yellow_payment_data = array(
|
335 |
+
"base_price" => $base_price, /// Set to 0.30 for testing
|
336 |
+
"base_ccy" => $base_ccy, /// Set to "USD" for testing
|
337 |
+
"callback" => $ipnUrl,
|
338 |
+
"redirect" => $redirectUrl
|
339 |
+
);
|
340 |
+
$post_body = json_encode($yellow_payment_data);
|
341 |
+
$nonce = round(microtime(true) * 1000);
|
342 |
+
$url = $this->server_root . $this->api_uri_create_invoice;
|
343 |
+
$message = $nonce . $url . $post_body;
|
344 |
+
$private_key = Mage::helper('core')->decrypt($this->getConfiguration("private_key"));
|
345 |
+
$hash = hash_hmac("sha256", $message, $private_key, false);
|
346 |
+
|
347 |
+
$http_client->setHeaders($this->getHeaders($nonce, $hash));
|
348 |
+
$http_client->setMethod("POST")
|
349 |
+
->setUri($url);
|
350 |
+
$http_client->setRawData($post_body);
|
351 |
+
try {
|
352 |
+
$response = $http_client->request();
|
353 |
+
if ($response->getStatus() == "200") {
|
354 |
+
$this->log("Response: " . $response);
|
355 |
+
$body = $response->getBody();
|
356 |
+
$data = json_decode($body, true);
|
357 |
+
/* save the invoice in the database */
|
358 |
+
$invoice_data = array(
|
359 |
+
$array_key => $quote_id,
|
360 |
+
"invoice_id" => $data["id"],
|
361 |
+
"url" => $data["url"],
|
362 |
+
"status" => $data["status"],
|
363 |
+
"address" => $data["address"],
|
364 |
+
"invoice_price" => $data["invoice_price"],
|
365 |
+
"invoice_ccy" => $data["invoice_ccy"],
|
366 |
+
"server_time" => $data["server_time"],
|
367 |
+
"expiration_time" => $data["expiration"],
|
368 |
+
"raw_body" => $yellow_payment_data,
|
369 |
+
"base_price" => $yellow_payment_data["base_price"],
|
370 |
+
"base_ccy" => $yellow_payment_data["base_ccy"],
|
371 |
+
"hash" => $hash
|
372 |
+
);
|
373 |
+
Mage::getModel("bitcoin/ipn")->saveInvoice($invoice_data);
|
374 |
+
/* end saving invoice */
|
375 |
+
Mage::getSingleton('core/session')->setData('invoice', $data);
|
376 |
+
Mage::getSingleton('core/session')->setData('has_invoice', true);
|
377 |
+
return $data;
|
378 |
+
} else {
|
379 |
+
Mage::throwException($response->getBody());
|
380 |
+
$this->log("Error code response received: {$response->getStatus()}");
|
381 |
+
$this->log("Response body:" . json_encode($response->getBody()));
|
382 |
+
return false;
|
383 |
+
}
|
384 |
+
} catch (Exception $exc) {
|
385 |
+
$this->log($exc->getMessage());
|
386 |
+
$this->log("EXCEPTION: " . json_encode($exc));
|
387 |
+
Mage::throwException(
|
388 |
+
Mage::helper('bitcoin')->__(
|
389 |
+
"{$exc->getMessage()}\n We're sorry, an error has occurred while completing your request. Please refresh the page to try again. If the error persists, please send us an email at support@yellowpay.co"
|
390 |
+
)
|
391 |
+
);
|
392 |
+
}
|
393 |
}
|
394 |
+
|
395 |
+
/**
|
396 |
+
* check yellow invoice status over Yellow API
|
397 |
+
*
|
398 |
+
* @param integer $id
|
399 |
+
* @return boolean
|
400 |
+
*
|
401 |
+
*/
|
402 |
+
public function checkInvoice($id)
|
403 |
+
{
|
404 |
+
$url = $this->server_root . str_replace("[id]", $id, $this->api_uri_check_payment);
|
405 |
+
$nonce = round(microtime(true) * 1000);
|
406 |
+
$message = $nonce . $url;
|
407 |
+
$private_key = Mage::helper('core')->decrypt($this->getConfiguration("private_key"));
|
408 |
+
$hash = hash_hmac("sha256", $message, $private_key, false);
|
409 |
+
$http_client = $this->getHTTPClient();
|
410 |
+
$http_client->setHeaders($this->getHeaders($nonce, $hash));
|
411 |
+
$http_client->setMethod("GET")->setUri($url);
|
412 |
+
try {
|
413 |
+
$body = $http_client->request()->getBody();
|
414 |
+
$data = json_decode($body, true);
|
415 |
+
Mage::getSingleton('core/session')->setData('check_invoice', $data);
|
416 |
+
return $data;
|
417 |
+
} catch (Exception $exc) {
|
418 |
+
$this->log($exc->getMessage());
|
419 |
+
$this->log("EXCEPTION:" . json_encode($exc));
|
420 |
+
Mage::throwException(
|
421 |
+
Mage::helper('bitcoin')->__(
|
422 |
+
"We're sorry, an error has occurred while completing your request. Please refresh the page to try again. If the error persists, please send us an email at support@yellowpay.co\n" . $exc->getMessage(
|
423 |
+
)
|
424 |
+
)
|
425 |
+
);
|
426 |
+
}
|
427 |
+
return false;
|
428 |
}
|
429 |
+
|
430 |
+
/**
|
431 |
+
* check yellow invoice status over Yellow API
|
432 |
+
*
|
433 |
+
* @param integer $id
|
434 |
+
* @return boolean
|
435 |
+
*
|
436 |
+
*/
|
437 |
+
|
438 |
+
public function checkInvoiceStatus($id)
|
439 |
+
{
|
440 |
+
$data = $this->checkInvoice($id);
|
441 |
+
if (!is_array($data)) {
|
442 |
+
Mage::throwException(
|
443 |
+
Mage::helper('bitcoin')->__(
|
444 |
+
"We're sorry, an error has occurred while completing your request. Please refresh the page to try again. If the error persists, please send us an email at support@yellowpay.co\nline: " . __LINE__
|
445 |
+
)
|
446 |
+
);
|
447 |
+
}
|
448 |
$order = $this->getOrder();
|
449 |
+
switch ($data["status"]){
|
450 |
+
case $data["status"] == "new":
|
451 |
+
$this->log("Status page accessed for a new invoice.");
|
452 |
+
$this->log("Nothing to do. Redirecting back to the payment page.");
|
453 |
+
break;
|
454 |
+
case $data["status"] == "paid" :
|
455 |
+
$order->addStatusToHistory(
|
456 |
+
$this->getSuccessStatus(),
|
457 |
+
"Payment confirmed. Invoice Id: " . $data["id"],
|
458 |
+
true
|
459 |
+
);
|
460 |
+
$order->sendNewOrderEmail();
|
461 |
+
$order->save();
|
462 |
+
Mage::getResourceModel("bitcoin/ipn")->MarkAsPaid($id);
|
463 |
+
/* create an invoice */
|
464 |
+
$invoiceModel = Mage::getModel('sales/order_invoice_api');
|
465 |
+
$invoice_id = $invoiceModel->create($order->getIncrementId(), array());
|
466 |
+
$invoiceModel->capture($invoice_id);
|
467 |
+
break;
|
468 |
+
case $data["status"] == "authorizing":
|
469 |
+
$order->addStatusToHistory(
|
470 |
+
Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW,
|
471 |
+
"Authorizing payment. This typically takes 10 minutes. Invoice Id: {$data['id']}"
|
472 |
+
);
|
473 |
+
$order->save();
|
474 |
+
Mage::getResourceModel("bitcoin/ipn")->MarkAsAuthorizing($id);
|
475 |
+
break;
|
476 |
+
case $data["status"] == "refund_requested" :
|
477 |
+
$order->setState(Mage_Sales_Model_Order::STATE_NEW);
|
478 |
+
if(!$order->canCancel()){
|
479 |
+
$this->log("Unable to cancel order. Order #" . $order->getIncrementId());
|
480 |
+
}else{
|
481 |
+
$this->log("refund_requested order");
|
482 |
+
Mage::getResourceModel("bitcoin/ipn")->MarkAsRefundRequested($id);
|
483 |
+
$order->addStatusToHistory(
|
484 |
+
$this->getFailedStatus(),
|
485 |
+
"refund_requested. Invoice #{$id} ",
|
486 |
+
true
|
487 |
+
);
|
488 |
+
$order->cancel();
|
489 |
+
$order->save();
|
490 |
+
$this->log("Order cancelled. Order #" . $order->getIncrementId());
|
491 |
+
}
|
492 |
+
break;
|
493 |
+
case $data["status"] === "failed":
|
494 |
+
case $data["status"] === "expired":
|
495 |
+
$order->setState(Mage_Sales_Model_Order::STATE_NEW);
|
496 |
+
if(!$order->canCancel()){
|
497 |
+
$this->log("Unable to cancel order. Order #" . $order->getIncrementId());
|
498 |
+
}else{
|
499 |
+
$this->log("Order expired");
|
500 |
+
Mage::getResourceModel("bitcoin/ipn")->MarkAsExpired($id);
|
501 |
+
$order->addStatusToHistory(
|
502 |
+
$this->getFailedStatus(),
|
503 |
+
"Invoice expired. Invoice #{$id}",
|
504 |
+
true
|
505 |
+
);
|
506 |
+
$order->cancel();
|
507 |
+
$order->save();
|
508 |
+
$this->log("Order cancelled. Order #" . $order->getIncrementId());
|
509 |
+
}
|
510 |
+
break;
|
511 |
+
default:
|
512 |
+
return false;
|
513 |
+
break;
|
514 |
+
}
|
515 |
return $data["status"];
|
516 |
}
|
517 |
+
|
518 |
+
/**
|
519 |
+
*
|
520 |
+
* @param Mage_Sales_Model_Order $order
|
521 |
+
*/
|
522 |
+
public function setOrder($order)
|
523 |
+
{
|
524 |
+
$this->order = $order;
|
525 |
}
|
|
|
|
|
526 |
|
527 |
+
/**
|
528 |
+
*
|
529 |
+
* @return Mage_Sales_Model_Order
|
530 |
+
* @throws \Exception
|
531 |
+
*/
|
532 |
+
public function getOrder()
|
533 |
+
{
|
534 |
+
if (!$this->order) {
|
535 |
+
$session = Mage::getSingleton('checkout/session');
|
536 |
+
if (!$session->getLastRealOrderId()) {
|
537 |
+
throw new \Exception("Order id can't be null ", 500);
|
538 |
+
}
|
539 |
+
$order = Mage::getModel('sales/order')->loadByIncrementId($session->getLastRealOrderId());
|
540 |
+
$this->order = $order;
|
|
|
|
|
|
|
|
|
541 |
}
|
542 |
+
return $this->order;
|
|
|
543 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
544 |
|
545 |
+
/**
|
546 |
+
* read from magento configuration
|
547 |
+
*
|
548 |
+
* @param string $param
|
549 |
+
* @return type
|
550 |
+
*/
|
551 |
+
public function getConfiguration($param)
|
552 |
+
{
|
553 |
+
return $this->getConfigData($param);
|
554 |
+
}
|
555 |
+
|
556 |
+
/**
|
557 |
+
* get HTTP client
|
558 |
+
*
|
559 |
+
* @return \Yellow_Bitcoin_Model_Http
|
560 |
+
*/
|
561 |
+
private function getHTTPClient()
|
562 |
+
{
|
563 |
+
return new Yellow_Bitcoin_Model_Http();
|
564 |
+
}
|
565 |
+
|
566 |
+
/**
|
567 |
+
* prepare HTTP Headers
|
568 |
+
*
|
569 |
+
* @param String $nonce
|
570 |
+
* @param String $signature
|
571 |
+
* @return string
|
572 |
+
*/
|
573 |
+
private function getHeaders($nonce, $signature)
|
574 |
+
{
|
575 |
+
$headers = array(
|
576 |
+
"Content-type:application/json",
|
577 |
+
"API-Key:" . Mage::helper('core')->decrypt($this->getConfiguration('public_key')),
|
578 |
+
"API-Nonce:$nonce",
|
579 |
+
"API-Sign:$signature"
|
580 |
+
);
|
581 |
+
return $headers;
|
582 |
+
}
|
583 |
+
|
584 |
+
/**
|
585 |
+
* returns success status
|
586 |
+
*
|
587 |
+
* @return String
|
588 |
+
*/
|
589 |
+
public function getSuccessStatus()
|
590 |
+
{
|
591 |
+
return Mage_Sales_Model_Order::STATE_PROCESSING;
|
592 |
+
}
|
593 |
+
|
594 |
+
/**
|
595 |
+
* returns failed status
|
596 |
+
*
|
597 |
+
* @return String
|
598 |
+
*/
|
599 |
+
public function getFailedStatus()
|
600 |
+
{
|
601 |
+
return Mage_Sales_Model_Order::STATE_CANCELED;
|
602 |
+
}
|
603 |
+
|
604 |
+
/**
|
605 |
+
*
|
606 |
+
* @param string $invoiceIncrementId
|
607 |
+
* @return boolean
|
608 |
+
*/
|
609 |
+
public function captureInvoice($invoiceIncrementId)
|
610 |
+
{
|
611 |
+
return Mage::getModel("sales/order_invoice_api")->capture($invoiceIncrementId);
|
612 |
+
}
|
613 |
+
|
614 |
+
/**
|
615 |
+
*
|
616 |
+
* clear session data
|
617 |
+
*
|
618 |
+
* @return boolean
|
619 |
+
*/
|
620 |
+
public function clearSessionData()
|
621 |
+
{
|
622 |
+
Mage::getSingleton('core/session')->unsetData("invoice");
|
623 |
+
Mage::getSingleton('core/session')->unsetData("has_invoice");
|
624 |
+
Mage::getSingleton('core/session')->unsetData("check_invoice");
|
625 |
+
return true;
|
626 |
+
}
|
627 |
+
|
628 |
+
/**
|
629 |
+
* log message to file
|
630 |
+
*
|
631 |
+
* @param string $message
|
632 |
+
* @return boolean
|
633 |
+
*/
|
634 |
+
private function log($message)
|
635 |
+
{
|
636 |
+
Mage::log($message, Zend_Log::ERR, "yellow.log");
|
637 |
+
return true;
|
638 |
+
}
|
639 |
}
|
|
app/code/local/Yellow/Bitcoin/Model/Http.php
CHANGED
@@ -1,49 +1,51 @@
|
|
1 |
<?php
|
2 |
-
/**
|
3 |
-
*
|
4 |
-
* The MIT License (MIT)
|
5 |
-
*
|
6 |
-
* Copyright (c) 2014 YellowPay.co
|
7 |
-
*
|
8 |
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
9 |
-
* of this software and associated documentation files (the "Software"), to deal
|
10 |
-
* in the Software without restriction, including without limitation the rights
|
11 |
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
12 |
-
* copies of the Software, and to permit persons to whom the Software is
|
13 |
-
* furnished to do so, subject to the following conditions:
|
14 |
-
*
|
15 |
-
* The above copyright notice and this permission notice shall be included in all
|
16 |
-
* copies or substantial portions of the Software.
|
17 |
-
*
|
18 |
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
19 |
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
20 |
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
21 |
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
22 |
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
23 |
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
24 |
-
* SOFTWARE.
|
25 |
-
*
|
26 |
-
**/
|
27 |
|
28 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
}
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
+
/**
|
4 |
+
*
|
5 |
+
* The MIT License (MIT)
|
6 |
+
*
|
7 |
+
* Copyright (c) 2014 YellowPay.co
|
8 |
+
*
|
9 |
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
10 |
+
* of this software and associated documentation files (the "Software"), to deal
|
11 |
+
* in the Software without restriction, including without limitation the rights
|
12 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
13 |
+
* copies of the Software, and to permit persons to whom the Software is
|
14 |
+
* furnished to do so, subject to the following conditions:
|
15 |
+
*
|
16 |
+
* The above copyright notice and this permission notice shall be included in all
|
17 |
+
* copies or substantial portions of the Software.
|
18 |
+
*
|
19 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
20 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
21 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
22 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
23 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
24 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
25 |
+
* SOFTWARE.
|
26 |
+
*
|
27 |
+
**/
|
28 |
+
Class Yellow_Bitcoin_Model_Http extends Varien_Http_Client
|
29 |
+
{
|
30 |
|
31 |
+
/**
|
32 |
+
* curl options , might be changed later to be configured
|
33 |
+
* right now i am using php's default values
|
34 |
+
*/
|
35 |
+
protected $_allowedParams = array(
|
36 |
+
'timeout' => 10, /// this might need to convert to configuration later once needed
|
37 |
+
'maxredirects' => CURLOPT_MAXREDIRS,
|
38 |
+
'proxy' => CURLOPT_PROXY,
|
39 |
+
'ssl_cert' => CURLOPT_SSLCERT,
|
40 |
+
'userpwd' => CURLOPT_USERPWD
|
41 |
+
);
|
42 |
+
|
43 |
+
public function __construct()
|
44 |
+
{
|
45 |
+
parent::__construct();
|
46 |
+
$adapter = new Varien_Http_Adapter_Curl();
|
47 |
+
$adapter->setOptions($this->_allowedParams);
|
48 |
+
$this->setAdapter($adapter);
|
49 |
+
return $this;
|
50 |
+
}
|
51 |
+
}
|
app/code/local/Yellow/Bitcoin/Model/Ipn.php
CHANGED
@@ -1,61 +1,64 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
/**
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
Class Yellow_Bitcoin_Model_Ipn extends Mage_Core_Model_Abstract
|
|
|
29 |
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
|
|
34 |
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
|
|
60 |
|
61 |
-
}
|
1 |
<?php
|
2 |
|
3 |
+
/**
|
4 |
+
*
|
5 |
+
* The MIT License (MIT)
|
6 |
+
*
|
7 |
+
* Copyright (c) 2014 YellowPay.co
|
8 |
+
*
|
9 |
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
10 |
+
* of this software and associated documentation files (the "Software"), to deal
|
11 |
+
* in the Software without restriction, including without limitation the rights
|
12 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
13 |
+
* copies of the Software, and to permit persons to whom the Software is
|
14 |
+
* furnished to do so, subject to the following conditions:
|
15 |
+
*
|
16 |
+
* The above copyright notice and this permission notice shall be included in all
|
17 |
+
* copies or substantial portions of the Software.
|
18 |
+
*
|
19 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
20 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
21 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
22 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
23 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
24 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
25 |
+
* SOFTWARE.
|
26 |
+
*
|
27 |
+
* */
|
28 |
+
Class Yellow_Bitcoin_Model_Ipn extends Mage_Core_Model_Abstract
|
29 |
+
{
|
30 |
|
31 |
+
public function _construct()
|
32 |
+
{
|
33 |
+
$this->_init('bitcoin/ipn');
|
34 |
+
return parent::_construct();
|
35 |
+
}
|
36 |
|
37 |
+
/**
|
38 |
+
* saves the invoice to db
|
39 |
+
*
|
40 |
+
*/
|
41 |
+
public function saveInvoice($invoice)
|
42 |
+
{
|
43 |
+
$timezone = Mage::getStoreConfig(Mage_Core_Model_Locale::XML_PATH_DEFAULT_TIMEZONE);
|
44 |
+
$now = new \DateTime("now", new \DateTimeZone($timezone));
|
45 |
+
$this->setQuoteId(isset($invoice['quoteId']) ? $invoice['quoteId'] : null);
|
46 |
+
$this->setOrderId(isset($invoice['orderId']) ? $invoice['orderId'] : null);
|
47 |
+
$this->setInvoiceId($invoice['invoice_id']);
|
48 |
+
$this->setUrl($invoice['url']);
|
49 |
+
$this->setrawBody(json_encode($invoice['raw_body']));
|
50 |
+
$this->setStatus($invoice['status']);
|
51 |
+
$this->setAddress($invoice["address"]);
|
52 |
+
$this->setInvoicePrice($invoice["invoice_price"]);
|
53 |
+
$this->setInvoiceCcy($invoice["invoice_ccy"]);
|
54 |
+
$this->setBasePrice($invoice["base_price"]);
|
55 |
+
$this->setBaseCcy($invoice["base_ccy"]);
|
56 |
+
$this->setServerTime($invoice["server_time"]);
|
57 |
+
$this->setExpirationTime($invoice["expiration_time"]);
|
58 |
+
$this->setCreatedAt($now->format("Y-m-d H:i:s"));
|
59 |
+
$this->setUpdatedAt($now->format("Y-m-d H:i:s"));
|
60 |
+
$this->setHash($invoice["hash"]);
|
61 |
+
return $this->save();
|
62 |
+
}
|
63 |
|
64 |
+
}
|
app/code/local/Yellow/Bitcoin/Model/Resource/Ipn.php
CHANGED
@@ -1,84 +1,93 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
/**
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
class Yellow_Bitcoin_Model_Resource_Ipn extends Mage_Core_Model_Resource_Db_Abstract
|
|
|
29 |
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
public function MarkAsAuthorizing($invoice_id) {
|
35 |
-
return $this->updatePayment($invoice_id, "authorizing");
|
36 |
-
}
|
37 |
|
38 |
-
|
39 |
-
|
40 |
-
|
|
|
41 |
|
42 |
-
|
43 |
-
|
44 |
-
|
|
|
45 |
|
46 |
-
|
47 |
-
|
48 |
-
|
|
|
49 |
|
50 |
-
|
51 |
-
|
52 |
-
|
|
|
53 |
|
54 |
-
|
55 |
-
|
56 |
-
|
|
|
57 |
|
58 |
-
|
59 |
-
|
60 |
-
|
|
|
61 |
|
|
|
|
|
|
|
|
|
62 |
|
63 |
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
$
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
$
|
80 |
-
|
|
|
|
|
81 |
}
|
82 |
-
}
|
83 |
|
84 |
-
}
|
1 |
<?php
|
2 |
|
3 |
+
/**
|
4 |
+
*
|
5 |
+
* The MIT License (MIT)
|
6 |
+
*
|
7 |
+
* Copyright (c) 2014 YellowPay.co
|
8 |
+
*
|
9 |
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
10 |
+
* of this software and associated documentation files (the "Software"), to deal
|
11 |
+
* in the Software without restriction, including without limitation the rights
|
12 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
13 |
+
* copies of the Software, and to permit persons to whom the Software is
|
14 |
+
* furnished to do so, subject to the following conditions:
|
15 |
+
*
|
16 |
+
* The above copyright notice and this permission notice shall be included in all
|
17 |
+
* copies or substantial portions of the Software.
|
18 |
+
*
|
19 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
20 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
21 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
22 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
23 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
24 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
25 |
+
* SOFTWARE.
|
26 |
+
*
|
27 |
+
* */
|
28 |
+
class Yellow_Bitcoin_Model_Resource_Ipn extends Mage_Core_Model_Resource_Db_Abstract
|
29 |
+
{
|
30 |
|
31 |
+
protected function _construct()
|
32 |
+
{
|
33 |
+
$this->_init('bitcoin/ipn', 'id');
|
34 |
+
}
|
|
|
|
|
|
|
35 |
|
36 |
+
public function MarkAsAuthorizing($invoice_id)
|
37 |
+
{
|
38 |
+
return $this->updatePayment($invoice_id, "authorizing");
|
39 |
+
}
|
40 |
|
41 |
+
public function MarkAsPaid($invoice_id)
|
42 |
+
{
|
43 |
+
return $this->updatePayment($invoice_id, "paid");
|
44 |
+
}
|
45 |
|
46 |
+
public function MarkAsPartial($invoice_id)
|
47 |
+
{
|
48 |
+
return $this->updatePayment($invoice_id, "partial");
|
49 |
+
}
|
50 |
|
51 |
+
public function MarkAsExpired($invoice_id)
|
52 |
+
{
|
53 |
+
return $this->updatePayment($invoice_id, "expired");
|
54 |
+
}
|
55 |
|
56 |
+
public function MarkAsRefundOwed($invoice_id)
|
57 |
+
{
|
58 |
+
return $this->updatePayment($invoice_id, "refund_owed");
|
59 |
+
}
|
60 |
|
61 |
+
public function MarkAsRefundPaid($invoice_id)
|
62 |
+
{
|
63 |
+
return $this->updatePayment($invoice_id, "refund_paid");
|
64 |
+
}
|
65 |
|
66 |
+
public function MarkAsRefundRequested($invoice_id)
|
67 |
+
{
|
68 |
+
return $this->updatePayment($invoice_id, "refund_requested");
|
69 |
+
}
|
70 |
|
71 |
|
72 |
+
private function updatePayment($invoice_id, $status)
|
73 |
+
{
|
74 |
+
$wa = $this->_getWriteAdapter();
|
75 |
+
try {
|
76 |
+
$timezone = Mage::getStoreConfig(Mage_Core_Model_Locale::XML_PATH_DEFAULT_TIMEZONE);
|
77 |
+
$now = new \DateTime("now", new \DateTimeZone($timezone));
|
78 |
+
$where = array();
|
79 |
+
$wa->beginTransaction();
|
80 |
+
$fields["status"] = $status;
|
81 |
+
$fields["updated_at"] = $now->format("Y-m-d H:i:s");
|
82 |
+
$where[] = $wa->quoteInto("invoice_id = ?", $invoice_id);
|
83 |
+
$tableName = $this->getTable("bitcoin/ipn");
|
84 |
+
$wa->update($tableName, $fields, $where);
|
85 |
+
$wa->commit();
|
86 |
+
return true;
|
87 |
+
} catch (Exception $exc) {
|
88 |
+
$wa->rollBack();
|
89 |
+
return $exc->getMessage();
|
90 |
+
}
|
91 |
}
|
|
|
92 |
|
93 |
+
}
|
app/code/local/Yellow/Bitcoin/Model/Resource/Ipn/Collection.php
CHANGED
@@ -1,34 +1,36 @@
|
|
1 |
<?php
|
2 |
-
/**
|
3 |
-
*
|
4 |
-
* The MIT License (MIT)
|
5 |
-
*
|
6 |
-
* Copyright (c) 2014 YellowPay.co
|
7 |
-
*
|
8 |
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
9 |
-
* of this software and associated documentation files (the "Software"), to deal
|
10 |
-
* in the Software without restriction, including without limitation the rights
|
11 |
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
12 |
-
* copies of the Software, and to permit persons to whom the Software is
|
13 |
-
* furnished to do so, subject to the following conditions:
|
14 |
-
*
|
15 |
-
* The above copyright notice and this permission notice shall be included in all
|
16 |
-
* copies or substantial portions of the Software.
|
17 |
-
*
|
18 |
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
19 |
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
20 |
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
21 |
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
22 |
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
23 |
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
24 |
-
* SOFTWARE.
|
25 |
-
*
|
26 |
-
**/
|
27 |
|
28 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
|
30 |
-
|
31 |
-
|
32 |
-
|
|
|
33 |
|
34 |
-
}
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
+
/**
|
4 |
+
*
|
5 |
+
* The MIT License (MIT)
|
6 |
+
*
|
7 |
+
* Copyright (c) 2014 YellowPay.co
|
8 |
+
*
|
9 |
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
10 |
+
* of this software and associated documentation files (the "Software"), to deal
|
11 |
+
* in the Software without restriction, including without limitation the rights
|
12 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
13 |
+
* copies of the Software, and to permit persons to whom the Software is
|
14 |
+
* furnished to do so, subject to the following conditions:
|
15 |
+
*
|
16 |
+
* The above copyright notice and this permission notice shall be included in all
|
17 |
+
* copies or substantial portions of the Software.
|
18 |
+
*
|
19 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
20 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
21 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
22 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
23 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
24 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
25 |
+
* SOFTWARE.
|
26 |
+
*
|
27 |
+
**/
|
28 |
+
class Yellow_Bitcoin_Model_Resource_Ipn_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract
|
29 |
+
{
|
30 |
|
31 |
+
protected function _construct()
|
32 |
+
{
|
33 |
+
$this->_init('bitcoin/ipn');
|
34 |
+
}
|
35 |
|
36 |
+
}
|
app/code/local/Yellow/Bitcoin/controllers/IndexController.php
CHANGED
@@ -1,49 +1,101 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
/**
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
class Yellow_Bitcoin_IndexController extends Mage_Core_Controller_Front_Action
|
|
|
29 |
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
$this->
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
$url = $body["url"];
|
41 |
-
/* simple
|
42 |
$collection = Mage::getModel("bitcoin/ipn")
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
$yellow_log = $collection->query()->fetchAll();
|
48 |
$from_order = $from_quote = false;
|
49 |
if (count($yellow_log) == 1) {
|
@@ -57,8 +109,8 @@ class Yellow_Bitcoin_IndexController extends Mage_Core_Controller_Front_Action {
|
|
57 |
$this->log("its an order");
|
58 |
}
|
59 |
} else {
|
60 |
-
$this->log("
|
61 |
-
$this->log("-----------
|
62 |
return $this->_forward("no-route");
|
63 |
}
|
64 |
if ($from_order) {
|
@@ -68,53 +120,59 @@ class Yellow_Bitcoin_IndexController extends Mage_Core_Controller_Front_Action {
|
|
68 |
$order = Mage::getModel('sales/order')->load($id, "quote_id");
|
69 |
}
|
70 |
/* skip quote + authorizing state because the order hasn't been placed yet */
|
71 |
-
if($from_quote && $body["status"] === "authorizing"){
|
72 |
-
$this->log(
|
|
|
|
|
73 |
echo json_encode(array("message" => "skipped"));
|
74 |
-
$this->log("-----------
|
75 |
-
return
|
76 |
}
|
77 |
-
if($order->getPayment()
|
78 |
$payment = $order->getPayment()->getMethodInstance();
|
79 |
-
if (!$order || $payment->getCode() <> "bitcoin" || $order->getState(
|
80 |
-
|
81 |
-
|
|
|
|
|
82 |
return $this->_forward("no-route");
|
83 |
}
|
84 |
}
|
85 |
$this->log(" invoice status : {$body["status"]}");
|
86 |
switch ($body['status']) {
|
87 |
case 'paid':
|
88 |
-
$status
|
89 |
-
$status_message = "Payment confirmation received
|
90 |
$order->addStatusToHistory($status, $status_message);
|
91 |
$order->setState(Mage_Sales_Model_Order::STATE_PROCESSING);
|
92 |
$order->sendNewOrderEmail();
|
93 |
$order->save();
|
94 |
Mage::getResourceModel("bitcoin/ipn")->MarkAsPaid($body["id"]);
|
95 |
-
|
96 |
$invoiceModel = Mage::getModel('sales/order_invoice_api');
|
97 |
-
$invoice_id
|
98 |
$invoiceModel->capture($invoice_id);
|
99 |
-
$this->log("Magento Invoice created
|
100 |
break;
|
101 |
case 'reissue':
|
102 |
-
$status
|
103 |
-
|
|
|
104 |
$order->addStatusToHistory($status, $status_message);
|
105 |
$order->save();
|
106 |
break;
|
107 |
case 'partial':
|
108 |
-
$status
|
109 |
-
|
|
|
110 |
$order->addStatusToHistory($status, $status_message);
|
111 |
$order->save();
|
112 |
Mage::getResourceModel("bitcoin/ipn")->MarkAsPartial($body["id"]);
|
113 |
break;
|
114 |
case 'failed':
|
115 |
case 'invalid':
|
116 |
-
$status
|
117 |
-
$status_message = "
|
118 |
$order->addStatusToHistory($status, $status_message);
|
119 |
$order->setState(Mage_Sales_Model_Order::STATE_HOLDED);
|
120 |
$order->cancel();
|
@@ -142,61 +200,92 @@ class Yellow_Bitcoin_IndexController extends Mage_Core_Controller_Front_Action {
|
|
142 |
break;
|
143 |
}
|
144 |
echo json_encode(array("message" => "done"));
|
145 |
-
|
146 |
-
|
|
|
147 |
}
|
148 |
-
$this->log("----------- finished an IPN request proccessing ---------------------");
|
149 |
-
} catch (\Exception $e){
|
150 |
-
$this->log( "EXCEPTION:". $e->getMessage . "|" . $e->getLine());
|
151 |
}
|
152 |
-
}
|
153 |
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
$status = $model->checkInvoiceStatus($id);
|
166 |
-
if($status == false){
|
167 |
-
$this->log("failed to check invoice status");
|
168 |
-
return $this->_forward("no-route");
|
169 |
-
}
|
170 |
-
switch ($status) {
|
171 |
-
case "paid":
|
172 |
-
case "partial":
|
173 |
-
case "authorizing":
|
174 |
-
return $this->_redirect('checkout/onepage/success');
|
175 |
-
break;
|
176 |
-
case "failed":
|
177 |
-
return $this->_redirect('checkout/onepage/failure');
|
178 |
-
break;
|
179 |
-
default:
|
180 |
-
$this->log("unknow invoice status , invoice id : {$id}");
|
181 |
return $this->_forward("no-route");
|
182 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
183 |
}
|
184 |
-
} catch (Mage_Core_Exception $e) {
|
185 |
-
$this->log("an error occurred : {$e->getMessage()} on line {$e->getLine()}");
|
186 |
-
return $this->_redirect('checkout/onepage/failure');
|
187 |
}
|
188 |
-
}
|
189 |
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
194 |
}
|
195 |
-
return Mage::getModel('sales/order')->loadByIncrementId($session->getLastRealOrderId());
|
196 |
-
}
|
197 |
|
198 |
-
|
199 |
-
|
200 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
201 |
|
202 |
-
}
|
1 |
<?php
|
2 |
|
3 |
+
/**
|
4 |
+
*
|
5 |
+
* The MIT License (MIT)
|
6 |
+
*
|
7 |
+
* Copyright (c) 2014 YellowPay.co
|
8 |
+
*
|
9 |
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
10 |
+
* of this software and associated documentation files (the "Software"), to deal
|
11 |
+
* in the Software without restriction, including without limitation the rights
|
12 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
13 |
+
* copies of the Software, and to permit persons to whom the Software is
|
14 |
+
* furnished to do so, subject to the following conditions:
|
15 |
+
*
|
16 |
+
* The above copyright notice and this permission notice shall be included in all
|
17 |
+
* copies or substantial portions of the Software.
|
18 |
+
*
|
19 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
20 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
21 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
22 |
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
23 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
24 |
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
25 |
+
* SOFTWARE.
|
26 |
+
*
|
27 |
+
* */
|
28 |
+
class Yellow_Bitcoin_IndexController extends Mage_Core_Controller_Front_Action
|
29 |
+
{
|
30 |
|
31 |
+
|
32 |
+
public function payAction()
|
33 |
+
{
|
34 |
+
$this->loadLayout();
|
35 |
+
$this->renderLayout();
|
36 |
+
}
|
37 |
+
public function IpnAction()
|
38 |
+
{
|
39 |
+
/**
|
40 |
+
* return not found on all requests but POST
|
41 |
+
*/
|
42 |
+
$this->log("----------- IPN request validation ------------");
|
43 |
+
if (!$this->getRequest()->isPost()) {
|
44 |
+
return $this->returnForbidden();
|
45 |
+
}
|
46 |
+
$ip = long2ip(Mage::helper('core/http')->getRemoteAddr(true));
|
47 |
+
$this->log("Start IPN request validation") ;
|
48 |
+
$this->log("IP Address of the sender {$ip}");
|
49 |
+
|
50 |
+
/* start to validate the signature */
|
51 |
+
$request = $this->getRequest();
|
52 |
+
$payload = $request->getRawBody();
|
53 |
+
$public_key = $request->getHeader("API-Key");
|
54 |
+
$nonce = $request->getHeader("API-Nonce");
|
55 |
+
$request_signature = $request->getHeader("API-Sign");
|
56 |
+
$this->log("API-KEY:{$public_key}");
|
57 |
+
$this->log("API-Nonce:{$nonce}");
|
58 |
+
$this->log("API-Sign:{$request_signature}");
|
59 |
+
$this->log("Received payload: " . $payload);
|
60 |
+
|
61 |
+
if (!$public_key || !$nonce || !$request_signature || !$payload) {
|
62 |
+
$this->log("Credentials missing. Exiting.");
|
63 |
+
return $this->returnForbidden();
|
64 |
+
}
|
65 |
+
|
66 |
+
$private_key = Mage::helper('core')->decrypt(
|
67 |
+
Mage::getModel("bitcoin/bitcoin")->getConfiguration("private_key")
|
68 |
+
);
|
69 |
+
$url = Mage::helper('core/url')->getCurrentUrl();
|
70 |
+
$message = $nonce . $url . $payload;
|
71 |
+
$current_signature = hash_hmac("sha256", $message, $private_key, false);
|
72 |
+
$this->log("Calculated signature: " . $current_signature);
|
73 |
+
|
74 |
+
if ($request_signature <> $current_signature) {
|
75 |
+
$this->log("IPN VALIDATION FAILED");
|
76 |
+
$this->log("Returning 'page not found'");
|
77 |
+
$this->log("Your payment data is still safe");
|
78 |
+
$this->log("----------- IPN request processing will be skipped -----------");
|
79 |
+
return $this->returnForbidden();
|
80 |
+
}
|
81 |
+
$this->log("VALIDATION PASSED :) Yay");
|
82 |
+
/* end of validate the signature */
|
83 |
+
/* by this the request has passed validation */
|
84 |
+
try {
|
85 |
+
/* need to check the ip address of the source from a whitelist list of ips , otherwise this might be used illegaly to update orders */
|
86 |
+
$this->log("----------- IPN request processing ------------");
|
87 |
+
$id = base64_decode($this->getRequest()->getParam("id"));
|
88 |
+
//$data = file_get_contents('php://input');
|
89 |
+
$body = json_decode($payload, true);
|
90 |
+
$this->log("Id is: {$id}");
|
91 |
+
$this->log("Received payload: " . $payload);
|
92 |
$url = $body["url"];
|
93 |
+
/* simple validation check | might be changed later */
|
94 |
$collection = Mage::getModel("bitcoin/ipn")
|
95 |
+
->getCollection()
|
96 |
+
->getSelect()
|
97 |
+
->where("quote_id = ? OR order_id = ?", $id)
|
98 |
+
->where("url =?", $url);
|
99 |
$yellow_log = $collection->query()->fetchAll();
|
100 |
$from_order = $from_quote = false;
|
101 |
if (count($yellow_log) == 1) {
|
109 |
$this->log("its an order");
|
110 |
}
|
111 |
} else {
|
112 |
+
$this->log("URL validation failed: {$url}");
|
113 |
+
$this->log("----------- IPN request processing will be skipped -----------");
|
114 |
return $this->_forward("no-route");
|
115 |
}
|
116 |
if ($from_order) {
|
120 |
$order = Mage::getModel('sales/order')->load($id, "quote_id");
|
121 |
}
|
122 |
/* skip quote + authorizing state because the order hasn't been placed yet */
|
123 |
+
if ($from_quote && $body["status"] === "authorizing") {
|
124 |
+
$this->log(
|
125 |
+
"Quote id {$id} will be skipped because the order hasn't been placed yet. IPN status: {$body["status"]}"
|
126 |
+
);
|
127 |
echo json_encode(array("message" => "skipped"));
|
128 |
+
$this->log("----------- IPN request processing will be skipped -----------");
|
129 |
+
return;
|
130 |
}
|
131 |
+
if ($order->getPayment() instanceof Yellow_Bitcoin_Model_Bitcoin) {
|
132 |
$payment = $order->getPayment()->getMethodInstance();
|
133 |
+
if (!$order || $payment->getCode() <> "bitcoin" || $order->getState(
|
134 |
+
) <> Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW
|
135 |
+
) {
|
136 |
+
$this->log("Either this order is not paid via Yellow, or it has an unallowed state");
|
137 |
+
$this->log("----------- IPN request processing will be skipped -----------");
|
138 |
return $this->_forward("no-route");
|
139 |
}
|
140 |
}
|
141 |
$this->log(" invoice status : {$body["status"]}");
|
142 |
switch ($body['status']) {
|
143 |
case 'paid':
|
144 |
+
$status = Mage::getModel("bitcoin/bitcoin")->getSuccessStatus();
|
145 |
+
$status_message = "Payment confirmation received. Invoice Id: " . $body['id']; // $invoice["message"];
|
146 |
$order->addStatusToHistory($status, $status_message);
|
147 |
$order->setState(Mage_Sales_Model_Order::STATE_PROCESSING);
|
148 |
$order->sendNewOrderEmail();
|
149 |
$order->save();
|
150 |
Mage::getResourceModel("bitcoin/ipn")->MarkAsPaid($body["id"]);
|
151 |
+
/* create an invoice */
|
152 |
$invoiceModel = Mage::getModel('sales/order_invoice_api');
|
153 |
+
$invoice_id = $invoiceModel->create($order->getIncrementId(), array());
|
154 |
$invoiceModel->capture($invoice_id);
|
155 |
+
$this->log("Magento Invoice created!");
|
156 |
break;
|
157 |
case 'reissue':
|
158 |
+
$status = Mage::getModel("bitcoin/bitcoin")->getSuccessStatus(
|
159 |
+
); /// this must bn changed when we had reissue / renew payment ready
|
160 |
+
$status_message = "Client re-issued the invoice. Invoice Id: " . $body['id']; // $invoice["message"];
|
161 |
$order->addStatusToHistory($status, $status_message);
|
162 |
$order->save();
|
163 |
break;
|
164 |
case 'partial':
|
165 |
+
$status = Mage::getModel("bitcoin/bitcoin")->getSuccessStatus(
|
166 |
+
); /// this must bn changed when we had partail payment ready
|
167 |
+
$status_message = "Client made a partial payment. Invoice Id: " . $body['id']; // $invoice["message"];
|
168 |
$order->addStatusToHistory($status, $status_message);
|
169 |
$order->save();
|
170 |
Mage::getResourceModel("bitcoin/ipn")->MarkAsPartial($body["id"]);
|
171 |
break;
|
172 |
case 'failed':
|
173 |
case 'invalid':
|
174 |
+
$status = Mage::getModel("bitcoin/bitcoin")->getFailedStatus();
|
175 |
+
$status_message = "Client failed to pay. Invoice Id: " . $body['id']; // $invoice["message"];
|
176 |
$order->addStatusToHistory($status, $status_message);
|
177 |
$order->setState(Mage_Sales_Model_Order::STATE_HOLDED);
|
178 |
$order->cancel();
|
200 |
break;
|
201 |
}
|
202 |
echo json_encode(array("message" => "done"));
|
203 |
+
$this->log("----------- IPN request processing complete -----------");
|
204 |
+
} catch (\Exception $e) {
|
205 |
+
$this->log("EXCEPTION:" . $e->getMessage . "|" . $e->getLine());
|
206 |
}
|
|
|
|
|
|
|
207 |
}
|
|
|
208 |
|
209 |
+
public function StatusAction()
|
210 |
+
{
|
211 |
+
$invoice = Mage::getSingleton('core/session')->getData("invoice");
|
212 |
+
try {
|
213 |
+
$id = $invoice["id"];
|
214 |
+
$model = Mage::getModel('bitcoin/bitcoin');
|
215 |
+
$order = $this->getOrder();
|
216 |
+
if (!$order) {
|
217 |
+
$this->log(
|
218 |
+
"This session does not have a recent order. This page may have been accessed directly."
|
219 |
+
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
220 |
return $this->_forward("no-route");
|
221 |
+
}
|
222 |
+
$model->setOrder($order);
|
223 |
+
$status = $model->checkInvoiceStatus($id);
|
224 |
+
if ($status == false) {
|
225 |
+
$this->log("Invoice status check failed");
|
226 |
+
return $this->_forward("no-route");
|
227 |
+
}
|
228 |
+
switch ($status) {
|
229 |
+
case "new":
|
230 |
+
return $this->_redirect('bitcoin/index/pay');
|
231 |
+
break;
|
232 |
+
case "paid":
|
233 |
+
case "partial":
|
234 |
+
case "authorizing":
|
235 |
+
return $this->_redirect('checkout/onepage/success');
|
236 |
+
break;
|
237 |
+
case "failed":
|
238 |
+
return $this->_redirect('checkout/onepage/failure');
|
239 |
+
break;
|
240 |
+
case "refund_requested":
|
241 |
+
case "refund_owed":
|
242 |
+
return $this->_redirect('checkout/onepage/failure');
|
243 |
+
break;
|
244 |
+
case "expired":
|
245 |
+
return $this->_redirect('checkout/onepage/failure');
|
246 |
+
break;
|
247 |
+
default:
|
248 |
+
$this->log("Unknown invoice status. Invoice id: {$id}");
|
249 |
+
return $this->_forward("no-route");
|
250 |
+
break;
|
251 |
+
}
|
252 |
+
} catch (Mage_Core_Exception $e) {
|
253 |
+
$this->log("An error occurred: {$e->getMessage()} on line {$e->getLine()}");
|
254 |
+
return $this->_redirect('checkout/onepage/failure');
|
255 |
}
|
|
|
|
|
|
|
256 |
}
|
|
|
257 |
|
258 |
+
/**
|
259 |
+
* return current object
|
260 |
+
* @return bool|Mage_Sales_Model_Order
|
261 |
+
*/
|
262 |
+
private function getOrder()
|
263 |
+
{
|
264 |
+
$session = Mage::getSingleton('checkout/session');
|
265 |
+
if (!$session->getLastRealOrderId()) {
|
266 |
+
return false;
|
267 |
+
}
|
268 |
+
return Mage::getModel('sales/order')->loadByIncrementId($session->getLastRealOrderId());
|
269 |
+
}
|
270 |
+
/*
|
271 |
+
* log message to yellow.log
|
272 |
+
*/
|
273 |
+
private function log($message)
|
274 |
+
{
|
275 |
+
return Mage::log($message, Zend_Log::INFO, "yellow.log");
|
276 |
}
|
|
|
|
|
277 |
|
278 |
+
/**
|
279 |
+
*
|
280 |
+
* return 403 header
|
281 |
+
* @return mixed
|
282 |
+
*
|
283 |
+
*/
|
284 |
+
private function returnForbidden(){
|
285 |
+
return $this->getResponse()
|
286 |
+
->clearHeaders()
|
287 |
+
->setHttpResponseCode(403)
|
288 |
+
->sendResponse();
|
289 |
+
}
|
290 |
|
291 |
+
}
|
app/code/local/Yellow/Bitcoin/etc/config.xml
CHANGED
@@ -29,7 +29,7 @@ SOFTWARE.
|
|
29 |
<Yellow_Bitcoin>
|
30 |
<version>0.1.1</version>
|
31 |
<depends>
|
32 |
-
<Mage_Payment
|
33 |
</depends>
|
34 |
</Yellow_Bitcoin>
|
35 |
</modules>
|
@@ -113,5 +113,5 @@ SOFTWARE.
|
|
113 |
<payment_action>authorize</payment_action>
|
114 |
</bitcoin>
|
115 |
</payment>
|
116 |
-
</default>
|
117 |
</config>
|
29 |
<Yellow_Bitcoin>
|
30 |
<version>0.1.1</version>
|
31 |
<depends>
|
32 |
+
<Mage_Payment/>
|
33 |
</depends>
|
34 |
</Yellow_Bitcoin>
|
35 |
</modules>
|
113 |
<payment_action>authorize</payment_action>
|
114 |
</bitcoin>
|
115 |
</payment>
|
116 |
+
</default>
|
117 |
</config>
|
app/code/local/Yellow/Bitcoin/etc/system.xml
CHANGED
@@ -86,7 +86,7 @@ SOFTWARE.
|
|
86 |
<show_in_website>1</show_in_website>
|
87 |
<show_in_store>0</show_in_store>
|
88 |
</allowspecific>
|
89 |
-
|
90 |
<specificcountry translate="label">
|
91 |
<label>Countries Payment Applicable From</label>
|
92 |
<frontend_type>multiselect</frontend_type>
|
86 |
<show_in_website>1</show_in_website>
|
87 |
<show_in_store>0</show_in_store>
|
88 |
</allowspecific>
|
89 |
+
|
90 |
<specificcountry translate="label">
|
91 |
<label>Countries Payment Applicable From</label>
|
92 |
<frontend_type>multiselect</frontend_type>
|
app/code/local/Yellow/Bitcoin/sql/bitcoin_setup/mysql4-install-0.1.0.php
CHANGED
@@ -1,8 +1,9 @@
|
|
1 |
<?php
|
2 |
-
$installer = $this;
|
3 |
-
$installer->startSetup();
|
4 |
|
5 |
-
$installer->run(
|
|
|
6 |
CREATE TABLE IF NOT EXISTS `{$installer->getTable('bitcoin/ipn')}` (
|
7 |
`id` int(10) unsigned NOT NULL auto_increment,
|
8 |
`quote_id` int(10) unsigned default NULL,
|
@@ -26,7 +27,8 @@ CREATE TABLE IF NOT EXISTS `{$installer->getTable('bitcoin/ipn')}` (
|
|
26 |
KEY `order_id` (`order_id`),
|
27 |
KEY `invoice_id` (`invoice_id`)
|
28 |
) ENGINE=INNODB DEFAULT CHARSET=utf8 ;
|
29 |
-
"
|
|
|
30 |
|
31 |
-
$installer->endSetup();
|
32 |
|
1 |
<?php
|
2 |
+
$installer = $this;
|
3 |
+
$installer->startSetup();
|
4 |
|
5 |
+
$installer->run(
|
6 |
+
"
|
7 |
CREATE TABLE IF NOT EXISTS `{$installer->getTable('bitcoin/ipn')}` (
|
8 |
`id` int(10) unsigned NOT NULL auto_increment,
|
9 |
`quote_id` int(10) unsigned default NULL,
|
27 |
KEY `order_id` (`order_id`),
|
28 |
KEY `invoice_id` (`invoice_id`)
|
29 |
) ENGINE=INNODB DEFAULT CHARSET=utf8 ;
|
30 |
+
"
|
31 |
+
);
|
32 |
|
33 |
+
$installer->endSetup();
|
34 |
|
app/code/local/Yellow/Bitcoin/sql/bitcoin_setup/mysql4-upgrade-0.1.0-0.1.1.php
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
<?php
|
2 |
-
$installer = $this;
|
3 |
-
$installer->startSetup();
|
4 |
-
$installer->endSetup();
|
5 |
|
1 |
<?php
|
2 |
+
$installer = $this;
|
3 |
+
$installer->startSetup();
|
4 |
+
$installer->endSetup();
|
5 |
|
app/design/frontend/base/default/layout/bitcoin.xml
CHANGED
@@ -1,19 +1,35 @@
|
|
1 |
-
<?xml version="1.0"?>
|
2 |
-
<layout version="0.1.0">
|
3 |
<checkout_onepage_review>
|
4 |
<reference name="checkout.onepage.review.info.items.after">
|
5 |
<block name="yellow_widget" type="bitcoin/widget"/>
|
6 |
-
</reference>
|
7 |
</checkout_onepage_review>
|
8 |
-
<
|
9 |
-
<reference name="root">
|
|
|
|
|
|
|
10 |
<action method="setTemplate">
|
11 |
-
<template>page/
|
12 |
-
</action>
|
13 |
-
</reference>
|
14 |
-
<reference name="
|
15 |
-
<
|
16 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
</bitcoin_index_status>
|
18 |
</layout>
|
19 |
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<layout version="0.1.0">
|
3 |
<checkout_onepage_review>
|
4 |
<reference name="checkout.onepage.review.info.items.after">
|
5 |
<block name="yellow_widget" type="bitcoin/widget"/>
|
6 |
+
</reference>
|
7 |
</checkout_onepage_review>
|
8 |
+
<bitcoin_index_pay>
|
9 |
+
<reference name="root">
|
10 |
+
<action method="addBodyClass"><classname></classname></action>
|
11 |
+
<remove name="left" />
|
12 |
+
<remove name="right" />
|
13 |
<action method="setTemplate">
|
14 |
+
<template>page/empty.phtml</template>
|
15 |
+
</action>
|
16 |
+
</reference>
|
17 |
+
<reference name="head">
|
18 |
+
<action method="setTitle" translate="title"><title>Pay With Yellow</title></action>
|
19 |
+
<action method="addItem"><type>skin_css</type><name>css/bitcoin.css</name><params/></action>
|
20 |
+
</reference>
|
21 |
+
<reference name="content">
|
22 |
+
<block type="bitcoin/fullscreen_widget_content" name="widget_content" template="bitcoin/fullscreen/widget/content.phtml"/>
|
23 |
+
</reference>
|
24 |
+
</bitcoin_index_pay>
|
25 |
+
<bitcoin_index_status>
|
26 |
+
<reference name="root">
|
27 |
+
<remove name="left" />
|
28 |
+
<remove name="right" />
|
29 |
+
<action method="setTemplate">
|
30 |
+
<template>page/empty.phtml</template>
|
31 |
+
</action>
|
32 |
+
</reference>
|
33 |
</bitcoin_index_status>
|
34 |
</layout>
|
35 |
|
app/design/frontend/base/default/template/bitcoin/form/bitcoin.phtml
CHANGED
@@ -1,9 +1,10 @@
|
|
1 |
-
<?php
|
|
|
2 |
<ul class="form-list checkout-agreements" id="payment_form_<?php echo $this->getMethodCode() ?>" style="display:none;">
|
3 |
<li>
|
4 |
<div class="<?php echo $this->getMethodCode() ?>-instructions-content agreement-content">
|
5 |
-
<?php echo
|
6 |
</div>
|
7 |
</li>
|
8 |
</ul>
|
9 |
-
<?php endif; ?>
|
1 |
+
<?php
|
2 |
+
if(Mage::helper("bitcoin")->isFullScreen()):?>
|
3 |
<ul class="form-list checkout-agreements" id="payment_form_<?php echo $this->getMethodCode() ?>" style="display:none;">
|
4 |
<li>
|
5 |
<div class="<?php echo $this->getMethodCode() ?>-instructions-content agreement-content">
|
6 |
+
<?php echo $this->__("After selecting this payment option and placing your order, you will be redirected to a full page invoice to complete the payment");?>
|
7 |
</div>
|
8 |
</li>
|
9 |
</ul>
|
10 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/bitcoin/form/logo.phtml
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!-- Yellow Logo -->
|
2 |
+
<div id="bitcoin" style="float: left;">
|
3 |
+
<img src="<?php echo $this->getSkinUrl('images/bitcoin/bitcoin_accepted.png', array('_secure' => true)); ?>"
|
4 |
+
alt="<?php echo Mage::helper('bitcoin')->__('Yellow Bitcoin') ?>" class="v-middle" style="height:40px;"/>
|
5 |
+
<span style="margin-top: 6px;">
|
6 |
+
<?php //echo Mage::helper('bitcoin')->__('Powered By Yellow'); ?>
|
7 |
+
<small>
|
8 |
+
<a href="<?php echo "http://shubitcoin.com/"; ?>" target="_blank">
|
9 |
+
<?php echo Mage::helper('bitcoin')->__('What is Bitcoin ?'); ?>
|
10 |
+
</a>
|
11 |
+
</small>
|
12 |
+
</span>
|
13 |
+
</div>
|
14 |
+
<!-- Yellow Logo -->
|
app/design/frontend/base/default/template/bitcoin/fullscreen.phtml
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$url = $this->GetWidgetUrl();
|
3 |
+
$iframe = false;
|
4 |
+
switch ($url) {
|
5 |
+
case 'no payment':
|
6 |
+
case 'disabled':
|
7 |
+
$iframe = false;
|
8 |
+
break;
|
9 |
+
case 'paid':
|
10 |
+
echo 'Order payment received. Place Order to complete.';
|
11 |
+
$iframe = false;
|
12 |
+
break;
|
13 |
+
case false:
|
14 |
+
echo 'Error creating invoice. Please try again or try another payment solution.';
|
15 |
+
$iframe = false;
|
16 |
+
break;
|
17 |
+
default:
|
18 |
+
$iframe = '<iframe src="' . $url . '" style="width:500px; height:255px; overflow:hidden; border:none; margin:auto; display:block;" scrolling="no" allowtransparency="true" frameborder="0"> </iframe>';
|
19 |
+
break;
|
20 |
+
}
|
21 |
+
if ($iframe): echo $iframe;?>
|
22 |
+
<script type="text/javascript">
|
23 |
+
function invoiceListener(event) {
|
24 |
+
if (event.origin != "https://yolanda-perkins.herokuapp.com") {
|
25 |
+
alert("Received message from unexpected domain: " + event.origin);
|
26 |
+
return;
|
27 |
+
}
|
28 |
+
switch (event.data) {
|
29 |
+
case "authorizing":
|
30 |
+
window.location = "<?php echo Mage::getUrl("bitcoin/index/status");?>";
|
31 |
+
break;
|
32 |
+
case "expired":
|
33 |
+
case "refund_requested":
|
34 |
+
break;
|
35 |
+
default:
|
36 |
+
alert("unknown order status :" + event.data);
|
37 |
+
break;
|
38 |
+
}
|
39 |
+
}
|
40 |
+
// Attach the message listener
|
41 |
+
if (window.addEventListener) {
|
42 |
+
addEventListener("message", invoiceListener, false)
|
43 |
+
} else {
|
44 |
+
attachEvent("onmessage", invoiceListener)
|
45 |
+
}
|
46 |
+
</script>
|
47 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/bitcoin/fullscreen/widget/content.phtml
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div id="yp-fullpage-container">
|
2 |
+
<?php echo $this->getLayout()->createBlock('bitcoin/fullscreen_widget_header')->setTemplate("bitcoin/fullscreen/widget/header.phtml")->toHtml();?>
|
3 |
+
<div id="yp-invoice-body">
|
4 |
+
<?php
|
5 |
+
$url = $this->GetWidgetUrl();
|
6 |
+
$iframe = false;
|
7 |
+
switch ($url) {
|
8 |
+
case 'no payment':
|
9 |
+
case 'disabled':
|
10 |
+
$iframe = false;
|
11 |
+
break;
|
12 |
+
case 'paid':
|
13 |
+
echo 'Order payment received. Place Order to complete.';
|
14 |
+
$iframe = false;
|
15 |
+
break;
|
16 |
+
case false:
|
17 |
+
echo 'Error creating invoice. Please try again or try another payment solution.';
|
18 |
+
$iframe = false;
|
19 |
+
break;
|
20 |
+
default:
|
21 |
+
$iframe = '<iframe src="' . $url . '" scrolling="no" allowtransparency="true" frameborder="0"> </iframe>';
|
22 |
+
break;
|
23 |
+
}
|
24 |
+
if ($iframe): echo $iframe;?>
|
25 |
+
<script type="text/javascript">
|
26 |
+
function invoiceListener(event) {
|
27 |
+
console.log(event);
|
28 |
+
if (event.origin != "https://yolanda-perkins.herokuapp.com" && /\.yellowpay\.co$/.test(event.origin) == false ) {
|
29 |
+
alert("Received message from unexpected domain: " + event.origin);
|
30 |
+
return;
|
31 |
+
}
|
32 |
+
switch (event.data) {
|
33 |
+
case "authorizing":
|
34 |
+
case "paid":
|
35 |
+
window.location = "<?php echo Mage::getUrl("bitcoin/index/status");?>";
|
36 |
+
break;
|
37 |
+
case "expired":
|
38 |
+
case "refund_requested":
|
39 |
+
window.location = "<?php echo Mage::getUrl("bitcoin/index/status");?>";
|
40 |
+
break;
|
41 |
+
default:
|
42 |
+
alert("unknown order status :" + event.data);
|
43 |
+
break;
|
44 |
+
}
|
45 |
+
}
|
46 |
+
// Attach the message listener
|
47 |
+
if (window.addEventListener) {
|
48 |
+
addEventListener("message", invoiceListener, false)
|
49 |
+
} else {
|
50 |
+
attachEvent("onmessage", invoiceListener)
|
51 |
+
}
|
52 |
+
</script>
|
53 |
+
<?php endif; ?>
|
54 |
+
</div>
|
55 |
+
<?php echo $this->getLayout()->createBlock('bitcoin/fullscreen_widget_footer')->setTemplate("bitcoin/fullscreen/widget/footer.phtml")->toHtml();?>
|
56 |
+
</div>
|
app/design/frontend/base/default/template/bitcoin/fullscreen/widget/footer.phtml
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php $storeName = $this->getStoreName()?>
|
2 |
+
<?php $invoice = $this->getInvoiceData();?>
|
3 |
+
<?php $order = $this->getLastOrder();?>
|
4 |
+
<?php //$invoice = array("invoice_ccy" => "invoice_ccy" , "invoice_price" => "invoice_price" , "base_ccy" => "base_ccy" , "base_price" => "base_price");?>
|
5 |
+
<div id="yp-fullpage-footer">
|
6 |
+
<div id="yp-fullpage-yellow-bar"><div class="yp-bar"></div></div>
|
7 |
+
<div id="yp-fullpage-footer-content" class="clearfix">
|
8 |
+
<div id="yp-fullpage-invoice">
|
9 |
+
<div class="yp-normal-text"><?php echo $this->__("Order# %s" , $order->getIncrementId());?></div>
|
10 |
+
<div class="yp-vertical-space-10"></div>
|
11 |
+
<div class="yp-normal-text"><?php echo $this->__("Amount Due :");?></div>
|
12 |
+
<div class="yp-bolder-text"><?php echo $this->__($invoice["invoice_ccy"]);?> <?php echo $this->__("{$invoice["invoice_price"]}"); ?> </div>
|
13 |
+
<div class="yp-vertical-space-10"></div>
|
14 |
+
<div id="yp-info"><?php echo $this->__($invoice["invoice_ccy"]);?> <?php echo $this->__("{$invoice["invoice_price"]}"); ?> = <?php echo $this->__($invoice["base_ccy"]);?> <?php echo $this->__("{$invoice["base_price"]}"); ?></div>
|
15 |
+
</div>
|
16 |
+
<div id="yp-fullpage-info">
|
17 |
+
<div class="yp-bolder-text"><?php echo $this->__("%s is proud to accept Bitcoin!" , $storeName);?></div>
|
18 |
+
<div class="yp-vertical-space-10"></div>
|
19 |
+
<div class="yp-normal-text yp-email-field">
|
20 |
+
<span class="icon-mail2 yp-icon"></span>
|
21 |
+
<span class=“yp-email-addr"><?php echo $this->escapeHtml($this->getContactEmail());?></span>
|
22 |
+
</div>
|
23 |
+
<div class="yp-vertical-space-20"></div>
|
24 |
+
<div class="yp-bolder-text"><p><?php echo $this->__($this->getCustomerName()); ?></p></div>
|
25 |
+
<address>
|
26 |
+
<?php echo $this->getBillingAddress();?>
|
27 |
+
</address>
|
28 |
+
<div class="yp-vertical-space-10"></div>
|
29 |
+
<div class="yp-normal-text yp-email-field">
|
30 |
+
<span class="icon-mail2 yp-icon"></span>
|
31 |
+
<span class=“yp-email-addr"><?php echo $this->escapeHtml($this->getCustomerEmail());?></span>
|
32 |
+
</div>
|
33 |
+
</div>
|
34 |
+
</div>
|
35 |
+
</div>
|
36 |
+
</div>
|
app/design/frontend/base/default/template/bitcoin/fullscreen/widget/header.phtml
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php $storeName = $this->getStoreName();?>
|
2 |
+
<div id="yp-fullpage-header" class="clearfix" >
|
3 |
+
<div class="yp-header-logo">
|
4 |
+
<a href="<?php echo $this->getUrl('') ?>" title="<?php echo $this->getLogoAlt() ?>"><img src="<?php echo $this->getLogoSrc() ?>" alt="<?php echo $this->getLogoAlt() ?>" /></a>
|
5 |
+
</div>
|
6 |
+
<div class="yp-header-title"><span><?php echo $this->__("Your %s Bitcoin Invoice" , $storeName);?></span></div>
|
7 |
+
</div>
|
app/design/frontend/base/default/template/bitcoin/widget.phtml
CHANGED
@@ -1,48 +1,51 @@
|
|
1 |
<?php
|
2 |
-
$url = $this->GetWidgetUrl();
|
3 |
-
$iframe = false;
|
4 |
-
switch ($url) {
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
}
|
21 |
-
if ($iframe): echo $iframe;?>
|
22 |
-
<script type="text/javascript">
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
|
|
|
|
|
1 |
<?php
|
2 |
+
$url = $this->GetWidgetUrl();
|
3 |
+
$iframe = false;
|
4 |
+
switch ($url) {
|
5 |
+
case 'no payment':
|
6 |
+
case 'disabled':
|
7 |
+
$iframe = false;
|
8 |
+
break;
|
9 |
+
case 'paid':
|
10 |
+
echo 'Order payment received. Place Order to complete.';
|
11 |
+
$iframe = false;
|
12 |
+
break;
|
13 |
+
case false:
|
14 |
+
echo 'Error creating invoice. Please try again or try another payment solution.';
|
15 |
+
$iframe = false;
|
16 |
+
break;
|
17 |
+
default:
|
18 |
+
$iframe = '<iframe src="' . $url . '" style="width:500px; height:255px; overflow:hidden; border:none; margin:auto; display:block;" scrolling="no" allowtransparency="true" frameborder="0"> </iframe>';
|
19 |
+
break;
|
20 |
+
}
|
21 |
+
if ($iframe): echo $iframe;?>
|
22 |
+
<script type="text/javascript">
|
23 |
+
function invoiceListener(event) {
|
24 |
+
console.log(event);
|
25 |
+
if (event.origin != "https://yolanda-perkins.herokuapp.com" && !/\.yellowpay\.co$/.test(event.origin) ) {
|
26 |
+
alert("Received message from unexpected domain: " + event.origin);
|
27 |
+
return;
|
28 |
+
}
|
29 |
+
switch (event.data) {
|
30 |
+
case "authorizing":
|
31 |
+
buttons = $$("button.btn-checkout");
|
32 |
+
buttons.each(function (btn) {
|
33 |
+
btn.click();
|
34 |
+
})
|
35 |
+
break;
|
36 |
+
case "expired":
|
37 |
+
case "refund_requested":
|
38 |
+
break;
|
39 |
+
default:
|
40 |
+
alert("unknown order status :" + event.data);
|
41 |
+
break;
|
42 |
+
}
|
43 |
+
}
|
44 |
+
// Attach the message listener
|
45 |
+
if (window.addEventListener) {
|
46 |
+
addEventListener("message", invoiceListener, false)
|
47 |
+
} else {
|
48 |
+
attachEvent("onmessage", invoiceListener)
|
49 |
+
}
|
50 |
+
</script>
|
51 |
+
<?php endif; ?>
|
app/etc/modules/Yellow_Bitcoin.xml
CHANGED
@@ -26,14 +26,14 @@ SOFTWARE.
|
|
26 |
-->
|
27 |
|
28 |
<config>
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
<Mage_Payment/>
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
</config>
|
26 |
-->
|
27 |
|
28 |
<config>
|
29 |
+
<modules>
|
30 |
+
<Yellow_Bitcoin>
|
31 |
+
<active>true</active>
|
32 |
+
<codePool>local</codePool>
|
33 |
+
<depends>
|
34 |
<Mage_Payment/>
|
35 |
+
</depends>
|
36 |
+
<version>0.1.1</version>
|
37 |
+
</Yellow_Bitcoin>
|
38 |
+
</modules>
|
39 |
</config>
|
package.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Yellow_Pay</name>
|
4 |
-
<version>0.
|
5 |
<stability>stable</stability>
|
6 |
<license uri="https://github.com/YellowPay/yellow-magento/blob/master/LICENSE.md">MITL</license>
|
7 |
<channel>community</channel>
|
@@ -30,11 +30,12 @@ Bitcoin payment is received and the customer is redirected to an order confirmat
|
|
30 |

|
31 |
6.
|
32 |
Yellow converts the received Bitcoin payment into a national currency (like AED) and transfers it to the merchant’s bank account</description>
|
33 |
-
<notes>
|
|
|
34 |
<authors><author><name>James Piechota</name><user>YellowPay</user><email>james@yellowpay.co</email></author><author><name>Tawfek Daghistani</name><user>tawfekov</user><email>tawfekov@gmail.com</email></author></authors>
|
35 |
-
<date>
|
36 |
-
<time>
|
37 |
-
<contents><target name="mageetc"><dir name="modules"><file name="Yellow_Bitcoin.xml" hash="
|
38 |
<compatible/>
|
39 |
<dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
|
40 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Yellow_Pay</name>
|
4 |
+
<version>0.2.0</version>
|
5 |
<stability>stable</stability>
|
6 |
<license uri="https://github.com/YellowPay/yellow-magento/blob/master/LICENSE.md">MITL</license>
|
7 |
<channel>community</channel>
|
30 |

|
31 |
6.
|
32 |
Yellow converts the received Bitcoin payment into a national currency (like AED) and transfers it to the merchant’s bank account</description>
|
33 |
+
<notes>Verify signature on inbound IPNs
|
34 |
+
Add support for full screen invoices</notes>
|
35 |
<authors><author><name>James Piechota</name><user>YellowPay</user><email>james@yellowpay.co</email></author><author><name>Tawfek Daghistani</name><user>tawfekov</user><email>tawfekov@gmail.com</email></author></authors>
|
36 |
+
<date>2015-01-07</date>
|
37 |
+
<time>21:44:12</time>
|
38 |
+
<contents><target name="mageetc"><dir name="modules"><file name="Yellow_Bitcoin.xml" hash="d75406a63e814a73dc7506717f441d5a"/></dir></target><target name="magelocal"><dir name="Yellow"><dir name="Bitcoin"><dir name="Block"><dir name="Form"><file name="Bitcoin.php" hash="2ef2ec92b78dea7b1b75976a78bafb68"/></dir><dir name="Fullscreen"><dir name="Widget"><file name="Content.php" hash="a6430caef4b5b702558b564bf8b8f2f2"/><file name="Footer.php" hash="d1895d526c23235012ca7723b6e84218"/><file name="Header.php" hash="e2ff54196a5acc9369f4101c275d5a7c"/></dir></dir><file name="Fullscreen.php" hash="f79cce61051c201ee842d429cf86f25c"/><file name="Index.php" hash="0a2ac65b25a7c31aa457b4688b8c28ac"/><dir name="Info"><file name="Bitcoin.php" hash="7c4f19e8b6cecc559e4df0a215eba6c9"/></dir><file name="Status.php" hash="4c17f2865abb4b5689b7343fff76c78a"/><file name="Widget.php" hash="43b71ccdec0842c4dd75d6659b6bb341"/></dir><dir name="Helper"><file name="Data.php" hash="ea43d8608c76e2f52ec152069c4f672f"/></dir><dir name="Model"><file name="Bitcoin.php" hash="3d18bf52c0a10b0cd2eccb11d59e851b"/><file name="Http.php" hash="1be33e613418ed606e49aa86ed79246e"/><file name="Ipn.php" hash="63126b7a70d56faeeec0c0b79f6c26d8"/><dir name="Resource"><dir name="Ipn"><file name="Collection.php" hash="1782b9b4bb6a56962f636d18a3d1200d"/></dir><file name="Ipn.php" hash="a89a447c0fdb0e9c8847ed10dd1cb43e"/></dir></dir><dir name="controllers"><file name="IndexController.php" hash="a627fa88d52af525a325a1f89362588f"/></dir><dir name="etc"><file name="config.xml" hash="ec47da48f45364204873b6266645dd48"/><file name="system.xml" hash="43bb2b8a6ce2825cab3817b838bb2a66"/></dir><dir name="sql"><dir name="bitcoin_setup"><file name="mysql4-install-0.1.0.php" hash="a269d6b3312d60d99edb86d8bffb57f6"/><file name="mysql4-upgrade-0.1.0-0.1.1.php" hash="005d74af44930ca0fe850dace1d5e390"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="bitcoin"><dir name="form"><file name="bitcoin.phtml" hash="0d6b964950b0c9a51b975eb9ee64107c"/><file name="logo.phtml" hash="2f8adb34565c7a20f783f2ee2b244ab9"/></dir><dir name="fullscreen"><dir name="widget"><file name="content.phtml" hash="fd245b27494aa2556cff60332c97d820"/><file name="footer.phtml" hash="695cf39af69bed90a629a654efe8d5fe"/><file name="header.phtml" hash="6cee4d3bc13512d7c1fa74d44d6b97ea"/></dir></dir><file name="fullscreen.phtml" hash="e1b06afea72dd0efca00cd08ce0ae7d3"/><file name="index.phtml" hash="22b757c8eae6298b157dfe59495e0345"/><dir name="info"><file name="bitcoin.phtml" hash="297b5f325aa90c0e8d9df673b5f42654"/></dir><file name="status.phtml" hash="4d7753c3efdcad9a2974b89ec636aa4c"/><file name="widget.phtml" hash="d1b1bd2deb7c51495071d701d209aafa"/></dir></dir><dir name="layout"><file name="bitcoin.xml" hash="0f7367d75bcab10d1fec1e9f3602526b"/></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><file name="bitcoin.css" hash="d42cfe2896c1298edbb9d739d4f22ea9"/></dir><dir name="images"><dir name="bitcoin"><file name="bitcoin_accepted.png" hash="0682420205f3e2001b72901c44073163"/></dir></dir></dir></dir></dir></target></contents>
|
39 |
<compatible/>
|
40 |
<dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
|
41 |
</package>
|
skin/frontend/base/default/css/bitcoin.css
ADDED
@@ -0,0 +1,322 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
Product Name: Yellow Payment Widget
|
3 |
+
Product URL: http://www.yellowpay.co
|
4 |
+
Author: David El Achkar
|
5 |
+
Author email: David@yellowpay.co
|
6 |
+
Version: 3.0.0
|
7 |
+
*/
|
8 |
+
|
9 |
+
/* Full Page Widget CSS */
|
10 |
+
|
11 |
+
#yp-fullpage-container
|
12 |
+
{
|
13 |
+
font-family:'Vitesse SSm A','Vitesse SSm B',Arial,sans-serif;
|
14 |
+
font-weight:400;
|
15 |
+
font-size:13px;
|
16 |
+
color:#333333;
|
17 |
+
padding: 45px 10px;
|
18 |
+
max-width: 625px;
|
19 |
+
margin: auto;
|
20 |
+
}
|
21 |
+
|
22 |
+
#yp-fullpage-header
|
23 |
+
{
|
24 |
+
background-color: #f0f0f0;
|
25 |
+
width: 100%;
|
26 |
+
}
|
27 |
+
|
28 |
+
#yp-fullpage-header .yp-header-title
|
29 |
+
{
|
30 |
+
float: left;
|
31 |
+
font-weight: bold;
|
32 |
+
padding: 0px 20px;
|
33 |
+
height: 65px;
|
34 |
+
display: table;
|
35 |
+
}
|
36 |
+
|
37 |
+
#yp-fullpage-header .yp-header-title span
|
38 |
+
{
|
39 |
+
font-size: 17px;
|
40 |
+
line-height: 27px;
|
41 |
+
display: table-cell;
|
42 |
+
vertical-align: middle;
|
43 |
+
}
|
44 |
+
|
45 |
+
#yp-fullpage-header .yp-header-logo
|
46 |
+
{
|
47 |
+
float: left;
|
48 |
+
background-color: white;
|
49 |
+
padding-right: 20px;
|
50 |
+
position: relative;
|
51 |
+
height: 65px;
|
52 |
+
}
|
53 |
+
|
54 |
+
#yp-fullpage-header .yp-header-logo .logo-img
|
55 |
+
{
|
56 |
+
max-width: 150px;
|
57 |
+
min-width: 1px;
|
58 |
+
max-height: 65px;
|
59 |
+
min-height: 1px;
|
60 |
+
margin: auto;
|
61 |
+
}
|
62 |
+
|
63 |
+
#yp-invoice-body
|
64 |
+
{
|
65 |
+
position: relative;
|
66 |
+
margin: auto;
|
67 |
+
}
|
68 |
+
|
69 |
+
#yp-invoice-body > iframe
|
70 |
+
{
|
71 |
+
height:255px;
|
72 |
+
overflow:hidden;
|
73 |
+
border:none;
|
74 |
+
margin:auto;
|
75 |
+
display:block;
|
76 |
+
width: 100%;
|
77 |
+
}
|
78 |
+
|
79 |
+
#yp-fullpage-footer
|
80 |
+
{
|
81 |
+
background-color: #f0f0f0;
|
82 |
+
position: relative;
|
83 |
+
}
|
84 |
+
|
85 |
+
#yp-fullpage-yellow-bar
|
86 |
+
{
|
87 |
+
background-color: white;
|
88 |
+
position: absolute;
|
89 |
+
top: 0;
|
90 |
+
bottom: 0;
|
91 |
+
left: 0;
|
92 |
+
z-index: 0;
|
93 |
+
}
|
94 |
+
|
95 |
+
#yp-fullpage-yellow-bar .yp-bar
|
96 |
+
{
|
97 |
+
background-color: #ffcb20;
|
98 |
+
height: 100%;
|
99 |
+
width: 35px;
|
100 |
+
margin-right: 17px;
|
101 |
+
}
|
102 |
+
|
103 |
+
#yp-fullpage-footer #yp-fullpage-footer-content
|
104 |
+
{
|
105 |
+
position: relative;
|
106 |
+
z-index: 100;
|
107 |
+
padding: 45px 0px;
|
108 |
+
}
|
109 |
+
|
110 |
+
#yp-fullpage-footer-content #yp-fullpage-invoice
|
111 |
+
{
|
112 |
+
float: left;
|
113 |
+
background-color: white;
|
114 |
+
padding: 25px 25px 25px 10px;
|
115 |
+
}
|
116 |
+
|
117 |
+
#yp-fullpage-footer-content #yp-fullpage-info
|
118 |
+
{
|
119 |
+
padding-left: 230px;
|
120 |
+
padding-right: 20px
|
121 |
+
}
|
122 |
+
|
123 |
+
#yp-fullpage-footer-content #yp-fullpage-invoice .yp-info-link:after
|
124 |
+
{
|
125 |
+
display: none;
|
126 |
+
}
|
127 |
+
|
128 |
+
#yp-fullpage-info .yp-fullpage-links a
|
129 |
+
{
|
130 |
+
font-size: 12px;
|
131 |
+
font-weight: bold;
|
132 |
+
text-decoration: none;
|
133 |
+
color: #333333;
|
134 |
+
}
|
135 |
+
|
136 |
+
#yp-fullpage-info .yp-fullpage-links a:not(:last-child):after
|
137 |
+
{
|
138 |
+
content:"|";
|
139 |
+
font-weight: 700;
|
140 |
+
padding:0 6px;
|
141 |
+
}
|
142 |
+
|
143 |
+
.yp-vertical-space-10
|
144 |
+
{
|
145 |
+
width: 100%;
|
146 |
+
height: 10px;
|
147 |
+
}
|
148 |
+
|
149 |
+
.yp-vertical-space-20
|
150 |
+
{
|
151 |
+
width: 100%;
|
152 |
+
height: 20px;
|
153 |
+
}
|
154 |
+
|
155 |
+
.yp-bolder-text{
|
156 |
+
font-size: 17px;
|
157 |
+
font-weight: 500;
|
158 |
+
line-height: 20px;
|
159 |
+
}
|
160 |
+
.yp-normal-text{
|
161 |
+
font-size: 13px;
|
162 |
+
line-height: 17px;
|
163 |
+
}
|
164 |
+
|
165 |
+
@media only screen and ( max-width: 479px ) {
|
166 |
+
#yp-fullpage-footer-content #yp-fullpage-info
|
167 |
+
{
|
168 |
+
padding: 20px 20px 0px 72px;
|
169 |
+
clear: left;
|
170 |
+
max-width: none;
|
171 |
+
}
|
172 |
+
|
173 |
+
#yp-fullpage-header .yp-header-logo .logo-img
|
174 |
+
{
|
175 |
+
max-width: 70px;
|
176 |
+
}
|
177 |
+
}
|
178 |
+
|
179 |
+
.clearfix:after {
|
180 |
+
visibility:hidden;
|
181 |
+
display:block;
|
182 |
+
font-size:0;
|
183 |
+
content:" ";
|
184 |
+
clear:both;height:0
|
185 |
+
}
|
186 |
+
|
187 |
+
.yp-info-link
|
188 |
+
{
|
189 |
+
text-decoration: none;
|
190 |
+
}
|
191 |
+
|
192 |
+
#yp-icon-info {
|
193 |
+
font-size: 11px;
|
194 |
+
vertical-align: middle;
|
195 |
+
color: #999999;
|
196 |
+
padding-left: 4px;
|
197 |
+
}
|
198 |
+
|
199 |
+
#yp-info {
|
200 |
+
display: inline-block;
|
201 |
+
font-size: 10px;
|
202 |
+
line-height: 18px;
|
203 |
+
}
|
204 |
+
|
205 |
+
|
206 |
+
/* *************************************** */
|
207 |
+
/* * TK - MODIFICATIONS TO ORIGINAL FILE * */
|
208 |
+
/* *************************************** */
|
209 |
+
|
210 |
+
.yp-widget-container {
|
211 |
+
margin: auto;
|
212 |
+
}
|
213 |
+
|
214 |
+
|
215 |
+
/* *************************************** */
|
216 |
+
/* ************ TK - FONTS *************** */
|
217 |
+
/* *************************************** */
|
218 |
+
@font-face{
|
219 |
+
font-family: "Vitesse SSm A";
|
220 |
+
src: url(data:application/x-font-woff;base64,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);
|
221 |
+
font-weight:300;
|
222 |
+
font-style:normal;
|
223 |
+
}
|
224 |
+
@font-face{
|
225 |
+
font-family: "Vitesse SSm B";
|
226 |
+
src: url(data:application/x-font-woff;base64,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);
|
227 |
+
font-weight:300;
|
228 |
+
font-style:normal;
|
229 |
+
}
|
230 |
+
@font-face{
|
231 |
+
font-family: "Vitesse SSm A";
|
232 |
+
src: url(data:application/x-font-woff;base64,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);
|
233 |
+
font-weight:400;
|
234 |
+
font-style:normal;
|
235 |
+
}
|
236 |
+
@font-face{
|
237 |
+
font-family: "Vitesse SSm B";
|
238 |
+
src: url(data:application/x-font-woff;base64,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);
|
239 |
+
font-weight:400;
|
240 |
+
font-style:normal;
|
241 |
+
}
|
242 |
+
@font-face{
|
243 |
+
font-family: "Vitesse SSm A";
|
244 |
+
src: url(data:application/x-font-woff;base64,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);
|
245 |
+
font-weight:500;
|
246 |
+
font-style:normal;
|
247 |
+
}
|
248 |
+
@font-face{
|
249 |
+
font-family: "Vitesse SSm B";
|
250 |
+
src: url(data:application/x-font-woff;base64,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);
|
251 |
+
font-weight:500;
|
252 |
+
font-style:normal;
|
253 |
+
}
|
254 |
+
@font-face{
|
255 |
+
font-family: "Vitesse SSm A";
|
256 |
+
src: url(data:application/x-font-woff;base64,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);
|
257 |
+
font-weight:700;
|
258 |
+
font-style:normal;
|
259 |
+
}
|
260 |
+
@font-face{
|
261 |
+
font-family: "Vitesse SSm B";
|
262 |
+
src: url(data:application/x-font-woff;base64,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);
|
263 |
+
font-weight:700;
|
264 |
+
font-style:normal;
|
265 |
+
}
|
266 |
+
|
267 |
+
@font-face {
|
268 |
+
font-family: 'icomoon';
|
269 |
+
src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SAyoAAAC8AAAAYGNtYXAaVcxXAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zoivo+IAAAFwAAABZGhlYWQEmpKLAAAC1AAAADZoaGVhB8IDxgAAAwwAAAAkaG10eAYAAAAAAAMwAAAAFGxvY2EAKADGAAADRAAAAAxtYXhwAAsAYQAAA1AAAAAgbmFtZVcZpu4AAANwAAABRXBvc3QAAwAAAAAEuAAAACAAAwQAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADmAAPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIOYA//3//wAAAAAAIOYA//3//wAB/+MaBAADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAABQAAAIAEAAMgABwAIAA+AEIAXgAAASEiBgcOARURFBYXHgEzITI2Nz4BNRE0JicuASMFFwcRARQGBw4BIyEiJicuATU3Fx4BFx4BMzI2Nz4BPwEXNSc3ESUOAQcOASMiJicuAScBNDY3PgEzITIWFx4BFQEDgP0AGy4SERQUERIuGwMAGy4SERQUERIuG/zA4OADgAoJCBgN/QANGAgJCvuLBw4HBw8ICA8HBw4Hi/vg4P5mBAkFBQoFBQoFBQkE/mYKCQgYDQMADRgICQr+ZgMgFBIRLxr+YBsuEhEUFBESLhsBoBovERIUqKioAVD+iA0YCAkKCgkIGA28aQUHAgMCAgMCBwVpvCioqP6wRQMFAgECAgECBQMBMw0YCAkKCgkIGA3+zQABAAAAAQAABq61Zl8PPPUACwQAAAAAANC+JzcAAAAA0L4nNwAAAAAEAAMgAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAQAAAEAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAgAAAAQAAAAAAAAAAAoAFAAeALIAAQAAAAUAXwAFAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAA4AAAABAAAAAAACAA4ARwABAAAAAAADAA4AJAABAAAAAAAEAA4AVQABAAAAAAAFABYADgABAAAAAAAGAAcAMgABAAAAAAAKADQAYwADAAEECQABAA4AAAADAAEECQACAA4ARwADAAEECQADAA4AJAADAAEECQAEAA4AVQADAAEECQAFABYADgADAAEECQAGAA4AOQADAAEECQAKADQAYwBpAGMAbwBtAG8AbwBuAFYAZQByAHMAaQBvAG4AIAAxAC4AMABpAGMAbwBtAG8AbwBuaWNvbW9vbgBpAGMAbwBtAG8AbwBuAFIAZQBnAHUAbABhAHIAaQBjAG8AbQBvAG8AbgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('truetype'),
|
270 |
+
url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAUkAAsAAAAABNgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDxIDKmNtYXAAAAFoAAAATAAAAEwaVcxXZ2FzcAAAAbQAAAAIAAAACAAAABBnbHlmAAABvAAAAWQAAAFkiK+j4mhlYWQAAAMgAAAANgAAADYEmpKLaGhlYQAAA1gAAAAkAAAAJAfCA8ZobXR4AAADfAAAABQAAAAUBgAAAGxvY2EAAAOQAAAADAAAAAwAKADGbWF4cAAAA5wAAAAgAAAAIAALAGFuYW1lAAADvAAAAUUAAAFFVxmm7nBvc3QAAAUEAAAAIAAAACAAAwAAAAMEAAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA5gADwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABAA4AAAACgAIAAIAAgABACDmAP/9//8AAAAAACDmAP/9//8AAf/jGgQAAwABAAAAAAAAAAAAAAABAAH//wAPAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAUAAACABAADIAAcACAAPgBCAF4AAAEhIgYHDgEVERQWFx4BMyEyNjc+ATURNCYnLgEjBRcHEQEUBgcOASMhIiYnLgE1NxceARceATMyNjc+AT8BFzUnNxElDgEHDgEjIiYnLgEnATQ2Nz4BMyEyFhceARUBA4D9ABsuEhEUFBESLhsDABsuEhEUFBESLhv8wODgA4AKCQgYDf0ADRgICQr7iwcOBwcPCAgPBwcOB4v74OD+ZgQJBQUKBQUKBQUJBP5mCgkIGA0DAA0YCAkK/mYDIBQSES8a/mAbLhIRFBQREi4bAaAaLxESFKioqAFQ/ogNGAgJCgoJCBgNvGkFBwIDAgIDAgcFabwoqKj+sEUDBQIBAgIBAgUDATMNGAgJCgoJCBgN/s0AAQAAAAEAAAautWZfDzz1AAsEAAAAAADQvic3AAAAANC+JzcAAAAABAADIAAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAAEAAABAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAIAAAAEAAAAAAAAAAAKABQAHgCyAAEAAAAFAF8ABQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAOAAAAAQAAAAAAAgAOAEcAAQAAAAAAAwAOACQAAQAAAAAABAAOAFUAAQAAAAAABQAWAA4AAQAAAAAABgAHADIAAQAAAAAACgA0AGMAAwABBAkAAQAOAAAAAwABBAkAAgAOAEcAAwABBAkAAwAOACQAAwABBAkABAAOAFUAAwABBAkABQAWAA4AAwABBAkABgAOADkAAwABBAkACgA0AGMAaQBjAG8AbQBvAG8AbgBWAGUAcgBzAGkAbwBuACAAMQAuADAAaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AbgBSAGUAZwB1AGwAYQByAGkAYwBvAG0AbwBvAG4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format('woff');
|
271 |
+
font-weight: normal;
|
272 |
+
font-style: normal;
|
273 |
+
}
|
274 |
+
|
275 |
+
@font-face {
|
276 |
+
font-family: 'icomoon';
|
277 |
+
src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg6SB64AAAC8AAAAYGNtYXAV0dVfAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5ZtfJqkcAAAFwAAABCGhlYWQEmNpPAAACeAAAADZoaGVhB8IDxgAAArAAAAAkaG10eAYAAAAAAALUAAAAFGxvY2EAKACYAAAC6AAAAAxtYXhwAAkAQQAAAvQAAAAgbmFtZVcZpu4AAAMUAAABRXBvc3QAAwAAAAAEXAAAACAAAwQAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADqhAPA/8D/wAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIOqE//3//wAAAAAAIOqE//3//wAB/+MVgAADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAwAA/8AEAAPAABwALAA+AAABISIGBw4BFREUFhceATMhMjY3PgE1ETQmJy4BIxUyFhcyFhcJAT4BMz4BMyEBKgEjEycHEQkBEScHEyoBIyEDVf1WJD4XFxsbFxc+JAKqJD4XFxsbFxc+JAMGAwMFAv6V/pUCBQMDBgMCqv1WAgMB4h7pAYABgOke4gEDAv1WA8AbFxc+JP1WJD4XFxsbFxc+JAKqJD4XFxuAAQEDAf7TAS0BAwEB/QABOR7qAmP+MAHQ/Z3qHv7HAAAAAQAAAAEAAHKKAXhfDzz1AAsEAAAAAADQvMrpAAAAANC8yukAAP/ABAADwAAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAAEAAABAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAIAAAAEAAAAAAAAAAAKABQAHgCEAAEAAAAFAD8AAwAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAOAAAAAQAAAAAAAgAOAEcAAQAAAAAAAwAOACQAAQAAAAAABAAOAFUAAQAAAAAABQAWAA4AAQAAAAAABgAHADIAAQAAAAAACgA0AGMAAwABBAkAAQAOAAAAAwABBAkAAgAOAEcAAwABBAkAAwAOACQAAwABBAkABAAOAFUAAwABBAkABQAWAA4AAwABBAkABgAOADkAAwABBAkACgA0AGMAaQBjAG8AbQBvAG8AbgBWAGUAcgBzAGkAbwBuACAAMQAuADAAaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AbgBSAGUAZwB1AGwAYQByAGkAYwBvAG0AbwBvAG4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format('truetype'),
|
278 |
+
url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAATIAAsAAAAABHwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDpIHrmNtYXAAAAFoAAAATAAAAEwV0dVfZ2FzcAAAAbQAAAAIAAAACAAAABBnbHlmAAABvAAAAQgAAAEI18mqR2hlYWQAAALEAAAANgAAADYEmNpPaGhlYQAAAvwAAAAkAAAAJAfCA8ZobXR4AAADIAAAABQAAAAUBgAAAGxvY2EAAAM0AAAADAAAAAwAKACYbWF4cAAAA0AAAAAgAAAAIAAJAEFuYW1lAAADYAAAAUUAAAFFVxmm7nBvc3QAAASoAAAAIAAAACAAAwAAAAMEAAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA6oQDwP/A/8ADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABAA4AAAACgAIAAIAAgABACDqhP/9//8AAAAAACDqhP/9//8AAf/jFYAAAwABAAAAAAAAAAAAAAABAAH//wAPAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAMAAP/ABAADwAAcACwAPgAAASEiBgcOARURFBYXHgEzITI2Nz4BNRE0JicuASMVMhYXMhYXCQE+ATM+ATMhASoBIxMnBxEJAREnBxMqASMhA1X9ViQ+FxcbGxcXPiQCqiQ+FxcbGxcXPiQDBgMDBQL+lf6VAgUDAwYDAqr9VgIDAeIe6QGAAYDpHuIBAwL9VgPAGxcXPiT9ViQ+FxcbGxcXPiQCqiQ+FxcbgAEBAwH+0wEtAQMBAf0AATke6gJj/jAB0P2d6h7+xwAAAAEAAAABAAByigF4Xw889QALBAAAAAAA0LzK6QAAAADQvMrpAAD/wAQAA8AAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAACAAAABAAAAAAAAAAACgAUAB4AhAABAAAABQA/AAMAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIADgBHAAEAAAAAAAMADgAkAAEAAAAAAAQADgBVAAEAAAAAAAUAFgAOAAEAAAAAAAYABwAyAAEAAAAAAAoANABjAAMAAQQJAAEADgAAAAMAAQQJAAIADgBHAAMAAQQJAAMADgAkAAMAAQQJAAQADgBVAAMAAQQJAAUAFgAOAAMAAQQJAAYADgA5AAMAAQQJAAoANABjAGkAYwBvAG0AbwBvAG4AVgBlAHIAcwBpAG8AbgAgADEALgAwAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG4AUgBlAGcAdQBsAGEAcgBpAGMAbwBtAG8AbwBuAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff');
|
279 |
+
font-weight: normal;
|
280 |
+
font-style: normal;
|
281 |
+
}
|
282 |
+
|
283 |
+
.icon-mail2:before {
|
284 |
+
content: "\e600";
|
285 |
+
font-size: 18px;
|
286 |
+
}
|
287 |
+
|
288 |
+
[class^="icon-"], [class*=" icon-"] {
|
289 |
+
font-family: 'icomoon';
|
290 |
+
speak: none;
|
291 |
+
font-style: normal;
|
292 |
+
font-weight: normal;
|
293 |
+
font-variant: normal;
|
294 |
+
text-transform: none;
|
295 |
+
line-height: 1;
|
296 |
+
/* Better Font Rendering =========== */
|
297 |
+
-webkit-font-smoothing: antialiased;
|
298 |
+
-moz-osx-font-smoothing: grayscale;
|
299 |
+
}
|
300 |
+
.icon-mail2.yp-icon:before
|
301 |
+
{
|
302 |
+
font-size: 15px;
|
303 |
+
}
|
304 |
+
|
305 |
+
.yp-icon
|
306 |
+
{
|
307 |
+
display: table-cell;
|
308 |
+
vertical-align: middle;
|
309 |
+
padding: 2px 5px 0px 2px;
|
310 |
+
}
|
311 |
+
|
312 |
+
.yp-email-field
|
313 |
+
{
|
314 |
+
display: table
|
315 |
+
}
|
316 |
+
|
317 |
+
.yp-email-addr
|
318 |
+
{
|
319 |
+
display: table-cell;
|
320 |
+
vertical-align: middle;
|
321 |
+
}
|
322 |
+
|
skin/frontend/base/default/images/bitcoin/bitcoin_accepted.png
ADDED
Binary file
|