anchor.diff:  |refundPayment
   |Should reverse an existing (settled) charge
   |getPaymentInfo
  -|Should return payment information. See <<getPaymentInfo, "Notes">> below.
  +|Should return payment information.
   |searchPayments
   |Should return payment transactions matching the specified searchKey (the implementation is up to the plugin)
   |addPaymentMethod
  
positive.code: 
  A few pointers for implementing these methods:
  
  * Almost all the `PaymentPluginApi` methods accept parameters like *Kill Bill account Id*, *Kill Bill payment id*, *Kill Bill transaction id*, etc. which are self-explanatory. These may or may not be used by your plugin code. But you may need some of these values to populate the <<PaymentTransactionInfoPlugin, PaymentTransactionInfoPlugin>> object which is returned by most of the methods.
  
  * All the methods listed in the `PaymentPluginApi` also accept `Iterable<PluginProperty> properties` as a parameter. A https://github.com/killbill/killbill-api/blob/4ae1c343a593de937415e21feecb9f5405037fa3/src/main/java/org/killbill/billing/payment/api/PluginProperty.java[PluginProperty] consists of a *key-value* pair. It can be used to pass plugin specific properties to the plugin. For example, if your plugin requires properties like *city=San Francisco* and *billing_address=abc*, a client application can create two `PluginProperty` objects and pass a `List` of these objects.
  
  * All the methods listed in the `PaymentPluginApi` also accept as parameter either a `TenantContext` or a `CallContext`.  Read only operations (operations which retrieve some data from Kill Bill) like the `getPaymentInfo` accept a `TenantContext`. Read/write operations like `authorizePayment` accept a `CallContext`. Both these values can be used for auditing purposes. 
  
  
negative.code: [[purchasePayment]]
  ==== Step 6 - Implementing GoCardlessPaymentPluginApi#purchasePayment
  
  The `purchasePayment` is used to charge a customer against a payment method. It is invoked when:
  
  * Kill Bill automatically triggers a payment corresponding to an invoice.
  * A https://killbill.github.io/slate/#account-trigger-a-payment-authorization-purchase-or-credit[direct payment api] is invoked.
  
  In the case of Gocardless, it is used to trigger payments against a *mandateId*. Thus, it is implemented as follows (See https://github.com/killbill/killbill-gocardless-example-plugin/blob/9522498ecde5849c940574c598ceb5ce088d32a7/src/main/java/org/killbill/billing/plugin/gocardless/GoCardlessPaymentPluginApi.java#L94[_GoCardlessPaymentPluginApi#purchasePayment_]):
  
  [source,java,linenums]
  ----
  