/**
  * @param array $options
  * @return CompletePurchaseRequest
  */
 public function createRequest($options = [])
 {
     $stub = $this->stub;
     $httpRequest = new HttpRequest([], array_merge(['ik_co_id' => $stub->purse, 'ik_pm_no' => $stub->payment_no, 'ik_desc' => $stub->description, 'ik_pw_via' => $stub->payway, 'ik_am' => $stub->amount, 'ik_cur' => $stub->currency, 'ik_inv_id' => $stub->transactionId, 'ik_inv_st' => $stub->state, 'ik_inv_prc' => $stub->time, 'ik_sign' => $stub->sign], $options));
     $request = new CompletePurchaseRequest($this->getHttpClient(), $httpRequest);
     $request->initialize(['signAlgorithm' => $stub->signAlgorithm, 'signKey' => $stub->signKey]);
     return $request;
 }
 /**
  * {@inheritdoc}
  */
 public function __construct(RequestInterface $request, $data)
 {
     parent::__construct($request, $data);
     $signKey = $this->request->getTestMode() ? $this->request->getTestKey() : $this->request->getSignKey();
     $signExpected = $this->request->calculateSign($this->data, $signKey);
     if ($this->getSign() !== $signExpected) {
         throw new InvalidResponseException('Failed to validate signature: ' . $signExpected);
     }
     if ($this->getState() !== 'success') {
         throw new InvalidResponseException('The payment was not success');
     }
 }
 public function testTestMode()
 {
     $stub = $this->stub;
     $httpRequest = new HttpRequest([], ['ik_co_id' => $stub->purse, 'ik_trn_id' => $stub->transactionId, 'ik_desc' => $stub->description, 'ik_am' => $stub->amount, 'ik_cur' => $stub->currency, 'ik_inv_prc' => $stub->time, 'ik_sign' => $stub->sign, 'ik_inv_st' => $stub->state]);
     $request = new CompletePurchaseRequest($this->getHttpClient(), $httpRequest);
     $request->initialize(['testMode' => true, 'purse' => $stub->purse, 'signAlgorithm' => $stub->signAlgorithm, 'testKey' => $stub->testKey]);
     $data = $request->getData();
     $this->assertSame($stub->purse, $data['ik_co_id']);
     $this->assertSame($stub->transactionId, $data['ik_trn_id']);
     $this->assertSame($stub->description, $data['ik_desc']);
     $this->assertSame($stub->amount, $data['ik_am']);
     $this->assertSame($stub->currency, $data['ik_cur']);
     $this->assertSame($stub->time, $data['ik_inv_prc']);
 }