Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1183
  • Last Modified:

LinkPoint WebServices Recurring Payment with Custom OrderId

I have installed the LinkPoint Webservices Api in my .Net application and use it to successfully conduct transactions for both one-time Sales as well as Recurring periodic billing.

I use the Web Reference to generate the SOAP call. I use the built in FDGGWSApiOrderService object and execute either the FDGGWSApiOrderRequest or FDGGWSApiActionRequest method.

I also customize the orderId using this pattern: firstName.lastName-personId-datetime ToOADate()  [* I strip out any invalid characters in the person's name such as apostrophes and the total length is capped at 100 character -- though the highest I have yet created was 60 long.]

When I submit a basic sale using FDGGWSApiOrder(), I set the OrderId property in the  TransactionDetails object to my custom orderId and the transaction is commits successfully with the correct custom orderId.

However, when I ‘install’ a recurring payment using FDGGWSApiAction() and also set the OrderId property in the  TransactionDetails object to my custom orderId - the transaction commits successfully but the OrderId is changed by LinkPoint to a random unique Id.

How can I force the custom orderId on action requests regarding recurring billing?
I don’t know if my RecurringPayment object is either misconfigured or is missing a setting to override LinkPoint’s auto-generated unique OrderId key.

FYI - my company switched over from using the COM object to WebServices for both ease of deployment in a web farm and the difficulties getting the 32bit api to run on 64bit OS.
While I had no problems assigning a custom created orderId to a recurring payment using the COM object, there is no going back to that method.

Thank you in advance for your help.
Robert

// oTrans – custom object containing all the info I need to build by transaction.
// oTrans.TrxnOrderNumber – my custom orderId

//Normal Sale Transaction  - Custom OrderId
Transaction oTransLP = new Transaction();
TransactionDetails oTrxnDetails = new TransactionDetails();
oTrxnDetails.PONumber = oTrans.TrxnPoNumber;
oTrxnDetails.InvoiceNumber = oTrans.TrxnInvoiceNumber;
oTrxnDetails.OrderId = oTrans.TrxnOrderNumber;
oTransLP.TransactionDetails = oTrxnDetails;
/** I also create and append to the oTransLP the following objects: CreditCardData, Payment, Billing, Shipping, and Notes **/

FDGGWSApiOrderRequest oOrderRequest = new FDGGWSApiOrderRequest();
oOrderRequest.Item = oTransLP;
oOrderResponse = oLPOrderService.FDGGWSApiOrder(oOrderRequest);


//Recurring Transaction [Install] – with custom OrderId
RecurringPayment oRecurring = new RecurringPayment();
oRecurring.Function = RecurringPaymentFunction.install;

RecurringPaymentInformation oRecurringInfo = new RecurringPaymentInformation();
oRecurringInfo.RecurringStartDate = DateTime.Now.ToString("yyyyMMdd"); 
oRecurringInfo.InstallmentCount = "60";
oRecurringInfo.InstallmentFrequency = "5";
oRecurringInfo.InstallmentPeriod = RecurringPaymentInformationInstallmentPeriod.year;
oRecurringInfo.InstallmentPeriodSpecified = true;
oRecurringInfo.MaximumFailures = "1";
oRecurring.RecurringPaymentInformation = oRecurringInfo;

TransactionDetails oTrxnDetails = new TransactionDetails();
oTrxnDetails.PONumber = oTrans.TrxnPoNumber;
oTrxnDetails.Recurring = Recurring.Yes;
oTrxnDetails.InvoiceNumber = oTrans.TrxnInvoiceNumber;
oTrxnDetails.OrderId = oTrans.TrxnOrderNumber;
oRecurring.TransactionDetails = oTrxnDetails;

/** I also create and append to the oTransLP the following objects: CreditCardData, Payment, Billing, Shipping, and Notes **/

FDGGWSApiActionRequest oActionRequest = new FDGGWSApiActionRequest();
LinkPointGateway.Action oAction = new LinkPointGateway.Action();
oAction.Item = oRecurring;
oActionRequest.Item = oAction;
oLPOrderService.FDGGWSApiAction(oActionRequest);

Open in new window

0
robertfowler
Asked:
robertfowler
  • 4
  • 2
1 Solution
 
coreybryantCommented:
Have you tried calling LinkPoint to ask them what was being seen on their end when the transaction was being processed?

Unfortunately, LinkPoint just really has missed the process.  They used to be a great gateway, but when they rebuilt it a few years ago, they made a lot of errors.

If you could, I would suggest another gateway - Quantum Gateway - better and more reliable / easier to work with.  But call them - that would help you (somewhat).
0
 
robertfowlerAuthor Commented:
Corey,

Thanks for the feedback. I have a call in with our Merchant Vendor regarding LinkPoint's Web Service; however, it has yet to be answered as for what LinkPoint sees - regarding the SOAP call.

I guess where I am stuck is confirming the proper configuration of the .Net 'recurring' action object being sent to the Webservice to use my custom orderId.
As I mentioned before, the recurring transaction is submitted successfully and the result is 'approved;' however, it appears the orderId is created from scratch by LinkPoint (in the exact same scenario as when I omit the orderId all together.)  

The 'single sale' order object is apparently being set up correctly as it transmits successfully and the orderId is my custom issue.

The orderId is a property of the TransactionDetails object and is being set the same way for both service requests. The only difference is one request is a 'FDGGWSApiOrderRequest' and the one I am having difficulties with is 'FDGGWSApiActionRequest'

Note: other TransactionDetails properties such as invoice number and PO number correctly get sent and recorded through my recurring billing action request - just not the OrderId.

I just don't know if there is another setting I am missing with is affecting this.
0
 
coreybryantCommented:
I wished I could help further.  I know I used to call in to check the transaction details and usually within a few minutes, they would be able to give me the error and let me know what was fixed.  However, they made a lot of cutbacks and when we started having problems with Windows 2003 server (found out back then they were not completely even supporting that, even though MS was one of the larger clients).  

With them - you have to be relentless.  Keep calling - ask for a supervisor.  You might also check out www.error1002.com for a little help.  Otherwise, call - don't take know for an answer.  Stay on the phone until you get your error resolved.  If they don't resolve it - get a ticket number and keep calling back.  That is the only language that company will understand.  They think that you will just basically get fed up and go away.  You have to approve that you are not going away and that you need answers.

(BTW, I am guessing you have the OpenSSL and the other DLL that is listed in the above URL that is needed.)  
0
Microsoft Certification Exam 74-409

Veeam® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

 
robertfowlerAuthor Commented:
My issue turned out to be a result of poor documentaion (even they couldn't recognize the problem looking at my code.)

As it turns out the orderId property is in multiple locations within the SOAP sent to their gateway.
I was setting it in the same exact spot for both recurring and single sale transactions: TransactionDetails() [the same method as the old COM Object Api].
However, that property is either not used or trumped by the OrderId property on the root RecurringPayment() object.

Robert

RecurringPayment oRecurring = new RecurringPayment();
oRecurring.Function = RecurringPaymentFunction.install;

TransactionDetails oTrxnDetails = new TransactionDetails();
oTrxnDetails.PONumber = oTrans.TrxnPoNumber;
oTrxnDetails.Recurring = Recurring.Yes;
oTrxnDetails.InvoiceNumber = oTrans.TrxnInvoiceNumber;
[b]oTrxnDetails.OrderId = oTrans.TrxnOrderNumber;[/b]
oRecurring.TransactionDetails = oTrxnDetails;

[b]//The actual problem is the fact that the OrderId needs to be set here:
oRecurring.OrderId = oTrans.TrxnOrderNumber;[/b]

/** Also append all other objects **/

FDGGWSApiActionRequest oActionRequest = new FDGGWSApiActionRequest();
LinkPointGateway.Action oAction = new LinkPointGateway.Action();
oAction.Item = oRecurring;
oActionRequest.Item = oAction;
oLPOrderService.FDGGWSApiAction(oActionRequest);

Open in new window

0
 
robertfowlerAuthor Commented:
ok
0
 
robertfowlerAuthor Commented:
After working with LinkPoint to identify where the problem was, I manually created the SOAP call and noticed the second OrderId property.

After testing that setting, all worked as expected.
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 4
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now