Solved

LinkPoint WebServices Recurring Payment with Custom OrderId

Posted on 2011-03-09
6
1,177 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Get proactive database performance tuning online

At Percona’s web store you can order full Percona Database Performance Audit in minutes. Find out the health of your database, and how to improve it. Pay online with a credit card. Improve your database performance now!

 

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

PeopleSoft Has Never Been Easier

PeopleSoft Adoption Made Smooth & Simple!

On-The-Job Training Is made Intuitive & Easy With WalkMe's On-Screen Guidance Tool.  Claim Your Free WalkMe Account Now

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Every business owner understands the significance of online customer reviews and the impact it can have on sales and revenues. With technology advancing at such a rapid pace, getting online reviews has never been easier, especially when many regions…
Learn about the eCommerce marketing trends for the year ahead.
Viewers will get an overview of the benefits and risks of using Bitcoin to accept payments. What Bitcoin is: Legality: Risks: Benefits: Which businesses are best suited?: Other things you should know: How to get started:
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.

622 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