Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PayPal Error - 'Unable To Place Order' Message - M2.1.5 #9116

Closed
col-be opened this issue Apr 3, 2017 · 37 comments
Closed

PayPal Error - 'Unable To Place Order' Message - M2.1.5 #9116

col-be opened this issue Apr 3, 2017 · 37 comments
Labels
bug report Component: Payment Fixed in 2.1.x The issue has been fixed in 2.1 release line Issue: Clear Description Gate 2 Passed. Manual verification of the issue description passed Issue: Confirmed Gate 3 Passed. Manual verification of the issue completed. Issue is confirmed Issue: Format is valid Gate 1 Passed. Automatic verification of issue format passed

Comments

@col-be
Copy link

col-be commented Apr 3, 2017

Preconditions

  1. Install Magento 2.1.5 in standard environment with php 7.0.15
  2. Setup PayPal Express in Live mode with Payment Action set to 'Sale', PayPal button displayed on shopping cart, Skip Order Review Step set to 'Yes'.

Steps to reproduce

  1. Add item with custom options to shopping cart.
  2. Proceed to shopping cart page.
  3. Proceed to checkout.
  4. Complete Shipping and Billing fields and select shipping method.
  5. Proceed to payment screen, select Pay With Paypal as payment option.
  6. Select Continue to Paypal.
  7. Redirected to Paypal.
  8. Log in to PayPal.
  9. Confirm order with 'Pay Now' button.

Expected result

  1. User redirected to order success screen with order confirmation and order ID.
  2. User receives order confirmation email.
  3. Order recorded in Magento Admin.
  4. User's PayPal account debited.
  5. Stock Quantity is reduced.

Actual result

  1. User presented with message indicating that product is out of stock and that we are 'Unable to place the order.'
  2. Order recorded in admin with correct order ID.
  3. Stock quantity is reduced.
  4. User's PayPal account is debited.
  5. Order confirmation email is NOT sent.
  6. Customer sends angry email confused as to what has actually happened.

This was apparently present in Magento 2.1, highlighted here in issue 5327 but fixed in MAGETWO-56699.

But we are still seeing it in 2.1.5. In our installation, the relevant files (e.g. app/code/Magento/Catalog/Model/Product.php) include the changes made in commit 56699.

We have just upgraded from Magento 1.7.0.2, and feeling bugged out that we are still having to deal with issues in M2.

Any ideas?

@YevSent
Copy link
Contributor

YevSent commented Apr 4, 2017

Hi, @col-be, please provide additional details, like transaction details log, browser console log and order status.
I've checked on Magento 2.1.5 version with a configurable and simple product and order was placed successfully.

@korostii
Copy link
Contributor

korostii commented Apr 4, 2017

There seems to exist an inconsistency in processing exceptions by Magento2 if it happens at a certain point during the creation an order.
Namely, the user message says that the order was not created - which, in this case, is wrong.
This was also mentioned in #8978

@col-be
Copy link
Author

col-be commented Apr 4, 2017

Paypal logs aren't switched on. Nothing recorded in exceptions.log. Let me know if there are any other logs that can be looked at.

Investigating this further, the error doesn't appear to be an issue with configurable products in themselves. It appears to be an issue with configurable products which, when purchased, the stock quantity is reduced from 1 to 0 (out of stock).

Described by customer today as:

I have tried to purchase the following items on your website - the first being out of stock when I came to pay via paypal but payment has actually been taken, and the second said 'order cannot be placed' but again a payment has gone through via paypal.

@YevSent
Copy link
Contributor

YevSent commented Apr 4, 2017

Please, enable debug log and provide transaction details like a response from PayPal.

@col-be
Copy link
Author

col-be commented Apr 4, 2017

From debug.log. The main thing is:

[2017-04-04 11:32:51] main.DEBUG: cache_invalidate: {"method":"GET","url":"https://website.co.uk/paypal/express/return/?token=EC-8WR37099B8892863M&PayerID=8N8UPHJRXR7ZQ","invalidateInfo":{"tags":["catalog_product_3050","FPC"],"mode":"matchingTag"},"is_exception":false} []

The rest from around the time of the transaction:

[2017-04-04 11:32:49] main.DEBUG: SQL Select: {"0":"(website_id = :website_id)","1":"AND (dest_country_id = :country_id AND dest_region_id = :region_id AND STRCMP(LOWER(dest_city),LOWER(:city))= 0 AND :postcode LIKE dest_zip )","2":"AND (condition_name = :condition_name)","3":"AND (condition_from_value < :condition_value)","4":"AND (condition_to_value >= :condition_value)","is_exception":false} []
[2017-04-04 11:32:49] main.DEBUG: Bindings: {":country_id":"GB",":region_id":0,":city":"Wakefield",":postcode":"Wf2 8EE",":website_id":1,":condition_name":"package_value",":condition_value":64.95,"is_exception":false} []
[2017-04-04 11:32:49] main.DEBUG: SQL Select: {"0":"(website_id = :website_id)","1":"AND (dest_country_id = :country_id AND dest_region_id = :region_id AND dest_city='' AND :postcode LIKE dest_zip )","2":"AND (condition_name = :condition_name)","3":"AND (condition_from_value < :condition_value)","4":"AND (condition_to_value >= :condition_value)","is_exception":false} []
[2017-04-04 11:32:49] main.DEBUG: Bindings: {":country_id":"GB",":region_id":0,":postcode":"Wf2 8EE",":website_id":1,":condition_name":"package_value",":condition_value":64.95,"is_exception":false} []
[2017-04-04 11:32:49] main.DEBUG: SQL Select: {"0":"(website_id = :website_id)","1":"AND (dest_country_id = :country_id AND dest_region_id = :region_id AND STRCMP(LOWER(dest_city),LOWER(:city))= 0 AND dest_zip ='')","2":"AND (condition_name = :condition_name)","3":"AND (condition_from_value < :condition_value)","4":"AND (condition_to_value >= :condition_value)","is_exception":false} []
[2017-04-04 11:32:49] main.DEBUG: Bindings: {":country_id":"GB",":region_id":0,":city":"Wakefield",":website_id":1,":condition_name":"package_value",":condition_value":64.95,"is_exception":false} []
[2017-04-04 11:32:49] main.DEBUG: SQL Select: {"0":"(website_id = :website_id)","1":"AND (dest_country_id = :country_id AND dest_region_id = '0' AND STRCMP(LOWER(dest_city),LOWER(:city))= 0 AND dest_zip ='
')","2":"AND (condition_name = :condition_name)","3":"AND (condition_from_value < :condition_value)","4":"AND (condition_to_value >= :condition_value)","is_exception":false} []
[2017-04-04 11:32:49] main.DEBUG: Bindings: {":country_id":"GB",":city":"Wakefield",":website_id":1,":condition_name":"package_value",":condition_value":64.95,"is_exception":false} []
[2017-04-04 11:32:49] main.DEBUG: SQL Select: {"0":"(website_id = :website_id)","1":"AND (dest_country_id = :country_id AND dest_region_id = '0' AND dest_city ='' AND :postcode LIKE dest_zip )","2":"AND (condition_name = :condition_name)","3":"AND (condition_from_value < :condition_value)","4":"AND (condition_to_value >= :condition_value)","is_exception":false} []
[2017-04-04 11:32:49] main.DEBUG: Bindings: {":country_id":"GB",":postcode":"Wf2 8EE",":website_id":1,":condition_name":"package_value",":condition_value":64.95,"is_exception":false} []
[2017-04-04 11:32:49] main.DEBUG: SQL Select: {"0":"(website_id = :website_id)","1":"AND (dest_country_id = :country_id AND dest_region_id = :region_id AND dest_city ='
' AND dest_zip ='')","2":"AND (condition_name = :condition_name)","3":"AND (condition_from_value < :condition_value)","4":"AND (condition_to_value >= :condition_value)","is_exception":false} []
[2017-04-04 11:32:49] main.DEBUG: Bindings: {":country_id":"GB",":region_id":0,":website_id":1,":condition_name":"package_value",":condition_value":64.95,"is_exception":false} []
[2017-04-04 11:32:49] main.DEBUG: SQL Results: {"0":{"pk":"151","website_id":"1","dest_country_id":"GB","dest_region_id":"0","dest_city":"
","dest_zip":"","dest_zip_to":"","condition_name":"package_value","condition_from_value":"30.0100","condition_to_value":"1000.0000","price":"0.0000","cost":"0.0000","shipping_method":"FREE! UK 1-3 Days"},"1":{"pk":"153","website_id":"1","dest_country_id":"GB","dest_region_id":"0","dest_city":"","dest_zip":"","dest_zip_to":"","condition_name":"package_value","condition_from_value":"1.0000","condition_to_value":"1000.0000","price":"6.9500","cost":"0.0000","shipping_method":"Next Day – 1pm"},"is_exception":false} []
[2017-04-04 11:32:51] main.DEBUG: cache_invalidate: {"method":"GET","url":"https://website.co.uk/paypal/express/return/?token=EC-8WR37099B8892863M&PayerID=8N8UPHJRXR7ZQ","invalidateInfo":{"tags":["catalog_product_3050","FPC"],"mode":"matchingTag"},"is_exception":false} []
[2017-04-04 11:32:52] main.DEBUG: SQL Select: {"0":"(website_id = :website_id)","1":"AND (dest_country_id = :country_id AND dest_region_id = :region_id AND STRCMP(LOWER(dest_city),LOWER(:city))= 0 AND :postcode LIKE dest_zip )","2":"AND (condition_name = :condition_name)","3":"AND (condition_from_value < :condition_value)","4":"AND (condition_to_value >= :condition_value)","is_exception":false} []
[2017-04-04 11:32:52] main.DEBUG: Bindings: {":country_id":"GB",":region_id":0,":city":"Wakefield",":postcode":"Wf2 8EE",":website_id":1,":condition_name":"package_value",":condition_value":64.95,"is_exception":false} []
[2017-04-04 11:32:52] main.DEBUG: SQL Select: {"0":"(website_id = :website_id)","1":"AND (dest_country_id = :country_id AND dest_region_id = :region_id AND dest_city='' AND :postcode LIKE dest_zip )","2":"AND (condition_name = :condition_name)","3":"AND (condition_from_value < :condition_value)","4":"AND (condition_to_value >= :condition_value)","is_exception":false} []
[2017-04-04 11:32:52] main.DEBUG: Bindings: {":country_id":"GB",":region_id":0,":postcode":"Wf2 8EE",":website_id":1,":condition_name":"package_value",":condition_value":64.95,"is_exception":false} []
[2017-04-04 11:32:52] main.DEBUG: SQL Select: {"0":"(website_id = :website_id)","1":"AND (dest_country_id = :country_id AND dest_region_id = :region_id AND STRCMP(LOWER(dest_city),LOWER(:city))= 0 AND dest_zip ='
')","2":"AND (condition_name = :condition_name)","3":"AND (condition_from_value < :condition_value)","4":"AND (condition_to_value >= :condition_value)","is_exception":false} []
[2017-04-04 11:32:52] main.DEBUG: Bindings: {":country_id":"GB",":region_id":0,":city":"Wakefield",":website_id":1,":condition_name":"package_value",":condition_value":64.95,"is_exception":false} []
[2017-04-04 11:32:52] main.DEBUG: SQL Select: {"0":"(website_id = :website_id)","1":"AND (dest_country_id = :country_id AND dest_region_id = '0' AND STRCMP(LOWER(dest_city),LOWER(:city))= 0 AND dest_zip ='')","2":"AND (condition_name = :condition_name)","3":"AND (condition_from_value < :condition_value)","4":"AND (condition_to_value >= :condition_value)","is_exception":false} []
[2017-04-04 11:32:52] main.DEBUG: Bindings: {":country_id":"GB",":city":"Wakefield",":website_id":1,":condition_name":"package_value",":condition_value":64.95,"is_exception":false} []
[2017-04-04 11:32:52] main.DEBUG: SQL Select: {"0":"(website_id = :website_id)","1":"AND (dest_country_id = :country_id AND dest_region_id = '0' AND dest_city ='
' AND :postcode LIKE dest_zip )","2":"AND (condition_name = :condition_name)","3":"AND (condition_from_value < :condition_value)","4":"AND (condition_to_value >= :condition_value)","is_exception":false} []
[2017-04-04 11:32:52] main.DEBUG: Bindings: {":country_id":"GB",":postcode":"Wf2 8EE",":website_id":1,":condition_name":"package_value",":condition_value":64.95,"is_exception":false} []
[2017-04-04 11:32:52] main.DEBUG: SQL Select: {"0":"(website_id = :website_id)","1":"AND (dest_country_id = :country_id AND dest_region_id = :region_id AND dest_city ='' AND dest_zip ='')","2":"AND (condition_name = :condition_name)","3":"AND (condition_from_value < :condition_value)","4":"AND (condition_to_value >= :condition_value)","is_exception":false} []
[2017-04-04 11:32:52] main.DEBUG: Bindings: {":country_id":"GB",":region_id":0,":website_id":1,":condition_name":"package_value",":condition_value":64.95,"is_exception":false} []
[2017-04-04 11:32:52] main.DEBUG: SQL Results: {"0":{"pk":"151","website_id":"1","dest_country_id":"GB","dest_region_id":"0","dest_city":"","dest_zip":"","dest_zip_to":"","condition_name":"package_value","condition_from_value":"30.0100","condition_to_value":"1000.0000","price":"0.0000","cost":"0.0000","shipping_method":"FREE! UK 1-3 Days"},"1":{"pk":"153","website_id":"1","dest_country_id":"GB","dest_region_id":"0","dest_city":"","dest_zip":"","dest_zip_to":"","condition_name":"package_value","condition_from_value":"1.0000","condition_to_value":"1000.0000","price":"6.9500","cost":"0.0000","shipping_method":"Next Day – 1pm"},"is_exception":false} []

@YevSent
Copy link
Contributor

YevSent commented Apr 4, 2017

Did you enable debug mode for PayPal? I don't see transaction details for PayPal.

@col-be
Copy link
Author

col-be commented Apr 4, 2017

Debug logs weren't switched on for this transaction. I do now have the logs from Paypal for each transaction though. But they contain sensitive information; I don't know how to send them to you.

@YevSent
Copy link
Contributor

YevSent commented Apr 4, 2017

You can remove all sensitive information, like address, merchant, card details, etc. I need to see response codes, card verifications and messages from PayPal.

@col-be
Copy link
Author

col-be commented Apr 4, 2017

Thanks. These are the details for the 3 transactions.

Event Type API
Event ID 10
Data Type Blob
Timestamp 04-Apr-2017 12:28:23 BST (1491305303)
EventName GetExpressCheckoutDetailsForETL
flowlogging_id  
CAL 52aca5e7402
feed ULA
EventTime 1491305303255
token EC-041227783T3441733
api_version 72.00
payer_id 8N8UPHJRXR7ZQ
buyer_country GB
counter_party 1953312035196700812
ba_accepted 0
checkout_status PaymentActionNotInitiated

Event Type API
Event ID 10
Data Type Blob
Timestamp 04-Apr-2017 12:28:23 BST (1491305303)
GetExpressCheckoutDetailsRequest  
token "EC-041227783T3441733"
method "GetExpressCheckoutDetails"
version "72.0"
   
CAL 52aca5e7402
user colin_api1.lwebsite.co.uk
seller_acct_num number
correlation_id 52aca5e7402
GetExpressCheckoutDetailsResponse  
token "EC-041227783T3441733"
billingagreementacceptedstatus "0"
note ""
checkoutstatus "PaymentActionNotInitiated"
timestamp "2017-04-04T11:28:23Z"
correlationid "52aca5e7402"
ack "Success"
version "72.0"
build "31674279"
payerstatus "verified"
salutation ""
middlename ""
countrycode "GB"
shiptoname “Name”
shiptostreet “Street”
shiptostreet2 “Street2”
shiptocity “City”
shiptostate ""
shiptozip “Postcode”
shiptocountrycode "GB"
shiptophonenum “Tel no“
shiptocountryname "United Kingdom"
addressstatus "Confirmed"
currencycode "GBP"
amt "64.95"
itemamt "64.95"
shippingamt "0.00"
handlingamt "0.00"
taxamt "0.00"
custom ""
desc ""
invnum "100020037"
notifyurl "http://www.website.co.uk/paypal/ipn"
shippingmethod ""
profileaddresschangedate ""
insuranceamt "0.00"
shipdiscamt "0.00"
transactionid ""
insuranceoptionoffered "false"
paymentrequest_0_currencycode "GBP"
paymentrequest_0_amt "64.95"
paymentrequest_0_itemamt "64.95"
paymentrequest_0_shippingamt "0.00"
paymentrequest_0_handlingamt "0.00"
paymentrequest_0_taxamt "0.00"
paymentrequest_0_custom ""
paymentrequest_0_desc ""
paymentrequest_0_invnum "100020037"
paymentrequest_0_notifyurl "http://www.website.co.uk/paypal/ipn"
paymentrequest_0_shippingmethod ""
paymentrequest_0_profileaddresschangedate ""
paymentrequest_0_insuranceamt "0.00"
paymentrequest_0_shipdiscamt "0.00"
paymentrequest_0_notetext ""
paymentrequest_0_transactionid ""
paymentrequest_0_sellerregistrationdate ""
paymentrequest_0_insuranceoptionoffered "false"
paymentrequest_0_paymentaction ""
paymentrequest_0_paymentrequestid ""
paymentrequest_0_orderurl ""
paymentrequest_0_softdescriptor ""
paymentrequest_0_shiptoname “Name”
paymentrequest_0_shiptostreet “Street”
paymentrequest_0_shiptostreet2 “Street 2”
paymentrequest_0_shiptocity “City”
paymentrequest_0_shiptostate ""
paymentrequest_0_shiptozip “Postcode”
paymentrequest_0_shiptocountrycode "GB"
paymentrequest_0_shiptophonenum “Tel No.“
paymentrequest_0_shiptocountryname "United Kingdom"
paymentrequest_0_addressstatus "Confirmed"
paymentrequest_0_paymentreason ""
paymentrequestinfo_0_transactionid ""
paymentrequestinfo_0_paymentrequestid ""
paymentrequestinfo_0_errorcode 0
paymentrequestinfo_0_shortmessage ""
paymentrequestinfo_0_longmessage ""
paymentrequestinfo_0_severitycode ""
 
 
 
 
Event Type API
Event ID 7
Data Type Blob
Timestamp 04-Apr-2017 12:28:25 BST (1491305305)
DoExpressCheckoutPaymentRequest  
token "EC-041227783T3441733"
paymentaction "Sale"
payerid "8N8UPHJRXR7ZQ"
returnfmfdetails "1"
method "DoExpressCheckoutPayment"
version "72.0"
currencycode "GBP"
amt "64.95"
itemamt "64.95"
shippingamt "0.00"
taxamt "0.00"
buttonsource "Magento_Cart_Community"
notifyurl "https://website.co.uk/paypal/ipn/"
shiptoname “Name”
shiptostreet “Street”
shiptostreet2 “Street2”
shiptocity “City”
shiptozip “Postcode”
shiptocountrycode "GB"
shiptophonenum “tel no“
   
CAL c4e799d354d51
user colin_api1.website.co.uk
seller_acct_num number
correlation_id c4e799d354d51
DoExpressCheckoutPaymentResponse  
token "EC-041227783T3441733"
successpageredirectrequested "false"
timestamp "2017-04-04T11:28:25Z"
correlationid "c4e799d354d51"
ack "Failure"
version "72.0"
build "31674279"
errorcode 10486
shortmessage "This transaction couldn't be completed."
longmessage "This transaction couldn't be completed. Please redirect your customer to PayPal."
severitycode "Error"
errorparamid ""
errorparamvalue ""

Event Type API
Event ID 59
Data Type Blob
Timestamp 04-Apr-2017 12:28:25 BST (1491305305)
EventName DoExpressCheckoutPaymentForETL
flowlogging_id be33fe3d7ff6
CAL c4e799d354d51
feed ULA
EventTime 1491305305736
wallet_id number
is_multi_seller_payments 0
is_symphony 1
is_incentive_applied 0
token EC-041227783T3441733
api_version 72.0
payer_id 8N8UPHJRXR7ZQ
buyer_country  
ppapi_error_code 10486
pimp_rc 14990
symphony_error CC_PROCESSOR_DECLINE
bucket0  
counter_party number
seller_type 0
instant_payment_req 0
pymt_action 2
   
Event Type API
Event ID 7
Data Type Blob
Timestamp 04-Apr-2017 12:30:36 BST (1491305436)
DoExpressCheckoutPaymentRequest  
token "EC-041227783T3441733"
paymentaction "Sale"
payerid "8N8UPHJRXR7ZQ"
returnfmfdetails "1"
method "DoExpressCheckoutPayment"
version "72.0"
currencycode "GBP"
amt "64.95"
itemamt "64.95"
shippingamt "0.00"
taxamt "0.00"
buttonsource "Magento_Cart_Community"
notifyurl "https://website.co.uk/paypal/ipn/"
shiptoname “Name”
shiptostreet “Street”
shiptostreet2 “Street 2”
shiptocity “City”
shiptozip “Postcode”
shiptocountrycode "GB"
shiptophonenum “Phone number”
   
CAL 5cb6025880ab7
user colin_api1.website.co.uk
seller_acct_num number
correlation_id 5cb6025880ab7
DoExpressCheckoutPaymentResponse  
token "EC-041227783T3441733"
successpageredirectrequested "false"
timestamp "2017-04-04T11:30:36Z"
correlationid "5cb6025880ab7"
ack "Success"
version "72.0"
build "31674279"
transactionid "9XS89530P7111603G"
transactiontype "expresscheckout"
paymenttype "instant"
ordertime "2017-04-04T11:30:35Z"
amt "64.95"
feeamt "1.76"
taxamt "0.00"
currencycode "GBP"
paymentstatus "Completed"
pendingreason "None"
reasoncode "None"
protectioneligibility "Eligible"
insuranceoptionselected "false"
shippingoptionisdefault "false"
paymentinfo_0_transactionid "9XS89530P7111603G"
paymentinfo_0_parenttransactionid ""
paymentinfo_0_receiptid ""
paymentinfo_0_transactiontype "expresscheckout"
paymentinfo_0_paymenttype "instant"
paymentinfo_0_ordertime "2017-04-04T11:30:35Z"
paymentinfo_0_amt "64.95"
paymentinfo_0_feeamt "1.76"
paymentinfo_0_settleamt ""
paymentinfo_0_taxamt "0.00"
paymentinfo_0_currencycode "GBP"
paymentinfo_0_exchangerate ""
paymentinfo_0_paymentstatus "Completed"
paymentinfo_0_pendingreason "None"
paymentinfo_0_reasoncode "None"
paymentinfo_0_holddecision ""
paymentinfo_0_shippingmethod ""
paymentinfo_0_protectioneligibility "Eligible"
paymentinfo_0_protectioneligibilitytype "ItemNotReceivedEligible,UnauthorizedPaymentEligible"
paymentinfo_0_sellerregistrationdate ""
paymentinfo_0_paymentrequestid ""
paymentinfo_0_errorcode 0
paymentinfo_0_shortmessage ""
paymentinfo_0_longmessage ""
paymentinfo_0_severitycode ""
paymentinfo_0_ack "Success"

@col-be
Copy link
Author

col-be commented Apr 4, 2017

Update - this error is not happening with products with custom options going from qty 1 --> 0. It appears to be happening randomly with products with custom options (not configurable products in our case) of any quantity (not necessarily them going out of stock). I have another case of it happening, and will be able to get the Paypal logs for it tomorrow.

@YevSent
Copy link
Contributor

YevSent commented Apr 5, 2017

I see error code from PayPal in one transaction:

CAL c4e799d354d51
user colin_api1.website.co.uk
seller_acct_num number
correlation_id c4e799d354d51
DoExpressCheckoutPaymentResponse
token "EC-041227783T3441733"
successpageredirectrequested "false"
timestamp "2017-04-04T11:28:25Z"
correlationid "c4e799d354d51"
ack "Failure"
version "72.0"
build "31674279"
errorcode 10486
shortmessage "This transaction couldn't be completed."
longmessage "This transaction couldn't be completed. Please redirect your customer to PayPal."
severitycode "Error"

The error code 10486 says that payment fails due to a bad funding method https://developer.paypal.com/docs/classic/express-checkout/ht_ec_fundingfailure10486/.

Other transactions are looking good, did you have troubles with these transactions or only with mentioned one transaction?

@col-be
Copy link
Author

col-be commented Apr 5, 2017

The 10486 error was an explicit decline by the customers' bank as far as I am aware, and not to do with the issue we are experiencing.

Here are the details of another issue we had on Monday night. This is for a simple product with custom options. The customer describes the issue as:

when I tried to order the item and pay through paypal a message came up on your site saying the order couldn't be processed, I tried again and it said there was an error. I never received an order confirmation either so assumed the order had not gone through, but then found payment had been sent from Paypal,

Again, for this order, we received the order in the backend admin, we received payment, but the order confirmation email wasn't sent.

One question- for M2 Paypal what should the notification url be set as?

The PayPal logs from this transaction are as follows:

Event Type API
Event ID 10
Data Type Blob
Timestamp 03-Apr-2017 22:57:29 BST (1491256649)
GetExpressCheckoutDetailsRequest  
token "EC-4J991045LF066592M"
method "GetExpressCheckoutDetails"
version "72.0"
   
CAL 7cfa51958aaae
user colin_api1.website.co.uk
seller_acct_num a/c no
correlation_id 7cfa51958aaae
GetExpressCheckoutDetailsResponse  
token "EC-4J991045LF066592M"
billingagreementacceptedstatus "0"
note ""
checkoutstatus "PaymentActionNotInitiated"
timestamp "2017-04-03T21:57:29Z"
correlationid "7cfa51958aaae"
ack "Success"
version "72.0"
build "31674279"
payerstatus "verified"
salutation ""
middlename ""
countrycode "GB"
shiptoname “Name”
shiptostreet “Street”
shiptostreet2 “Street2”
shiptocity “City”
shiptostate “State”
shiptozip “Postcode”
shiptocountrycode "GB"
shiptophonenum “Tel No.“
shiptocountryname "United Kingdom"
addressstatus "Confirmed"
currencycode "GBP"
amt "111.90"
itemamt "104.95"
shippingamt "6.95"
handlingamt "0.00"
taxamt "0.00"
custom ""
desc ""
invnum "100020029"
notifyurl "http://www.website.co.uk/paypal/ipn"
shippingmethod ""
profileaddresschangedate ""
insuranceamt "0.00"
shipdiscamt "0.00"
transactionid ""
insuranceoptionoffered "false"
paymentrequest_0_currencycode "GBP"
paymentrequest_0_amt "111.90"
paymentrequest_0_itemamt "104.95"
paymentrequest_0_shippingamt "6.95"
paymentrequest_0_handlingamt "0.00"
paymentrequest_0_taxamt "0.00"
paymentrequest_0_custom ""
paymentrequest_0_desc ""
paymentrequest_0_invnum "100020029"
paymentrequest_0_notifyurl "http://www.website.co.uk/paypal/ipn"
paymentrequest_0_shippingmethod ""
paymentrequest_0_profileaddresschangedate ""
paymentrequest_0_insuranceamt "0.00"
paymentrequest_0_shipdiscamt "0.00"
paymentrequest_0_notetext ""
paymentrequest_0_transactionid ""
paymentrequest_0_sellerregistrationdate ""
paymentrequest_0_insuranceoptionoffered "false"
paymentrequest_0_paymentaction ""
paymentrequest_0_paymentrequestid ""
paymentrequest_0_orderurl ""
paymentrequest_0_softdescriptor ""
paymentrequest_0_shiptoname “Name”
paymentrequest_0_shiptostreet “Street”
paymentrequest_0_shiptostreet2 "Sway"
paymentrequest_0_shiptocity “City”
paymentrequest_0_shiptostate “State”
paymentrequest_0_shiptozip “Postcode”
paymentrequest_0_shiptocountrycode "GB"
paymentrequest_0_shiptophonenum “tel no“
paymentrequest_0_shiptocountryname "United Kingdom"
paymentrequest_0_addressstatus "Confirmed"
paymentrequest_0_paymentreason ""
paymentrequestinfo_0_transactionid ""
paymentrequestinfo_0_paymentrequestid ""
paymentrequestinfo_0_errorcode 0
paymentrequestinfo_0_shortmessage ""
paymentrequestinfo_0_longmessage ""
paymentrequestinfo_0_severitycode ""

@YevSent
Copy link
Contributor

YevSent commented Apr 5, 2017

One question- for M2 Paypal what should the notification url be set as?

You don't need to set it manually, Magento does it. You just need to enable IPN in your PayPal account and specify any URL (it will be overridden by request) or set URL as your_domain/paypal/ipn/.

@YevSent
Copy link
Contributor

YevSent commented Apr 5, 2017

To find original of the issue, you need to log all exceptions what are happening during place order.
You can add the next code to https://github.com/magento/magento2/blob/2.1/app/code/Magento/Checkout/Model/GuestPaymentInformationManagement.php#L83 and https://github.com/magento/magento2/blob/2.1/app/code/Magento/Checkout/Model/PaymentInformationManagement.php#L71 into the catch block:

$logger = \Magento\Framework\App\ObjectManager::getInstance()
    ->get(\Psr\Log\LoggerInterface::class);
$logger->critical($e);

@col-be
Copy link
Author

col-be commented Apr 5, 2017

Ok. So just to be clear, in PaymentInformationManagement.php there is a catch block:

catch (\Exception $e) {       
               throw new CouldNotSaveException(
                     __('An error occurred on the server. Please try to place the order again.'),
                     $e
            );
        }

which is changed to:

catch (\Exception $e) {
                 $logger = \Magento\Framework\App\ObjectManager::getInstance()
                            ->get(\Psr\Log\LoggerInterface::class);
                 $logger->critical($e);            
                 throw new CouldNotSaveException(
                       __('An error occurred on the server. Please try to place the order again.'),
                       $e
            );
        }

And the same is done in GuestPaymentInformationManagement.php?

Where will this be logged to? exceptions.log?

@YevSent
Copy link
Contributor

YevSent commented Apr 5, 2017

And the same is done in GuestPaymentInformationManagement.php?

Yes, you are right.

Where will this be logged to? exceptions.log?

Yes, all exceptions will be in the exception.log.

@col-be
Copy link
Author

col-be commented Apr 5, 2017

Ok, I have made those changes to our production site. Will update in due course.

@Will-I4M
Copy link
Contributor

Will-I4M commented Apr 7, 2017

But, according to the murphy's law, nothing happend once you did those changes.....

@col-be
Copy link
Author

col-be commented Apr 10, 2017

But, according to the murphy's law, nothing happend once you did those changes.....

Yes! But it happened today. PayPal, with a product with custom options. Nothing written to exceptions.log, but we have the following in debug.log:

[2017-04-10 14:43:40] main.DEBUG: cache_invalidate: {"method":"POST","url":"https://website.co.uk/paypal/express/placeOrder/","invalidateInfo":{"tags":["catalog_product_2328","FPC"],"mode":"matchingTag"},"is_exception":false} []
[2017-04-10 14:43:40] main.DEBUG: cache_invalidate: {"method":"POST","url":"https://website.co.uk/paypal/express/placeOrder/","invalidateInfo":{"tags":["catalog_product_2328","FPC"],"mode":"matchingTag"},"is_exception":false} []
[2017-04-10 14:43:40] main.DEBUG: cache_invalidate: {"method":"POST","url":"https://websitel.co.uk/paypal/express/placeOrder/","invalidateInfo":{"tags":["catalog_product_2328","FPC"],"mode":"matchingTag"},"is_exception":false} []

@col-be
Copy link
Author

col-be commented Apr 10, 2017

We have this in system.log:

[2017-04-10 14:33:33] main.CRITICAL: Exception message: We can't initialize Express Checkout.
Trace: #0 /chroot/home/pathtosite/html/vendor/magento/module-paypal/Controller/Express/AbstractExpress/Review.php(21): Magento\Paypal\Controller\Express\AbstractExpress->_initCheckout()
#1 /chroot/home/pathtosite/html/var/generation/Magento/Paypal/Controller/Express/Review/Interceptor.php(24): Magento\Paypal\Controller\Express\AbstractExpress\Review->execute()
#2 /chroot/home/pathtosite/html/vendor/magento/framework/App/Action/Action.php(102): Magento\Paypal\Controller\Express\Review\Interceptor->execute()
#3 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Interceptor.php(74): Magento\Framework\App\Action\Action->dispatch(Object(Magento\Framework\App\Request\Http))
#4 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Chain/Chain.php(70): Magento\Paypal\Controller\Express\Review\Interceptor->___callParent('dispatch', Array)
#5 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\Paypal\...', 'dispatch', Object(Magento\Paypal\Controller\Express\Review\Interceptor), Array, 'contextPlugin')
#6 /chroot/home/lovetobe/lovetobenatural.co.uk/html/vendor/magento/module-store/App/Action/Plugin/Context.php(106): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain{closure}(Object(Magento\Framework\App\Request\Http))
#7 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Chain/Chain.php(67): Magento\Store\App\Action\Plugin\Context->aroundDispatch(Object(Magento\Paypal\Controller\Express\Review\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#8 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\Paypal\...', 'dispatch', Object(Magento\Paypal\Controller\Express\Review\Interceptor), Array, 'customer-app-ac...')
#9 /chroot/home/pathtosite/html/vendor/magento/module-customer/Model/App/Action/ContextPlugin.php(61): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain{closure}(Object(Magento\Framework\App\Request\Http))
#10 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Chain/Chain.php(67): Magento\Customer\Model\App\Action\ContextPlugin->aroundDispatch(Object(Magento\Paypal\Controller\Express\Review\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#11 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\Paypal\...', 'dispatch', Object(Magento\Paypal\Controller\Express\Review\Interceptor), Array, 'storeCheck')
#12 /chroot/home/pathtosite/html/vendor/magento/module-store/App/Action/Plugin/StoreCheck.php(44): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain{closure}(Object(Magento\Framework\App\Request\Http))
#13 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Chain/Chain.php(67): Magento\Store\App\Action\Plugin\StoreCheck->aroundDispatch(Object(Magento\Paypal\Controller\Express\Review\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#14 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\Paypal\...', 'dispatch', Object(Magento\Paypal\Controller\Express\Review\Interceptor), Array, 'weee-app-action...')
#15 /chroot/home/pathtosite/html/vendor/magento/module-weee/Model/App/Action/ContextPlugin.php(112): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain{closure}(Object(Magento\Framework\App\Request\Http))
#16 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Chain/Chain.php(67): Magento\Weee\Model\App\Action\ContextPlugin->aroundDispatch(Object(Magento\Paypal\Controller\Express\Review\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#17 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\Paypal\...', 'dispatch', Object(Magento\Paypal\Controller\Express\Review\Interceptor), Array, 'tax-app-action-...')
#18 /chroot/home/pathtosite/html/vendor/magento/module-tax/Model/App/Action/ContextPlugin.php(91): Magento\Paypal\Controller\Express\Review\Interceptor->Magento\Framework\Interception{closure}(Object(Magento\Framework\App\Request\Http))
#19 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Interceptor.php(142): Magento\Tax\Model\App\Action\ContextPlugin->aroundDispatch(Object(Magento\Paypal\Controller\Express\Review\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#20 /chroot/home/pathtosite/html/var/generation/Magento/Paypal/Controller/Express/Review/Interceptor.php(104): Magento\Paypal\Controller\Express\Review\Interceptor->___callPlugins('dispatch', Array, Array)
#21 /chroot/home/pathtosite/html/vendor/magento/framework/App/FrontController.php(55): Magento\Paypal\Controller\Express\Review\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#22 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Interceptor.php(74): Magento\Framework\App\FrontController->dispatch(Object(Magento\Framework\App\Request\Http))
#23 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Chain/Chain.php(70): Magento\Framework\App\FrontController\Interceptor->___callParent('dispatch', Array)
#24 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\Framewo...', 'dispatch', Object(Magento\Framework\App\FrontController\Interceptor), Array, 'requestPreproce...')
#25 /chroot/home/pathtosite/html/vendor/magento/module-store/App/FrontController/Plugin/RequestPreprocessor.php(94): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain{closure}(Object(Magento\Framework\App\Request\Http))
#26 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Chain/Chain.php(67): Magento\Store\App\FrontController\Plugin\RequestPreprocessor->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#27 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\Framewo...', 'dispatch', Object(Magento\Framework\App\FrontController\Interceptor), Array, 'install')
#28 /chroot/home/pathtosite/html/vendor/magento/framework/Module/Plugin/DbStatusValidator.php(69): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain{closure}(Object(Magento\Framework\App\Request\Http))
#29 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Chain/Chain.php(67): Magento\Framework\Module\Plugin\DbStatusValidator->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#30 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\Framewo...', 'dispatch', Object(Magento\Framework\App\FrontController\Interceptor), Array, 'searchautocompl...')
#31 /chroot/home/pathtosite/html/vendor/mirasvit/module-search-autocomplete/src/SearchAutocomplete/Model/App/FrontController/Plugin.php(130): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain{closure}(Object(Magento\Framework\App\Request\Http))
#32 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Chain/Chain.php(67): Mirasvit\SearchAutocomplete\Model\App\FrontController\Plugin->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#33 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\Framewo...', 'dispatch', Object(Magento\Framework\App\FrontController\Interceptor), Array, 'front-controlle...')
#34 /chroot/home/pathtosite/html/vendor/magento/module-page-cache/Model/App/FrontController/VarnishPlugin.php(55): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain{closure}(Object(Magento\Framework\App\Request\Http))
#35 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Chain/Chain.php(67): Magento\PageCache\Model\App\FrontController\VarnishPlugin->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#36 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\Framewo...', 'dispatch', Object(Magento\Framework\App\FrontController\Interceptor), Array, 'front-controlle...')
#37 /chroot/home/pathtosite/html/vendor/magento/module-page-cache/Model/App/FrontController/BuiltinPlugin.php(73): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception{closure}(Object(Magento\Framework\App\Request\Http))
#38 /chroot/home/pathtosite/html/vendor/magento/framework/Interception/Interceptor.php(142): Magento\PageCache\Model\App\FrontController\BuiltinPlugin->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#39 /chroot/home/pathtosite/html/var/generation/Magento/Framework/App/FrontController/Interceptor.php(26): Magento\Framework\App\FrontController\Interceptor->___callPlugins('dispatch', Array, Array)
#40 /chroot/home/pathtosite/html/vendor/magento/framework/App/Http.php(135): Magento\Framework\App\FrontController\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#41 /chroot/home/pathtosite/html/vendor/magento/framework/App/Bootstrap.php(258): Magento\Framework\App\Http->launch()
#42 /chroot/home/pathtosite/html/index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http))
#43 {main} [] []
[2017-04-10 14:39:45] main.CRITICAL: The attribute model is not defined. [] []

@col-be
Copy link
Author

col-be commented Apr 13, 2017

Any update on this? We had this happen again this morning with the same stacktrace.

@tigerx7
Copy link

tigerx7 commented Apr 26, 2017

We just updated to 2.1.6 from 2.0.10 and are currently experiencing this as well. system.log shows: main.CRITICAL: Exception message: This product is out of stock. thrown at magento/module-quote/Model/Quote.php(1722) followed by main.CRITICAL: Exception message: We can't initialize Express Checkout. at magento/module-paypal/Controller/Express/AbstractExpress/Review.php(21): Magento\Paypal\Controller\Express\AbstractExpress->_initCheckout()

We do have "Skip Order Review Step" set to "Yes" in Paypal config. Perhaps this is contributing to the issue(s)?

We've been trying to figure out this issue for the past couple of days and have Paypal debug on, here's the output:

[2017-04-26 21:27:49] main.DEBUG: array (
  'url' => 'https://api-3t.paypal.com/nvp',
  'SetExpressCheckout' =>
  array (
    'PAYMENTACTION' => 'Sale',
    'AMT' => '53.92',
    'CURRENCYCODE' => 'USD',
    'RETURNURL' => 'https://www.domain.com/paypal/express/return/',
    'CANCELURL' => 'https://www.domain.com/paypal/express/cancel/',
    'INVNUM' => '016769',
    'SOLUTIONTYPE' => 'Sole',
    'GIROPAYCANCELURL' => 'https://www.domain.com/paypal/express/cancel/',
    'GIROPAYSUCCESSURL' => 'https://www.domain.com/checkout/onepage/success/',
    'BANKTXNPENDINGURL' => 'https://www.domain.com/checkout/onepage/success/',
    'SHIPPINGAMT' => '0.00',
    'ITEMAMT' => '53.92',
    'TAXAMT' => '0.00',
    'BUSINESS' => NULL,
    'NOTETEXT' => NULL,
    'EMAIL' => NULL,
    'FIRSTNAME' => 'FIRSTNAME',
    'LASTNAME' => 'LASTNAME',
    'MIDDLENAME' => NULL,
    'SALUTATION' => NULL,
    'SUFFIX' => NULL,
    'COUNTRYCODE' => 'US',
    'STATE' => 'STATE',
    'CITY' => 'CITY',
    'STREET' => 'STREET',
    'ZIP' => 'ZIP',
    'PHONENUM' => 'NUMBER',
    'SHIPTOCOUNTRYCODE' => 'US',
    'SHIPTOSTATE' => 'STATE',
    'SHIPTOCITY' => 'CITY',
    'SHIPTOSTREET' => 'STREET',
    'SHIPTOZIP' => 'ZIP',
    'SHIPTOPHONENUM' => 'NUMBER',
    'SHIPTOSTREET2' => '',
    'STREET2' => '',
    'SHIPTONAME' => 'FIRSTNAME LASTNAME',
    'ADDROVERRIDE' => 1,
    'METHOD' => 'SetExpressCheckout',
    'VERSION' => '72.0',
    'USER' => '****',
    'PWD' => '****',
    'SIGNATURE' => '****',
    'BUTTONSOURCE' => 'Magento_Cart_Community',
  ),
'response' =>
  array (
    'TOKEN' => 'EC-TOKEN',
    'TIMESTAMP' => '2017-04-26T21:27:49Z',
    'CORRELATIONID' => 'ID',
    'ACK' => 'Success',
    'VERSION' => '72.0',
    'BUILD' => '32996991',
  ),
) {"is_exception":false} []
[2017-04-26 21:28:25] main.DEBUG: array (
  'url' => 'https://api-3t.paypal.com/nvp',
  'GetExpressCheckoutDetails' =>
  array (
    'TOKEN' => 'EC-TOKEN',
    'METHOD' => 'GetExpressCheckoutDetails',
    'VERSION' => '72.0',
    'USER' => '****',
    'PWD' => '****',
    'SIGNATURE' => '****',
    'BUTTONSOURCE' => 'Magento_Cart_Community',
  ),
  'response' =>
  array (
    'TOKEN' => 'EC-TOKEN',
    'BILLINGAGREEMENTACCEPTEDSTATUS' => '0',
    'CHECKOUTSTATUS' => 'PaymentActionNotInitiated',
    'TIMESTAMP' => '2017-04-26T21:28:25Z',
    'CORRELATIONID' => 'ID',
    'ACK' => 'Success',
    'VERSION' => '72.0',
    'BUILD' => '32996991',
    'EMAIL' => 'EMAIL',
    'PAYERID' => 'ID',
    'PAYERSTATUS' => 'verified',
    'FIRSTNAME' => 'FNAME',
    'LASTNAME' => 'LNAME',
    'COUNTRYCODE' => 'US',
    'SHIPTONAME' => 'FNAME LNAME',
    'SHIPTOSTREET' => 'STREET',
    'SHIPTOCITY' => 'CITY',
    'SHIPTOSTATE' => 'STATE',
    'SHIPTOZIP' => 'ZIP',
    'SHIPTOCOUNTRYCODE' => 'US',
    'SHIPTOPHONENUM' => 'NUMBER',
    'SHIPTOCOUNTRYNAME' => 'United States',
    'ADDRESSSTATUS' => 'Confirmed',
    'CURRENCYCODE' => 'USD',
    'AMT' => '53.92',
    'ITEMAMT' => '53.92',
    'SHIPPINGAMT' => '0.00',
    'HANDLINGAMT' => '0.00',
    'TAXAMT' => '0.00',
    'INVNUM' => '016769',
    'INSURANCEAMT' => '0.00',
    'SHIPDISCAMT' => '0.00',
    'INSURANCEOPTIONOFFERED' => 'false',
    'PAYMENTREQUEST_0_CURRENCYCODE' => 'USD',
    'PAYMENTREQUEST_0_AMT' => '53.92',
    'PAYMENTREQUEST_0_ITEMAMT' => '53.92',
    'PAYMENTREQUEST_0_SHIPPINGAMT' => '0.00',
    'PAYMENTREQUEST_0_HANDLINGAMT' => '0.00',
    'PAYMENTREQUEST_0_TAXAMT' => '0.00',
    'PAYMENTREQUEST_0_INVNUM' => '016769',
    'PAYMENTREQUEST_0_INSURANCEAMT' => '0.00',
    'PAYMENTREQUEST_0_SHIPDISCAMT' => '0.00',
    'PAYMENTREQUEST_0_SELLERPAYPALACCOUNTID' => 'SELLEREMAIL',
    'PAYMENTREQUEST_0_INSURANCEOPTIONOFFERED' => 'false',
    'PAYMENTREQUEST_0_SHIPTONAME' => 'FIRSTNAME LASTNAME',
    'PAYMENTREQUEST_0_SHIPTOSTREET' => 'STREET',
    'PAYMENTREQUEST_0_SHIPTOCITY' => 'CITY',
    'PAYMENTREQUEST_0_SHIPTOSTATE' => 'STATE',
    'PAYMENTREQUEST_0_SHIPTOZIP' => 'ZIP',
    'PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE' => 'US',
    'PAYMENTREQUEST_0_SHIPTOPHONENUM' => 'NUMBER',
    'PAYMENTREQUEST_0_SHIPTOCOUNTRYNAME' => 'United States',
    'PAYMENTREQUEST_0_ADDRESSSTATUS' => 'Confirmed',
    'PAYMENTREQUESTINFO_0_ERRORCODE' => '0',
  ),
) {"is_exception":false} []

Then about 30 seconds later:

[2017-04-26 21:28:28] main.DEBUG: array (
  'url' => 'https://api-3t.paypal.com/nvp',
  'DoExpressCheckoutPayment' =>
  array (
    'TOKEN' => 'EC-TOKEN',
    'PAYERID' => 'ID',
    'PAYMENTACTION' => 'Sale',
    'AMT' => '53.92',
    'CURRENCYCODE' => 'USD',
    'BUTTONSOURCE' => 'Magento_Cart_Community',
    'NOTIFYURL' => 'https://www.naughtydelight.com/paypal/ipn/',
    'RETURNFMFDETAILS' => 1,
    'SHIPPINGAMT' => '0.00',
    'ITEMAMT' => '53.92',
    'TAXAMT' => '0.00',
    'BUSINESS' => NULL,
    'EMAIL' => 'EMAIL',
    'FIRSTNAME' => 'FNAME',
    'LASTNAME' => 'LNAME',
    'MIDDLENAME' => NULL,
    'SALUTATION' => NULL,
    'SUFFIX' => NULL,
    'COUNTRYCODE' => 'US',
    'STATE' => 'STATE',
    'CITY' => 'CITY',
    'STREET' => 'STREET',
    'ZIP' => 'ZIP',
    'PHONENUM' => 'NUMBER',
    'SHIPTOCOUNTRYCODE' => 'US',
    'SHIPTOSTATE' => 'STATE',
    'SHIPTOCITY' => 'CITY',
    'SHIPTOSTREET' => 'STREET',
    'SHIPTOZIP' => 'ZIP',
    'SHIPTOPHONENUM' => 'NUMBER',
    'SHIPTOSTREET2' => '',
    'STREET2' => '',
    'SHIPTONAME' => 'FNAME LNAME',
    'ADDROVERRIDE' => 1,
    'METHOD' => 'DoExpressCheckoutPayment',
    'VERSION' => '72.0',
    'USER' => '****',
    'PWD' => '****',
    'SIGNATURE' => '****',
  ),
  'response' =>
  array (
    'TOKEN' => 'EC-TOKEN',
    'SUCCESSPAGEREDIRECTREQUESTED' => 'false',
    'TIMESTAMP' => '2017-04-26T21:28:28Z',
    'CORRELATIONID' => 'ID',
    'ACK' => 'Success',
    'VERSION' => '72.0',
    'BUILD' => '32996991',
    'TRANSACTIONID' => 'TXID',
    'TRANSACTIONTYPE' => 'expresscheckout',
    'PAYMENTTYPE' => 'instant',
    'ORDERTIME' => '2017-04-26T21:28:26Z',
    'AMT' => '53.92',
    'FEEAMT' => '1.86',
    'TAXAMT' => '0.00',
    'CURRENCYCODE' => 'USD',
    'PAYMENTSTATUS' => 'Completed',
    'PENDINGREASON' => 'None',
    'REASONCODE' => 'None',
    'PROTECTIONELIGIBILITY' => 'Eligible',
    'INSURANCEOPTIONSELECTED' => 'false',
    'SHIPPINGOPTIONISDEFAULT' => 'false',
        'PAYMENTINFO_0_TRANSACTIONID' => 'TXID',
    'PAYMENTINFO_0_TRANSACTIONTYPE' => 'expresscheckout',
    'PAYMENTINFO_0_PAYMENTTYPE' => 'instant',
    'PAYMENTINFO_0_ORDERTIME' => '2017-04-26T21:28:26Z',
    'PAYMENTINFO_0_AMT' => '53.92',
    'PAYMENTINFO_0_FEEAMT' => '1.86',
    'PAYMENTINFO_0_TAXAMT' => '0.00',
    'PAYMENTINFO_0_CURRENCYCODE' => 'USD',
    'PAYMENTINFO_0_PAYMENTSTATUS' => 'Completed',
    'PAYMENTINFO_0_PENDINGREASON' => 'None',
    'PAYMENTINFO_0_REASONCODE' => 'None',
    'PAYMENTINFO_0_PROTECTIONELIGIBILITY' => 'Eligible',
    'PAYMENTINFO_0_PROTECTIONELIGIBILITYTYPE' => 'ItemNotReceivedEligible,UnauthorizedPaymentEligible',
    'PAYMENTINFO_0_SECUREMERCHANTACCOUNTID' => 'MID',
    'PAYMENTINFO_0_ERRORCODE' => '0',
    'PAYMENTINFO_0_ACK' => 'Success',
  ),
) {"is_exception":false} []

Followed by within about 10 seconds:

[2017-04-26 21:28:36] main.DEBUG: array (
  'ipn' =>
  array (
    'mc_gross' => '53.92',
    'invoice' => '016769',
    'protection_eligibility' => 'Eligible',
    'address_status' => 'confirmed',
    'payer_id' => 'PAYERID',
    'tax' => '0.00',
    'address_street' => 'STREET',
    'payment_date' => '14:28:26 Apr 26, 2017 PDT',
    'payment_status' => 'Completed',
    'charset' => 'windows-1252',
    'address_zip' => 'ZIP',
    'first_name' => 'FNAME',
    'mc_fee' => '1.86',
    'address_country_code' => 'US',
    'address_name' => 'FNAME LNAME',
    'notify_version' => '3.8',
    'custom' => '',
    'payer_status' => 'verified',
    'business' => 'BEMAIL',
    'address_country' => 'United States',
    'address_city' => 'CITY',
    'quantity' => '1',
    'verify_sign' => 'TOKEN',
    'payer_email' => 'PAYEREMAIL',
    'txn_id' => 'TXID',
    'payment_type' => 'instant',
    'last_name' => 'LNAME',
    'address_state' => 'STATE',
    'receiver_email' => 'EMAIL',
    'payment_fee' => '1.86',
    'receiver_id' => 'ID',
    'txn_type' => 'express_checkout',
    'item_name' => '',
    'mc_currency' => 'USD',
    'item_number' => '',
    'residence_country' => 'US',
    'handling_amount' => '0.00',
    'transaction_subject' => '',
    'payment_gross' => '53.92',
    'shipping' => '0.00',
    'ipn_track_id' => 'ID',
  ),
  'postback_to' => 'https://ipnpb.paypal.com/cgi-bin/webscr',
) {"is_exception":false} []

Currently have Paypal in-context disabled and not transferring line-items. I've tried both transferring line-items and not, same issue.

I did notice on the second to last debug log entry the following: 'SUCCESSPAGEREDIRECTREQUESTED' => 'false', which doesn't look right... hopefully the log above will shed some light on what's happening and how to correct this. We've disabled Paypal for now.

@tigerx7
Copy link

tigerx7 commented Apr 26, 2017

I just noticed something particular about our "This product is out of stock" error quoted above. Right before the error in Quote.php, it had attempted to:
#1 /var/www/magento/vendor/magento/module-quote/Model/Quote/Item/CartItemPersister.php(72): Magento\Quote\Model\Quote->updateItem('19686', Object(Magento\Framework\DataObject))

I checked for item_id 19686 in table quote_item and it does not exist. The order and items are in sales_order and sales_order_item but that one (of the three items ordered, the other configurables as well) are now missing from quote_item. Also the item associated with the missing 19686 (a simple of a configurable) still has a positive quantity in admin but its stock status now shows as "Out of Stock". This change happened at some point in the order creation process since item was showing in-stock at the time of order.

@tigerx7
Copy link

tigerx7 commented Apr 27, 2017

We just figured out why we were seeing a positive quantity yet "out of stock" on item_id 19686 and probably points to the reason an out of stock exception was thrown during the place order process... we now have duplicate entries in cataloginventory_stock_status. Each product_id in cataloginventory_stock_status has an entry with website_id = 0 and website_id = 1. Looks like during the upgrade process, at some point what used to be website_id = 1 in our tables was changed to website_id = 0. The product_id associated with quote item_id 19686 with website_id = 0 is showing the current values that we see in admin and frontend (qty 2); however its duplicate value with website_id = 1 is showing a qty of 1 which if the order place process attempted to deduct it, it would have changed the product to qty 0 and stock_status to 0 (Out of Stock).

The duplicate entries in cataloginventory_stock_status that are now leading to differing values seems to be related to: #1002 while the Paypal out of stock issue may be related to #6296 in which the problem was traced to a repeat inventory deduction attempt when "Skip Order Review Step" is set to true.

I've cleaned up our duplicate entries in cataloginventory_stock_status and have implemented the solution in #6296 to see if that clears up our Paypal issues on 2.1.6.

@magento-engcom-team
Copy link
Contributor

@col-be, thank you for your report.
The issue is already fixed in 2.1.9

@magento-engcom-team magento-engcom-team added Fixed in 2.1.x The issue has been fixed in 2.1 release line Issue: Confirmed Gate 3 Passed. Manual verification of the issue completed. Issue is confirmed labels Oct 11, 2017
@chequille
Copy link

Nothing is fixed!!!!

M2 2.2.2 is showing the same problem.
Paypal is only working when action is set to "authorisation", but not when set to "Sale".

@chequille
Copy link

It is a mess!!!!!!!!!!!!!

@yosefkurniawan
Copy link

Hi, is it still not solved yet?
any workaround?

@tbrowne303
Copy link

This issue is still present in 2.1.9. Verified on 2/14/2018.

@Cristiano81
Copy link

In our case, Paypal is only working when the order is placed from guest, otherwise, if the customer is logged in, it does not work, this is the error log:

[2018-02-16 09:19:54] main.CRITICAL: Exception message: A wrong PayPal Express Checkout Token is specified.
Trace: 0 /vendor/magento/module-paypal/Controller/Express/AbstractExpress/ReturnAction.php(32): Magento\Paypal\Controller\Express\AbstractExpress->_initToken()
1 /vendor/magento/framework/App/Action/Action.php(107): Magento\Paypal\Controller\Express\AbstractExpress\ReturnAction->execute()
2 /vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\App\Action\Action->dispatch(Object(Magento\Framework\App\Request\Http))
3 /vendor/magento/framework/Interception/Interceptor.php(138): Magento\Paypal\Controller\Express\ReturnAction\Interceptor->___callParent('dispatch', Array)
4 /vendor/magento/framework/Interception/Interceptor.php(153): Magento\Paypal\Controller\Express\ReturnAction\Interceptor->Magento\Framework\Interception{closure}(Object(Magento\Framework\App\Request\Http))
5 /generated/code/Magento/Paypal/Controller/Express/ReturnAction/Interceptor.php(26): Magento\Paypal\Controller\Express\ReturnAction\Interceptor->___callPlugins('dispatch', Array, Array)
6 /vendor/magento/framework/App/FrontController.php(55): Magento\Paypal\Controller\Express\ReturnAction\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
7 /vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\App\FrontController->dispatch(Object(Magento\Framework\App\Request\Http))
8 /vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\App\FrontController\Interceptor->___callParent('dispatch', Array)
9 /vendor/magento/module-store/App/FrontController/Plugin/RequestPreprocessor.php(94): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception{closure}(Object(Magento\Framework\App\Request
Http))
10 /vendor/magento/framework/Interception/Interceptor.php(135): Magento\Store\App\FrontController\Plugin\RequestPreprocessor->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure),
Object(Magento\Framework\App\Request\Http))
11 /vendor/magento/module-page-cache/Model/App/FrontController/BuiltinPlugin.php(73): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception{closure}(Object(Magento\Framework\App\Request\H
ttp))
12 /vendor/magento/framework/Interception/Interceptor.php(135): Magento\PageCache\Model\App\FrontController\BuiltinPlugin->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Ob
ject(Magento\Framework\App\Request\Http))
13 /vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception{closure}(Object(Magento\Framework\App\Request\Http))
14 /generated/code/Magento/Framework/App/FrontController/Interceptor.php(26): Magento\Framework\App\FrontController\Interceptor->___callPlugins('dispatch', Array, NULL)
15 /vendor/magento/framework/App/Http.php(135): Magento\Framework\App\FrontController\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
16 /vendor/magento/framework/App/Bootstrap.php(256): Magento\Framework\App\Http->launch()
17 /index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http\Interceptor))

We have tried to print the variable $setToken and the result of $this->_getSession()->getExpressCheckoutToken(); and seems, that while $setToken has values like EC-4Y810608VE63
8220H the other values is empty or null.
Hope this helps.

@syntheticlab
Copy link

Hi @Cristiano81, we are experiencing same issue. Did you manage it and resolved it?
thanks for reply.

@Jupagar77
Copy link

Hi @Cristiano81 @syntheticlab we are also getting exactly the same issue, but only on production we cant replicate it locally, did you get to know what was causing it?

@syntheticlab
Copy link

syntheticlab commented Sep 13, 2018 via email

@samumaretiya
Copy link

Hi Magento Team,

We have upgraded a store from Magento 2.2.6 to 2.3.2. The upgrade process should smooth the shop experience and not introduced any bug which is very terrible you know.

we facing an issue with payment deducted in the PayPal from the customer but nothing happens in the Magento backend and we are not even able to see the order data in the backend.

I have been closely monitoring this and came to know that DoExpressCheckoutPayment is not sending an email and phone number field to Paypal. I am not sure whether this is the root cause of an order that doesn't generate after successful payment in PayPal.

Just a side note, this is not happening with all customers and I think it's only happening sometimes with an old customer account but it's very terrible you know...

I have also found that GetExpressCheckoutDetails missing a field called SHIPTOPHONENUM while getting a response.

Now, I am under the impression that

  1. GetExpressCheckoutDetails => Should have email and SHIPTOPHONENUM in the response log.

  2. DoExpressCheckoutPayment => should send an email and phone number as part of the address to PayPal so the order will be generated properly in Magento 2 and doesn't have an issue like

We can't save the address: Email has a wrong format

I'd like to have some help on this and then I will go further to edit core files for the above thoughts.

Any quick help will be highly appreciated.

Regards,
Sam

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug report Component: Payment Fixed in 2.1.x The issue has been fixed in 2.1 release line Issue: Clear Description Gate 2 Passed. Manual verification of the issue description passed Issue: Confirmed Gate 3 Passed. Manual verification of the issue completed. Issue is confirmed Issue: Format is valid Gate 1 Passed. Automatic verification of issue format passed
Projects
None yet
Development

No branches or pull requests