PayPal Express Checkout: Landing Page = Billing - c#

I'm trying to get the PayPal Express Checkout to consistently only use the "Billing" landing page where card numbers can be entered directly.
I have tried everything I can find on Google, and have ended up with some very odd results. When I redirect to PayPal, I get the "Billing" page 50% of the time, and the "Log in to PayPal / Check Out as Guest" page the other 50% (literally just pressing the back button and then clicking "checkout" again gives different results). I really need to get to the Billing page consistently.
SetExpressCheckoutRequestType pp_Request = new SetExpressCheckoutRequestType();
pp_Request.Version = "117.0";
pp_Request.SetExpressCheckoutRequestDetails = new SetExpressCheckoutRequestDetailsType();
pp_Request.SetExpressCheckoutRequestDetails.SolutionType = SolutionTypeType.SOLE;
pp_Request.SetExpressCheckoutRequestDetails.PaymentAction = PaymentActionCodeType.SALE;
pp_Request.SetExpressCheckoutRequestDetails.LandingPage = LandingPageType.BILLING;
pp_Request.SetExpressCheckoutRequestDetails.FundingSourceDetails = new FundingSourceDetailsType();
pp_Request.SetExpressCheckoutRequestDetails.FundingSourceDetails.UserSelectedFundingSource = UserSelectedFundingSourceType.CREDITCARD;
pp_Request.SetExpressCheckoutRequestDetails.ReturnURL = serverName + returnUrl;
pp_Request.SetExpressCheckoutRequestDetails.CancelURL = serverName + cancelUrl;
pp_Request.SetExpressCheckoutRequestDetails.OrderTotal = new BasicAmountType();
pp_Request.SetExpressCheckoutRequestDetails.OrderTotal.currencyID = CurrencyCodeType.GBP;
pp_Request.SetExpressCheckoutRequestDetails.OrderTotal.value = String.Format("{0:F2}", amount);
pp_Request.SetExpressCheckoutRequestDetails.NoShipping = "1";
As you can see, I'm setting the version AND the Solution Type AND the Payment Action AND the Landing Page AND the Funding Source, and it still doesn't work reliably.
The randomness of it feels like they're doing some A/B testing. Sometimes, on the wrong page, the button says "Check Out as Guest", and sometimes it says "Try PayPal as Guest". Whilst I don't mind A/B testing for text, a complete change of landing page when I've asked it not too seems a bit much.
What else could it be?

First: yes, PayPal continuously tests to improve their flows, so they will be doing A|B testing. The two button texts in particular sound like a classic A|B test, and presumably whatever tests out with the highest conversion rate (which means the most sales for merchants) will be adopted as the 100% solution in the future. PayPal also checks cookies to try to offer the optimal, most-likely-to-convert page to each buyer (e.g. if there is an active PayPal cookie make the PayPal login prominent; no PayPal cookie make the direct card entry more prominent). Again this is done to raise total conversion. You can work to defeat/override these choices but I would not recommend it; by imposing your expectations on your customers you are probably loosing sales.
That aside, some of what you are seeing may not be A|B testing or PayPal's conversion optimization but rather a mismatch between product and usage. ExpressCheckout is inherently a PayPal-branded/PayPal accountholder-centric payment product. It was built with no guest checkout at all, intended to be used alongside direct credit card billing (PayPal's DirectCreditCard API or some other payment gateway/processor). Later on a "guest checkout" was added to Express Checkout so it can be used as a sole solution, but asking Express Checkout to be a gateway is like asking an F150 to be a sportscar (or a sportscar to be an F150). Different product. Yes you can sometimes fit the suitcase in the passenger seat, but if your primary purpose is cargo carrying you are probably going at it the wrong way :).
If your expected usage is hosted but direct card centric with PayPal account holders considered an "add on", then consider PayPal's Hosted Sole Solution. That is PayPal's product that is intended to present card payments centrally but has an "escape" to PayPal accountholder payments rather than the reverse. Or consider integrating through Braintree (which is now PayPal), who has a good SDK that combines Braintree credit card payments plus PayPal accountholder payments.
I'd also throw out there that you might find the PayPal brand isn't so bad for your business. For most small-to-medium merchants it raises trust and can deliver significant sales lift.

Got a response from PayPal Support: it's a bug. That they don't seem to be in a hurry to fix.
UPDATE - PayPal just notified me that this is fixed.
I asked:
"I have a customer who is using Express Checkout and wants the landing page to be the "Enter Card Details" page.
They are a B2B operation, and the presence of a PayPal cookie on the computer of the secretary doing the purchase in no way indicates that a PayPal checkout is appropriate. They're almost always going to want to use a company credit card which is not linked to any PayPal account.
I'm setting all the relevant properties in the request that I can find in your documentation or on google, but they're being ignored.
Is it still possible to force the express checkout to consistently use the Landing Page Billing? "
and they replied:
"The LandingPage variable is being ignored that this point in time by the new checkout flow - this has already been brought to the attention of the developers to get it fixed.
Unfortunately we do not have an ETA for that fix at the moment.
You will be notified once the fix has been rolled out."

Related

PayPal Rest API suddenly got Instrument_Declined error

"{\"name\":\"INSTRUMENT_DECLINED\",\"message\":\"The instrument presented was either declined by the processor or bank, or it can't be used for this payment.\",\"information_link\":\"https://developer.paypal.com/docs/api/payments/#errors\",\"debug_id\":\"21fe4e5f2f8b3\"}" PayPal blog https://developer.paypal.com/docs/checkout/integration-features/funding-failure/says It is a issue with funding source but It was working fine with all the funding source before
Yes, it is a problem with the funding source. It's been declined.
There is no technical issue here.
There is actually an explanation and solution in the official paypal documentation.
A buyer's funding source can fail for several reasons, including:
The billing address associated with the financial instrument could not
be confirmed. The transaction exceeds the card limit. The card issuer
denied the transaction. If a funding source fails, the Orders API
returns the INSTRUMENT_DECLINED error. Handle this error and provide
the buyer an opportunity to select a different payment option by
restarting the payment in the onApprove function.
https://developer.paypal.com/docs/platforms/checkout/add-capabilities/handle-funding-failures/

Payflow zero amount authorization(Account verification) not working for me

Currently I am using Payflow gateway in one of my integrations. However, the Account verification which is also known as zero amount authorization which they have mentioned on their website(https://developer.paypal.com/docs/classic/payflow/integration-guide/) does not work for me. Following is the example that they have provided on their website:
TRXTYPE=A&TENDER=C&PARTNER=PayPal&USER=SuperUser&PWD=SuperUserPassword&AMT=0.00&ACCT=378282246310005
&EXPDATE=1215&INVNUM=PONUM1&VERBOSITY=HIGH&BILLTOZIP=95031
I tried it with this example and also edited a few other things such as I added vendor and CVV in the example but none of them seem to work. The error code that I get is 12 and the response message is declined. I know they have mentioned to contact issuing bank but I don't think the problem is related to bank because when I enter 0.01 amount the authorization passes without any error.
It will be really helpful if someone can provide a working example of account verification or zero amount authorization.
Kind Regards
Het Parikh.
The card that you have used in this example is AMEX: 378282246310005. There was a similar issue that I had which PayPal fixed. Probably you can try again and see if it works.

Google Admin Directory API SDK User Last Logged In Not Fully Accurate

I use the .Net API for managing my organization's users within Google Apps. Within the directory API you can "RetrieveUser". This returns a User object that has a date property of "LastLoginTime".
Google used to separate out their Last Login Time for an account into three categories using the previous api.
last_login_time - the last time you directly logged into a google service using a UI
last_web_mail_time - the last time you logged into gmail.com webmail
last_pop_time - the last time you popped or imap'ed from their server. (indirect login)
In the new SDK, I don't see a specific "How we populate this" comment within their documentation. I'm wondering, and having trouble testing to figure out the rules myself:
How this is populated?
If it is not all encompassing usage that updates this date (usage meaning ANY interaction between the user and their account), how do I get other dates?
I use the last usage date to recycle idle users. Thus I need an accurate representation of what this date is. I've tested, and it appears popping from a google account is not represented within the SDK LastLoggedIn property, even though you need to log in to pop. Thus, any user that pops from the account and doesn't "Log In" could be deleted by accident.
API Reference
Appreciate any help.
These three (And more) properties still exist, just not attached to the "LastLoginTime". If you want to know if an account is truly idle, you'll need to use the Google.Apis.Admin.Reports.reports_v1 API. You can install via NuGet.
After you make your service object (Many stack answers can show you how to do this), usage is below:
UserUsageReportResource resource = _service.UserUsageReport;
UserUsageReportResource.GetRequest request = resource.Get("User#domain.ca", "yyyy-mm-dd");
UsageReports report = request.Execute();
All the interaction dates will need to be searched through, including LastLoginTime, and then take the latest. Each application has different dates all pertaining to when the last time the user did X action.
LastLoginTime appears to be simply the last time a user directly, or indirectly (via device), logged into the Gmail service. This does not include logging in for pop etc.

payment_status in Paypal

I am using Website Payments Standard integration and in PDT I am confused about showing message to customer on return page if transaction fails due to something, but I cant get messages directly as a response from Paypal, rather I get codes. I was thinking to create a function that will take code as a Parameter and return Error Message. I went here and read about payment_status variable. I got confused when I saw same variable can can set to 1 value off 11 at one place and off 3 at another. What exactly it will return in my scenario? 1 off 3 or 1 off 11?
Edit
See that variable under Mass Pay Variables and Payment Information Variables in this link.
The payment_status would be various things depending on the txn_type. That's why they are separated in categories like that. If you get a txn_type of masspay, then the payment_status would only be 1 of those 3. The majority of the txn_type's will have a payment_status that falls in the list of 11 you mentioned. If you're using a standard button you'll typically follow the information under the Payment Information Variables section.
On another note, make sure you're not using PDT to handle any post-payment processing like updating your database, sending email notifications, etc. Even with Auto-Return enabled there is no guarantee the user will make it back to your return URL, and if they don't, that code will never run.
Instead, you should use IPN to handle such processing, which is very similar to PDT except that it happens separate from the checkout flow altogether. As soon as any transaction takes place on your account PayPal's server will POST data about that transaction to your IPN listener URL. The data will be the same as what you're looking at with PDT, but IPN will always be triggered regardless of whether or not the user makes it back to your site.
IPN will also allow you to correctly handle things like pending payments from e-checks, fraud filters, etc. that would need to clear before you deliver the product. You'll get an IPN when the pending payment takes place, and another IPN when that payment is updated to completed, failed, or whatever.
IPN also allows you to automate tasks based on refunds, disputes, etc. It's a very powerful tool, and again, it's definitely recommended over PDT.

Paypal Return Value to Website?

I have created a Paypal send payment button from Paypal developers account on my aspx page from which a user can send me payments but i wonder how i can get a unique key, about which user had made me payment.
How can i recognize which person paid me through Paypal.
I can pass any value (his mail id, name, phone number or a unique key) but i don't know how Paypal will return values to me so i can maintain user payment history in DB
is there any good forum on this ?
Please anybody help me.
You can use the CUSTOM parameter for that. It will hold up to 256 characters, so if you need more than one value you can do something like value1|value2|etc and then split it back up on the other end.
When you include the CUSTOM parameter in API requests or standard buttons it will come back in IPN notifications so you can automate processing utilizing that data however you need to.

Categories

Resources