code: @Nullable
      public ListenableFuture<PaymentProtocol.Ack> sendPayment(List<Transaction> txns, @Nullable Address refundAddr, @Nullable String memo)
              throws PaymentProtocolException, VerificationException, IOException {
          Protos.Payment payment = getPayment(txns, refundAddr, memo);
          if (payment == null)
              return null;
          if (isExpired())
              throw new PaymentProtocolException.Expired("PaymentRequest is expired");
          URL url;
          try {
              url = new URL(paymentDetails.getPaymentUrl());
          } catch (MalformedURLException e) {
              throw new PaymentProtocolException.InvalidPaymentURL(e);
          }
          return sendPayment(url, payment);
      }
docs: Generates a Payment message and sends the payment to the merchant who sent the PaymentRequest.
  Provide transactions built by the wallet.
  NOTE: This does not broadcast the transactions to the bitcoin network, it merely sends a Payment message to the
  merchant confirming the payment.
  Returns an object wrapping PaymentACK once received.
  If the PaymentRequest did not specify a payment_url, returns null and does nothing.
  @param txns list of transactions to be included with the Payment message.
  @param refundAddr will be used by the merchant to send money back if there was a problem.
  @param memo is a message to include in the payment message sent to the merchant.