anchor.diff:  
   ** `successRedirectUrl` - Indicates the page to which the user should be redirected after setting up the mandate successfully. 
   
  -** `redirectFlowDescription` -  is a description that is displayed on the payment page (page where the user is redirected to set up the mandate).
  -
  -** `sessionToken` - is something that identifies the user’s session on the client application. GoCardless requires this to be supplied while *creating the redirect flow* (now, while invoking the `buildFormDescriptor` method), and while *completing the redirect flow* (when the `addPaymentMethod` is invoked) it at the end. Supplying this token twice makes sure that the person who completed the redirect flow is the person who initiated it.
  -
  -* Next, the `client.redirectFlows().create()` is invoked with the `successRedirectUrl`, `redirectFlowDescription` and `sessionToken`. This returns  a `RedirectFlow` object. The `RedirectFlow` object contains the *redirect URL*. 
  +** `redirectFlowDescription` - Is a description that is displayed on the payment page (page where the user is redirected to set up the mandate).
  +
  +** `sessionToken` - Is something that identifies the user’s session on the client application. GoCardless requires this to be supplied while *creating the redirect flow* (now, while invoking the `buildFormDescriptor` method), and while *completing the redirect flow* (when the `addPaymentMethod` is invoked) it at the end. Supplying this token twice makes sure that the person who completed the redirect flow is the person who initiated it.
  +
  +* Next, the `client.redirectFlows().create()` is invoked with the `successRedirectUrl`, `redirectFlowDescription` and `sessionToken`. This returns a `RedirectFlow` object. The `RedirectFlow` object contains the *redirect URL*. 
   
   * Finally, a `HostedPaymentPageFormDescriptor` object is created using the *redirect URL* and the *Kill Bill Account Id*. This is then returned to the client application.
   
  
positive.code: 
  == Prerequisites
  
  * Make sure to familiarize yourself with the  https://docs.killbill.io/latest/userguide_subscription.html#components-payment[Payment] section of the _Subscription Guide_ and the https://docs.killbill.io/latest/userguide_payment.html[_Payment Guide_].
  
  * Make sure to familiarize yourself with the  https://docs.killbill.io/latest/plugin_introduction.html[_Plugin Introduction_] guide.
  
  * Make sure to familiarize yourself with the plugin development process documented in the   https://docs.killbill.io/latest/plugin_development.html[_Plugin Development_] guide.
  
  
  == Developing a Payment Plugin
  
  Kill Bill provides a https://github.com/killbill/killbill-plugin-api/[Plugin API] for plugin development. This includes the https://github.com/killbill/killbill-plugin-api/blob/master/payment/src/main/java/org/killbill/billing/payment/plugin/api/PaymentPluginApi.java[`PaymentPluginApi`] interface. You need to implement this interface in order to develop a custom payment plugin.
  
  Kill Bill also provides a https://github.com/killbill/killbill-plugin-framework-java[plugin framework], which has many classes that you can use out-of the-box for plugin development. We strongly encourage you to use this framework.  
  
  == Getting Started
  
  
negative.code: 
  ** `client` This is of type http://gocardless.github.io/gocardless-pro-java/com/gocardless/GoCardlessClient.html[`GoCardlessClient`]. This is a GoCardless specific class that can be used to access the GoCardless API.
  
  * The constructor initializes the fields with the values passed in and creates a GoCardless client.
  
  Within this class, we need to implement the `buildFormDescriptor`, `addPaymentMethod`, and `purchasePayment` methods as explained in the <<using_gocardless_from_killbill, Using GoCardless from Kill Bill>> section above. These methods are implemented in the subsequent steps.
  
  [[GoCardlessPaymentTransactionInfoPlugin]]
  ==== Step 3 - Creating GoCardlessPaymentTransactionInfoPlugin
  