public function build()
 {
     if ($this->request->getTransactionReference()) {
         $transaction = new Transaction();
         $transaction->id = $this->request->getTransactionId();
         $transaction->guWid = $this->request->getTransactionReference();
         $transaction->creditCardData = new CreditCardData();
         if ($this->request->getToken()) {
             $transaction->secure = Secure::createResponse($this->request->getToken());
         }
     } else {
         $transaction = parent::build();
     }
     /** @var CreditCard $creditCard */
     $creditCard = $this->request->getCard();
     $transaction->creditCardData->secureCode = $creditCard->getCvv();
     return $transaction;
 }
 /**
  * @depends testBankRequest
  * @large
  * @param array $data
  * @return string
  */
 public function testPurchaseRequest(array $data)
 {
     $secure = Secure::createResponse($data['PaRes']);
     $creditCard = new CreditCardData();
     $creditCard->secureCode = '001';
     $transaction = new Transaction();
     $transaction->id = '9457892347623478';
     $transaction->guWid = $data['GuWid'];
     $transaction->creditCardData = $creditCard;
     $transaction->secure = $secure;
     $purchase = new Purchase($transaction);
     $job = Job::createPurchaseJob(self::SIGNATURE, $purchase);
     $request = new Request($job);
     $body = $this->serializer->serialize(WireCard::createWithRequest($request), 'xml');
     $response = $this->client->send($this->createRequest($body));
     /** @var WireCard $wireCard */
     $wireCard = $this->serializer->deserialize($response->getBody(true), 'Wirecard\\Element\\WireCard', 'xml');
     $response = $wireCard->response;
     $this->assertTrue($response->isSuccessful());
     $this->assertFalse($response->isRedirect());
     $this->assertNull($response->getMessage());
     return $response->getProcessingGuWid();
 }