From 0ca8eb5d6897e5e5cc9316e7cbbc9b8dcd8c4f90 Mon Sep 17 00:00:00 2001 From: Aleksander Cynarski Date: Sat, 25 May 2019 13:34:04 +0200 Subject: [PATCH 1/2] feat: Simple proxy configuration --- README.md | 14 ++++++++++++++ composer.json | 2 +- lib/block_io.php | 33 +++++++++++++++++++++------------ 3 files changed, 36 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index cb36f5f..d4c4c32 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,20 @@ $block_io = new BlockIo($apiKey, $pin, $version); echo "Confirmed Balance: " . $block_io->get_balance()->data->available_balance . "\n"; ``` +Socks5 proxy configure. + +```php +$proxy = 'socks5://user:password@localhost:12345'; +$apiKey = "YOUR API KEY FOR DOGECOIN, BITCOIN, OR LITECOIN"; +$pin = "YOUR SECRET PIN"; +$version = 2; // the API version to use + +$block_io = new BlockIo($apiKey, $pin, $version, $proxy); + +echo "Confirmed Balance: " . $block_io->get_balance()->data->available_balance . "\n"; + +``` + The wrapper abstracts all methods listed at https://block.io/api/php using the same interface names. For example, to get your current account balance: ```php diff --git a/composer.json b/composer.json index 970523a..6eef5ce 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name": "block_io-php/block_io-php", + "name": "paramah/block_io-php", "license": "MIT", "description": "Block.io is the easiest way to create wallets, send, and accept payments through Bitcoin, Litecoin, and Dogecoin. This is its PHP library.", "keywords": ["block.io", "dogecoin", "bitcoin", "litecoin", "block_io"], diff --git a/lib/block_io.php b/lib/block_io.php index 98d9db2..42276c3 100644 --- a/lib/block_io.php +++ b/lib/block_io.php @@ -27,13 +27,18 @@ class BlockIo private $version; private $withdrawal_methods; private $sweep_methods; + private $proxy = null; - public function __construct($api_key, $pin, $api_version = 2) + public function __construct($api_key, $pin, $api_version = 2, $proxy = null) { // the constructor $this->api_key = $api_key; $this->pin = $pin; $this->version = $api_version; + if(null !== $proxy) { + $this->proxy = $proxy; + } + $this->withdrawal_methods = array("withdraw", "withdraw_from_user", "withdraw_from_users", "withdraw_from_label", "withdraw_from_labels", "withdraw_from_address", "withdraw_from_addresses"); $this->sweep_methods = array("sweep_from_address"); @@ -82,17 +87,21 @@ private function _request($path, $args = array(), $method = 'POST') $addedData .= $pkey . "=" . $pval; } - // Initiate cURL and set headers/options - $ch = curl_init(); - - // If we run windows, make sure the needed pem file is used - if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { - $pemfile = dirname(realpath(__FILE__)) . DIRECTORY_SEPARATOR . 'cacert.pem'; - if(!file_exists($pemfile)) { - throw new Exception("Needed .pem file not found. Please download the .pem file at http://curl.haxx.se/ca/cacert.pem and save it as " . $pemfile); - } - curl_setopt($ch, CURLOPT_CAINFO, $pemfile); - } + // Initiate cURL and set headers/options + $ch = curl_init(); + + // If we run windows, make sure the needed pem file is used + if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { + $pemfile = dirname(realpath(__FILE__)) . DIRECTORY_SEPARATOR . 'cacert.pem'; + if(!file_exists($pemfile)) { + throw new Exception("Needed .pem file not found. Please download the .pem file at http://curl.haxx.se/ca/cacert.pem and save it as " . $pemfile); + } + curl_setopt($ch, CURLOPT_CAINFO, $pemfile); + } + + if(null !== $this->proxy) { + curl_setopt($ch, CURLOPT_PROXY, $this->proxy); + } // it's a GET method if ($method == 'GET') { $url .= '&' . $addedData; } From 8d58abb65f06b2442decfddd0053be45a2b9f7d0 Mon Sep 17 00:00:00 2001 From: Aleksander Cynarski Date: Sat, 25 May 2019 13:39:34 +0200 Subject: [PATCH 2/2] feat: curl proxy configuration --- .phpintel/32c6f488fc8c1d890e4049723f7f9c65 | Bin 0 -> 7386 bytes .phpintel/aac47fb228a9bf1f11a06b8e48cababc | Bin 0 -> 6 bytes .phpintel/index | Bin 0 -> 137 bytes docker-compose.yml | 10 ++++ examples/socks5proxy.php | 57 +++++++++++++++++++++ 5 files changed, 67 insertions(+) create mode 100644 .phpintel/32c6f488fc8c1d890e4049723f7f9c65 create mode 100644 .phpintel/aac47fb228a9bf1f11a06b8e48cababc create mode 100644 .phpintel/index create mode 100644 docker-compose.yml create mode 100644 examples/socks5proxy.php diff --git a/.phpintel/32c6f488fc8c1d890e4049723f7f9c65 b/.phpintel/32c6f488fc8c1d890e4049723f7f9c65 new file mode 100644 index 0000000000000000000000000000000000000000..febb345d8d86ce70cabe2de30e4fac46466d52ce GIT binary patch literal 7386 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 literal 0 HcmV?d00001 diff --git a/.phpintel/aac47fb228a9bf1f11a06b8e48cababc b/.phpintel/aac47fb228a9bf1f11a06b8e48cababc new file mode 100644 index 0000000000000000000000000000000000000000..482c0e338367d0aeb4ddc43602ac727276f77052 GIT binary patch literal 6 NcmZo*jxA)+0{{jJ0e}Di literal 0 HcmV?d00001 diff --git a/.phpintel/index b/.phpintel/index new file mode 100644 index 0000000000000000000000000000000000000000..4a5e2a696c429fb308351d46ebfe30bc511abca7 GIT binary patch literal 137 zcmZo*t}SHHh+t=6U~tOGPtNwtFJz1@WQwo>3g~C#=ceixBo-y+CT8dd6y;~7CYKZg z8JT5?C8_#JAocN?`ML!e1^PLeNpJx@pgget_transactions(array('addresses' => $toAddress, 'type' => 'received')); + $paymentReceived = "0.0"; // using strings for high precision monetary stuff + +// print_r($txs); + + $txs = $txs->data->txs; + + // iterate over all transactions, check their confidence + foreach($txs as $tx) { + foreach($tx->amounts_received as $amountReceived) + { + if ($amountReceived->recipient == $toAddress) { + print "Amount: " . $amountReceived->amount . " Confidence: " . $tx->confidence . "\n"; + + if ($tx->confidence > $confidenceThreshold) { + $paymentReceived = bcadd($amountReceived->amount, $paymentReceived, 8); + } + } + } + } + + if (bccomp($paymentReceived,$paymentExpected,8) >= 0) { + print "Payment confirmed: " . $paymentReceived . "\n"; + break; + } else { + sleep(1); // sleep for one second and try again + } + +} + +?>