examples/tutorial/002_pair.php
<?php
/**
* Copyright (c) 2014-2015 BitPay
*
* 002 - Pairing
*
* Requirements:
* - Basic PHP Knowledge
* - Private and Public keys from 001.php
* - Account on https://test.bitpay.com
* - Pairing code
*/
$key_dir = '/tmp';
require __DIR__.'/../../vendor/autoload.php';
/**
* To load up keys that you have previously saved, you need to use the same
* storage engine. You also need to tell it the location of the key you want
* to load.
*/
$storageEngine = new \Bitpay\Storage\EncryptedFilesystemStorage('TopSecretPassword');
$privateKey = $storageEngine->load($key_dir . '/bitpay.pri');
$publicKey = $storageEngine->load($key_dir . '/bitpay.pub');
/**
* Create the client, there's a lot to it and there are some easier ways, I am
* showing the long form here to show how various things are injected into the
* client.
*/
$client = new \Bitpay\Client\Client();
/**
* The network is either livenet or testnet. You can also create your
* own as long as it implements the NetworkInterface. In this example
* we will use testnet
*/
$network = new \Bitpay\Network\Testnet();
#$network = new \Bitpay\Network\Livenet();
/**
* The adapter is what will make the calls to BitPay and return the response
* from BitPay. This can be updated or changed as long as it implements the
* AdapterInterface
*/
$adapter = new \Bitpay\Client\Adapter\CurlAdapter();
/**
* Now all the objects are created and we can inject them into the client
*/
$client->setPrivateKey($privateKey);
$client->setPublicKey($publicKey);
$client->setNetwork($network);
$client->setAdapter($adapter);
/**
* Visit https://test.bitpay.com/api-tokens and create a new pairing code. Pairing
* codes can only be used once and the generated code is valid for only 24 hours.
*/
$pairingCode = '8nmCvLR';
/**
* Currently this part is required, however future versions of the PHP SDK will
* be refactor and this part may become obsolete.
*/
$sin = new \Bitpay\SinKey('/tmp/sin.key');
$sin->setPublicKey($publicKey);
$sin->generate();
#$sin = \Bitpay\SinKey::create()->setPublicKey($publicKey)->generate();
error_log('$pairingCode: ' . $pairingCode);
error_log('$sin: ' . $sin);
/**** end ****/
$facade = '';
#leave empty to create a POS facade, or use the two below
#payroll
#merchant
if ($facade == ''):
try {
$token = $client->createToken(
array(
'pairingCode' => $pairingCode,
'label' => 'description',
'id' => (string) $sin,
)
);
} catch (\Exception $e) {
/**
* The code will throw an exception if anything goes wrong, if you did not
* change the $pairingCode value or if you are trying to use a pairing
* code that has already been used, you will get an exception. It was
* decided that it makes more sense to allow your application to handle
* this exception since each app is different and has different requirements.
*/
echo "Exception occured: " . $e->getMessage() . PHP_EOL;
echo "Pairing failed. Please check whether you're trying to pair a production pairing code on test." . PHP_EOL;
$request = $client->getRequest();
$response = $client->getResponse();
/**
* You can use the entire request/response to help figure out what went
* wrong, but for right now, we will just var_dump them.
*/
echo (string) $request . PHP_EOL . PHP_EOL . PHP_EOL;
echo (string) $response . PHP_EOL . PHP_EOL;
/**
* NOTE: The `(string)` is include so that the objects are converted to a
* user friendly string.
*/
exit(1); // We do not want to continue if something went wrong
}
/**
* You will need to persist the token somewhere, by the time you get to this
* point your application has implemented an ORM such as Doctrine or you have
* your own way to persist data. Such as using a framework or some other code
* base such as Drupal.
*/
$persistThisValue = $token->getToken();
echo 'Token obtained: ' . $persistThisValue . PHP_EOL;
endif;
if ($facade == 'merchant' || $facade == 'payroll'):
try {
$token = $client->createToken(
array(
'facade' => $facade,
'label' => 'label this token',
'id' => (string) $sin,
)
);
echo "<pre>";
var_dump($token);
echo "</pre>";
$pairingCode = $token->GetpairingCode();
$network_option = "test.";
$url = 'https://' . $network_option . 'bitpay.com/api-access-request?pairingCode=' . $pairingCode;
echo "\n$url";
echo "\n";
echo 'Token obtained: '.$token->getToken().PHP_EOL;
} catch (\Exception $e) {
echo "Exception occured: " . $e->getMessage().PHP_EOL;
echo "Pairing failed. Please check whether you're trying to pair a production pairing code on test.".PHP_EOL;
$request = $client->getRequest();
$response = $client->getResponse();
/**
* You can use the entire request/response to help figure out what went
* wrong, but for right now, we will just var_dump them.
*/
echo (string) $request.PHP_EOL.PHP_EOL.PHP_EOL;
echo (string) $response.PHP_EOL.PHP_EOL;
/**
* NOTE: The `(string)` is include so that the objects are converted to a
* user friendly string.
*/
exit(1); // We do not want to continue if something went wrong
}
endif;
/**
* Make sure you persist the token, you will need it for the next tutorial
*/