Captures a previously authorized transaction.
public void Capture();
Public Sub Capture()
After this method returns check the value of Code to determine if the transaction was successful.
Vendors/Gateways, who systematically send all Capture transactions during their end of day processing or at a specific time for their entire chain, must configure/program their systems to send the Capture transactions for all locations or merchants varying times of day based on the MerchantId or MerchantTerminalNumber (whichever provides a more random value).
To assist with implementing this logic, FDMS Rapid Connect recommends sending the Capture transactions based on the MerchantTerminalNumber in each location. For example If the last digit of the MerchantTerminalNumber is 0, set the time for the Capture transactions to be sent as xx:00 (xx=hh:00=mm). The time for the MerchantTerminalNumber ending with 1 would be xx:05. The time for the MerchantTerminalNumber ending with 2 would be xx:10. All remaining MerchantTerminalNumbers would follow this same logic. This logic would be applied across the entire chain or merchant base, to ensure that all Captures for all merchants are not systematically sent to First Data at the same time. FDMS recommends that the software calculate the offset of time based on the MerchantId or MerchantTerminalNumber, and not rely on a user to specify the time as noted above.
Important Note: You must ping your list of service provider URLs and update the URL property to the service provider with the shortest response time every 100 transactions, as well as when your application initially starts. This is not a normal ICMP ping - to determine the fastest transaction URL you must use the special Ping method inside the FDMSRegister component. (You may update your list of service provider URLs with the FDMSRegister component's ServiceDiscovery method).
Retail AuthOnly and Capture Example
retail.TPPID = "AAA000"; retail.MerchantTerminalNumber = "00000001"; retail.MerchantId = "1234"; retail.GroupId = "20001"; retail.DatawireId = "00011122233344455566"; retail.URL = "https://stg.dw.us.fdcnet.biz/rc"; retail.ApplicationId = "RAPIDCONNECTVXN"; retail.IndustryType = FdmsrcretailIndustryTypes.fitRetail; retail.STAN = "112"; retail.TransactionNumber = "1234"; retail.OrderNumber = "123"; retail.ReferenceNumber = "123456"; retail.TransactionAmount = "1200"; retail.Card.MagneticStripe = "B4012000033330026^FDCS TEST CARD /VISA^170410054321000000000000000 150 A"; retail.Card.EntryDataSource = EntryDataSources.edsTrack1; retail.AuthOnly(); string aggregate = retail.GetDetailAggregate(); //Capture retail = new Fdmsrcretail(); retail.TPPID = "AAA000"; retail.MerchantTerminalNumber = "00000001"; retail.MerchantId = "1234"; retail.GroupId = "20001"; retail.DatawireId = "00011122233344455566"; retail.URL = "https://stg.dw.us.fdcnet.biz/rc"; retail.ApplicationId = "RAPIDCONNECTVXN"; retail.IndustryType = FdmsrcretailIndustryTypes.fitRetail; retail.STAN = "113"; retail.TransactionNumber = "1235"; retail.ReferenceNumber = "123457"; retail.SetDetailAggregate(aggregate); //The TransactionAmount is populated when SetDetailAggregate is called. //TransactionAmount may be set to a different amount when capturing, //for instance to include Gratuity. retail.TransactionAmount = "1600"; retail.Capture();
.NET Standard Notes
To call this method in an asynchronous manner call CaptureAsync instead. When the method completes (or an error is encountered) the CaptureCompleted event will fire.