code: public static Protos.PaymentRequest.Builder createPaymentRequest(NetworkParameters params,
              List<Protos.Output> outputs, @Nullable String memo, @Nullable String paymentUrl,
              @Nullable byte[] merchantData) {
          final Protos.PaymentDetails.Builder paymentDetails = Protos.PaymentDetails.newBuilder();
          paymentDetails.setNetwork(params.getPaymentProtocolId());
          for (Protos.Output output : outputs)
              paymentDetails.addOutputs(output);
          if (memo != null)
              paymentDetails.setMemo(memo);
          if (paymentUrl != null)
              paymentDetails.setPaymentUrl(paymentUrl);
          if (merchantData != null)
              paymentDetails.setMerchantData(ByteString.copyFrom(merchantData));
          paymentDetails.setTime(Utils.currentTimeSeconds());
  
          final Protos.PaymentRequest.Builder paymentRequest = Protos.PaymentRequest.newBuilder();
          paymentRequest.setSerializedPaymentDetails(paymentDetails.build().toByteString());
          return paymentRequest;
      }
docs: Create a payment request. You may want to sign the request using {@link #signPaymentRequest}. Use
  {@link Protos.PaymentRequest.Builder#build} to get the actual payment request.
  
  @param params network parameters
  @param outputs list of outputs to request coins to
  @param memo arbitrary, user readable memo, or null if none
  @param paymentUrl URL to send payment message to, or null if none
  @param merchantData arbitrary merchant data, or null if none
  @return created payment request, in its builder form