/**
  * Trigger subscription failed payment event.
  *
  * @param SubscriptionInterface       $subscription
  * @param DateTimeValueInterface|null $timestamp
  */
 public function triggerSubscriptionFailedPayment(SubscriptionInterface $subscription, DateTimeValueInterface $timestamp = null)
 {
     $subscription->setGateway($this);
     $this->registerSubscription($subscription);
     if (empty($timestamp)) {
         $timestamp = new DateTimeValue();
     }
     $failed_payment = new FailedPayment($subscription->getReference(), $timestamp);
     $failed_payment->setGateway($this);
     $this->getDispatcher()->triggerSubscriptionPaymentFailed($this, $subscription, $failed_payment);
 }