Solved

LinkPoint WebServices Recurring Payment with Custom OrderId

Posted on 2011-03-09
6
1,169 Views
Last Modified: 2013-11-29
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
Comment
Question by:robertfowler
  • 4
  • 2
6 Comments
 
LVL 29

Expert Comment

by:coreybryant
ID: 35096534
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
 

Author Comment

by:robertfowler
ID: 35098771
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
 
LVL 29

Expert Comment

by:coreybryant
ID: 35099342
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
Threat Intelligence Starter Resources

Integrating threat intelligence can be challenging, and not all companies are ready. These resources can help you build awareness and prepare for defense.

 

Accepted Solution

by:
robertfowler earned 0 total points
ID: 35139412
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
 

Author Comment

by:robertfowler
ID: 35139441
ok
0
 

Author Closing Comment

by:robertfowler
ID: 35174532
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

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Introduction Hi all and welcome to my first article on Experts Exchange. A while ago, someone asked me if i could do some tutorials on object oriented programming. I decided to do them on C#. Now you may ask me, why's that? Well, one of the re…
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
This video explains how to create simple products associated to Magento configurable product and offers fast way of their generation with Store Manager for Magento tool.
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…

708 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now