});
$Command->appendParameter(new Option('description', 'd', 'product description', Option::TYPE_STRING), function ($name, $value) use(&$description) {
    $description = (string) $value;
});
$Command->appendParameter(new Option('order', 'o', 'merchant\'s order ID that will be returned back in a callback', Option::TYPE_STRING), function ($name, $value) use(&$orderId) {
    $orderId = (int) $value;
});
$Command->appendParameter(new Option('price', 'p', 'price in real currency', Option::TYPE_STRING, true), function ($name, $value) use(&$price) {
    $price = (double) $value;
});
$Command->appendParameter(new Option('private', 'r', 'project private key', Option::TYPE_STRING, true), function ($name, $value) use(&$privateKey) {
    $privateKey = (string) $value;
});
$Command->appendParameter(new Option('public', 'b', 'project public key', Option::TYPE_STRING, true), function ($name, $value) use(&$publicKey) {
    $publicKey = (string) $value;
});
$Command->appendParameter(new Option('user', 'u', 'user identifier', Option::TYPE_STRING, true), function ($name, $value) use(&$user) {
    $user = (string) $value;
});
$Command->appendParameter(new Option('verify', 'v', 'if set to 1, then transaction price will be set to 1 EUR, that will
be put on hold and then instantly returned', Option::TYPE_BOOLEAN), function ($name, $value) use(&$verifyCard) {
    $verifyCard = (bool) $value;
});
try {
    $Command->parse(true);
    $Client = new Client($publicKey, $privateKey);
    $Response = $Client->cardProcessRecurring($user, $price, $currency, $orderId, $description)->execute();
    printf("%s\n", $Response);
} catch (RequiredOptionException $Ex) {
    $Command->displayHelp();
}
 public function testCardProcessRecurring()
 {
     $Client = new Client(111, 222);
     $Request = $Client->cardProcessRecurring('999', 5.4, 'EUR');
     $this->assertEquals(['project' => '111', 'user' => '999', 'price' => 5.4, 'currency' => 'EUR', 'signature' => '7cefe246acf59297fd3673a06d890acdeb6c7e27848e1531328b3060250e466b'], $this->getRequestParametersProperty($Request));
     $Request = $Client->cardProcessRecurring('999', 5.4, 'EUR', '777');
     $this->assertEquals(['project' => '111', 'user' => '999', 'price' => 5.4, 'currency' => 'EUR', 'order_id' => '777', 'signature' => 'c19bdae6d3041ca4b3f462a1338a5e3c46455152b4a218272b7c3cc2f077767e'], $this->getRequestParametersProperty($Request));
     $Request = $Client->cardProcessRecurring('999', 5.4, 'EUR', '777', 'Lorem recurring');
     $this->assertEquals(['project' => '111', 'user' => '999', 'price' => 5.4, 'currency' => 'EUR', 'order_id' => '777', 'description' => 'Lorem recurring', 'signature' => 'ebeb906d67d3031f3a81eecf0d655b2b822be7c2dee07aea2eeb94a0d512f44d'], $this->getRequestParametersProperty($Request));
 }