title: How do I charge a stored credit card with the payflow pro API?
body: <p>I'm using the PayflowNETAPI class of the PayflowPro API (Payflow_dotNET.dll) to submit a transaction to store credit cards so my company doesn't have to (for PCI Compliant reassons). 
  I'm using the PNREF from the credit card store transaction to make reference transaction but I keep getting "RESULT=2&amp;PNREF=&amp;RESPMSG=Invalid tender"
  I've tried Authorization, Capture, and Sale transactions and they all give the same result. What am I doing wrong? </p>
  
  <p>I've read through the Payflow Gateway Developer Guide and Reference several times (<a href="https://developer.paypal.com/docs/classic/payflow/integration-guide/" rel="nofollow">https://developer.paypal.com/docs/classic/payflow/integration-guide/</a>). All the examples for Authorization, Capture, and Sale transactions have the credit card information in the request. There is some small sections that explain and outline credit card uploads but never use the result of the request in a reference transaction.</p>
  
  <p>Below is a sample application and the output</p>
  
  <pre><code>string creditCardUploadRequest = "TRXTYPE=L&amp;TENDER=C&amp;ACCT=4111111111111111&amp;EXPDATE=1218&amp;CVV2=250&amp;BILLTOFIRSTNAME=Homer&amp;BILLTOLASTNAME=Simpson&amp;BILLTOSTREET=350 5th Ave&amp;BILLTOCITY=New York&amp;BILLTOSTATE=NY&amp;BILLTOZIP=10118&amp;BILLTOCOUNTRY=840&amp;USER=&lt;USER&gt;&amp;VENDOR=&lt;VENDOR&gt;&amp;PARTNER=&lt;PARTNER&gt;&amp;PWD=&lt;PASSWORD&gt;&amp;VERBOSITY=HIGH";
  
  var client = new PayPal.Payments.Communication.PayflowNETAPI(HostAddress: "pilot-payflowpro.paypal.com", HostPort: 443, Timeout: 90);
  var ccUploadResponse = client.SubmitTransaction(ParamList: creditCardUploadRequest, RequestId: PayflowUtility.RequestId);
  
  //place the responses into collection
  var payPalCollection = new NameValueCollection();
  
  foreach (string element in ccUploadResponse.Split('&amp;'))
  {
      string[] Temp = element.Split('=');
      payPalCollection.Add(Temp[0], Temp[1]);
  }
  
  Console.WriteLine("creditCardUploadRequest succeeded = {0}", payPalCollection.Get("RESPMSG") == "Approved");
  
  string authorizationRequest = "TRXTYPE=A&amp;ORIGID=" + payPalCollection.Get("PNREF") + "&amp;INVNUM=ORD123456&amp;AMT=50&amp;COMMENT1=My Product Sale&amp;USER=&lt;USER&gt;&amp;VENDOR=&lt;VENDOR&gt;&amp;PARTNER=&lt;PARTNER&gt;&amp;PWD=&lt;PASSWORD&gt;&amp;VERBOSITY=HIGH";
  var authorizationResponse = client.SubmitTransaction(ParamList: authorizationRequest, RequestId: PayflowUtility.RequestId);
  
  foreach (string element in authorizationResponse.Split('&amp;'))
  {
      Console.WriteLine(element);
  }
  Console.WriteLine("\nDONE");
  Console.ReadKey();
  </code></pre>
  
  <p>OUTPUT:</p>
  
  <p>creditCardUploadRequest succeeded = True</p>
  
  <p>RESULT=2</p>
  
  <p>PNREF=A7X08AB571EC</p>
  
  <p>RESPMSG=Invalid tender</p>
  
  <p>DONE</p>