/**
  * This method generates a signature for the given entity (e.g. controller) 
  * and this transaction. The signature can be added for example to the
  * URL provided to the customer. 
  * 
  * The signature can than be checked with checkSecuritySignature(). This enables
  * to provided selective access to the transaction information.
  * 
  * @param string $entityToSecure
  * @return string
  */
 public function getSecuritySignature($entityToSecure)
 {
     if ($this->securityToken === null) {
         $this->securityToken = Customweb_Core_Util_Rand::getRandomString(64);
     }
     $entityToSecure = (string) $entityToSecure;
     return hash_hmac('sha512', $entityToSecure . $this->getTransactionId(), $this->securityToken);
 }
 public function __construct(Customweb_Payment_Authorization_ITransactionContext $transactionContext)
 {
     $this->transactionContext = $transactionContext;
     $this->transactionId = $transactionContext->getTransactionId();
     $this->authorizationAmount = $transactionContext->getOrderContext()->getOrderAmountInDecimals();
     $this->currencyCode = $transactionContext->getOrderContext()->getCurrencyCode();
     $this->createdOn = new Customweb_Date_DateTime();
     $this->externalTransactionId = $this->generateExternalId();
     $this->securityToken = Customweb_Core_Util_Rand::getRandomString(64);
     $skus = array();
     foreach ($this->getTransactionContext()->getOrderContext()->getInvoiceItems() as $item) {
         if (isset($skus[$item->getSku()])) {
             throw new Exception("Could not start transaction because there are multiple line items with the same SKU.");
         }
         $skus[$item->getSku()] = $item->getSku();
     }
 }