diff --git a/README.md b/README.md index edc0f26..087fd6a 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,28 @@ # MoneroWP A WooCommerce extension for accepting Monero -## Dependancies -This plugin is rather simple but there are a few things that need to be set up before hand. +## Dependencies +This plugin is rather simple but there are a few things that need to be set up beforehand. * A web server! Ideally with the most recent versions of PHP and mysql * A Monero wallet. You can find the official wallet [here](https://getmonero.org/downloads/) * [WordPress](https://wordpress.org) -Wordpress is the backend tool that is needed to use WooCommerce and this Monero plugin +WordPress is the backend tool that is needed to use WooCommerce and this Monero plugin * [WooCommerce](https://woocommerce.com) This Monero plugin is an extension of WooCommerce, which works with WordPress +* [BCMath](http://php.net/manual/en/book.bc.php) +A PHP extension used for arbitrary precision maths + ## Step 1: Activating the plugin * Downloading: First of all, you will need to download the plugin. You can download the latest release as a .zip file from https://github.com/monero-integrations/monerowp/releases If you wish, you can also download the latest source code from GitHub. This can be done with the command `git clone https://github.com/monero-integrations/monerowp.git` or can be downloaded as a zip file from the GitHub web page. * Unzip the file monerowp_release.zip if you downloaded the zip from the releases page [here](https://github.com/monero-integrations/monerowp/releases). -* Put the plugin in the correct directory: You will need to put the folder named `monero` from this repo/unzipped release into the wordpress plugins directory. This can be found at `path/to/wordpress/folder/wp-content/plugins` +* Put the plugin in the correct directory: You will need to put the folder named `monero` from this repo/unzipped release into the WordPress plugins directory. This can be found at `path/to/wordpress/folder/wp-content/plugins` * Activate the plugin from the WordPress admin panel: Once you login to the admin panel in WordPress, click on "Installed Plugins" under "Plugins". Then simply click "Activate" where it says "Monero - WooCommerce Gateway" @@ -28,20 +31,20 @@ This Monero plugin is an extension of WooCommerce, which works with WordPress * Get your Monero wallet address starting with '4' * Get your wallet secret viewkey from your wallet -A note on privacy: When you validate transactions with your private viewkey, your viewkey is sent to (but not stored on) xmrchain.net over HTTPS. This could potentally allow an attacker to see your incoming, but not outgoing, transactions if he were to get his hands on your viewkey. Even if this were to happen, your funds would still be safe and it would be impossible for somebody to steal your money. For maximum privacy use your own monero-wallet-rpc instance. +A note on privacy: When you validate transactions with your private viewkey, your viewkey is sent to (but not stored on) xmrchain.net over HTTPS. This could potentially allow an attacker to see your incoming, but not outgoing, transactions if he were to get his hands on your viewkey. Even if this were to happen, your funds would still be safe and it would be impossible for somebody to steal your money. For maximum privacy use your own monero-wallet-rpc instance. -## Step 2 Option 2: Get a monero daemon to connect to +## Step 2 Option 2: Get a Monero daemon to connect to ### Option 1: Running a full node yourself -To do this: start the monero daemon on your server and leave it running in the background. This can be accomplished by running `./monerod` inside your monero downloads folder. The first time that you start your node, the monero daemon will download and sync the entire monero blockchain. This can take several hours and is best done on a machine with at least 4GB of ram, an SSD hard drive (with at least 40GB of free space), and a high speed internet connection. +To do this: start the Monero daemon on your server and leave it running in the background. This can be accomplished by running `./monerod` inside your Monero downloads folder. The first time that you start your node, the Monero daemon will download and sync the entire Monero blockchain. This can take several hours and is best done on a machine with at least 4GB of ram, an SSD hard drive (with at least 40GB of free space), and a high speed internet connection. ### Option 2: Connecting to a remote node The easiest way to find a remote node to connect to is to visit [moneroworld.com](https://moneroworld.com/#nodes) and use one of the nodes offered. It is probably easiest to use node.moneroworld.com:18089 which will automatically connect you to a random node. -### Setup your monero wallet-rpc +### Setup your Monero wallet-rpc -* Setup a monero wallet using the monero-wallet-cli tool. If you do not know how to do this you can learn about it at [getmonero.org](https://getmonero.org/resources/user-guides/monero-wallet-cli.html) +* Setup a Monero wallet using the monero-wallet-cli tool. If you do not know how to do this you can learn about it at [getmonero.org](https://getmonero.org/resources/user-guides/monero-wallet-cli.html) * [Create a view-only wallet from that wallet for security.](https://monero.stackexchange.com/questions/3178/how-to-create-a-view-only-wallet-for-the-gui/4582#4582) @@ -61,17 +64,17 @@ The easiest way to find a remote node to connect to is to visit [moneroworld.com If You chose to use viewkey: -* Enter your monero wallet address in the box labled "Monero Address". If you do not know your address, you can run the `address` commmand in your monero wallet +* Enter your Monero wallet address in the box labeled "Monero Address". If you do not know your address, you can run the `address` command in your Monero wallet * Enter your secret viewkey in the box labeled "ViewKey" If you chose to use monero-wallet-rpc: -* Enter your monero wallet address in the box labled "Monero Address". If you do not know your address, you can run the `address` commmand in your monero wallet +* Enter your Monero wallet address in the box labeled "Monero Address". If you do not know your address, you can run the `address` command in your Monero wallet -* Enter the IP address of your server in the box labeled "Monero wallet rpc Host/IP" +* Enter the IP address of your server in the box labeled "Monero wallet RPC Host/IP" -* Enter the port number of the Wallet RPC in the box labeled "Monero wallet rpc port" (will be `18082` if you used the above example). +* Enter the port number of the Wallet RPC in the box labeled "Monero wallet RPC port" (will be `18082` if you used the above example). Finally: diff --git a/monero/include/ed25519.php b/monero/include/ed25519.php index 9852b68..e6d443b 100644 --- a/monero/include/ed25519.php +++ b/monero/include/ed25519.php @@ -48,7 +48,7 @@ class ed25519 public $B; - private $gmp; // Is the GMP extention available? + private $gmp; // Is the GMP extension available? public function __construct() { diff --git a/monero/include/monero_payments.php b/monero/include/monero_payments.php index 87014f0..92c8d04 100644 --- a/monero/include/monero_payments.php +++ b/monero/include/monero_payments.php @@ -77,8 +77,8 @@ class Monero_Gateway extends WC_Payment_Gateway if (is_admin()) { /* Save Settings */ add_action('woocommerce_update_options_payment_gateways_' . $this->id, array($this, 'process_admin_options')); - add_filter('woocommerce_currencies', 'add_my_currency'); - add_filter('woocommerce_currency_symbol', 'add_my_currency_symbol', 10, 2); + add_filter('woocommerce_currencies', array($this,'add_my_currency')); + add_filter('woocommerce_currency_symbol', array($this,'add_my_currency_symbol'), 10, 2); add_action('woocommerce_email_before_order_table', array($this, 'email_instructions'), 10, 2); } $this->monero_daemon = new Monero_Library($this->host, $this->port); @@ -136,17 +136,17 @@ class Monero_Gateway extends WC_Payment_Gateway 'title' => __('Use monero-wallet-rpc', 'monero_gateway'), 'label' => __(' Verify transactions with the monero-wallet-rpc ', 'monero_gateway'), 'type' => 'checkbox', - 'description' => __('This must be setup seperatly', 'monero_gateway'), + 'description' => __('This must be setup seperately', 'monero_gateway'), 'default' => 'no' ), 'daemon_host' => array( - 'title' => __('Monero wallet rpc Host/ IP', 'monero_gateway'), + 'title' => __('Monero wallet RPC Host/ IP', 'monero_gateway'), 'type' => 'text', 'desc_tip' => __('This is the Daemon Host/IP to authorize the payment with port', 'monero_gateway'), 'default' => 'localhost', ), 'daemon_port' => array( - 'title' => __('Monero wallet rpc port', 'monero_gateway'), + 'title' => __('Monero wallet RPC port', 'monero_gateway'), 'type' => 'text', 'desc_tip' => __('This is the Daemon Host/IP to authorize the payment with port', 'monero_gateway'), 'default' => '18080', @@ -190,7 +190,7 @@ class Monero_Gateway extends WC_Payment_Gateway return $currencies; } - function add_my_currency_symbol($currency_symbol, $currency) + public function add_my_currency_symbol($currency_symbol, $currency) { switch ($currency) { case 'XMR': @@ -222,9 +222,9 @@ class Monero_Gateway extends WC_Payment_Gateway { $wallet_amount = $this->monero_daemon->getbalance(); if (!isset($wallet_amount)) { - $this->log->add('Monero_gateway', '[ERROR] Can not connect to monero-wallet-rpc'); - echo "Your balance is: Not Avaliable "; - echo "Unlocked balance: Not Avaliable"; + $this->log->add('Monero_gateway', '[ERROR] Cannot connect to monero-wallet-rpc'); + echo "Your balance is: Not Available "; + echo "Unlocked balance: Not Available"; } else { @@ -343,7 +343,7 @@ class Monero_Gateway extends WC_Payment_Gateway echo ""; $order = wc_get_order($order_id); $amount = floatval(preg_replace('#[^\d.]#', '', $order->get_total())); - $payment_id = $this->set_paymentid_cookie(32); + $payment_id = $this->set_paymentid_cookie(8); $currency = $order->get_currency(); $amount_xmr2 = $this->changeto($amount, $currency, $payment_id); $address = $this->address; @@ -356,16 +356,20 @@ class Monero_Gateway extends WC_Payment_Gateway // If there isn't address (merchant missed that field!), $address will be the Monero address for donating :) $address = "44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A"; } - $uri = urlencode("monero:".$address."?tx_amount=".$amount_xmr2."&tx_payment_id=".$payment_id); - if($this->zero_confirm){ - $this->verify_zero_conf($payment_id, $amount_xmr2, $order_id); - } - else{ - $this->verify_non_rpc($payment_id, $amount_xmr2, $order_id); - } + + + + $decoded_address = $this->cryptonote->decode_address($address); + $pub_spendKey = $decoded_address['spendKey']; + $pub_viewKey = $decoded_address['viewKey']; + + $integrated_addr = $this->cryptonote->integrated_addr_from_keys($pub_spendKey, $pub_viewKey, $payment_id); + + $uri = urlencode("monero:".$address."?tx_amount=".$amount_xmr2."&tx_payment_id=".$payment_id); + $this->verify_non_rpc($payment_id, $amount_xmr2, $order_id, $this->zero_confirm); if($this->confirmed == false) { - echo "
*don't forget to include the payment ID in your transaction
@@ -385,7 +388,7 @@ class Monero_Gateway extends WC_Payment_GatewayError with connection of daemon, see documentation!