Magento2: 2.1.0rc - Paypal Website Payments Standard module doesn't work

Created on 30 May 2016  ·  56Comments  ·  Source: magento/magento2

Steps to reproduce

  1. Install Magento from 2.0.7 > Upgrade to 2.1.0rc using Web Setup Wizard (no sample data)
  2. Store > Configuration > Sales > Payment Method > Enable Website Payments Standard
  3. > Insert valid facilitator (merchant) email + API credentials > Save > Clear cache
  4. Products > Category > Add New Category
  5. Products > Catalog > Add New Product
  6. Save everything, go get a coffee, let the cron do their thing every minutes
  7. Go to frontend, register as a new customer, place an order, checkout using Paypal

    Expected result

  8. Succeed page/we have received your order confirmation, order created, qty adjustment, etc

    Actual result

  9. Error message "We can't place the order."

  10. The PP sandbox works fine as I can see the payments in both buyer & facilitator paypal accounts.

4magebugrep

Trace in TXT format
trace for pp bug.txt

Ready for Work bug report

Most helpful comment

MariaDB [storedB]>
> ALTER TABLE sales_invoice_grid ADD base_grand_total decimal(12,4) AFTER grand_total;

pp_test

;)

All 56 comments

Loaded sample data and carried the same frontend steps > same error and trace.

Cache emptied > reindexed > stats refreshed > Redis-cli flushall/flushdb, everything I could do to set this back to a ootb stance.

Let me know if you need me to do anything else (I'll archive this VM in a meantime)

Thanks for looking into this Alena. YOU have to make this PP work ;)

Any workaround that you know of (temp fix) please let me know as I plan on putting RC1 in prod in a week (i know i know, not for prod etc) We just can't delay too much longer here so we'll make use of it. Everything else works flawlessly (for us anyway). We'll upgrade to a stable version in Aug or Sept.

Ubuntu 16.04
NGINX 1.10.0
MariaDB 10.0.24
PHP 7.0.4
PhpRedis Extension
REDIS 3.2.0 (for session & page cache)

Hi @commcad

Please provide us with debug.log that contains response from PayPal (debug can be enabled in Advanced Settings section for PayPal Website Payments Standard), this should help to identify the cause of the issue.

Hello @alena-marchenko

Sure. Attaching the entire sys i/o from 2.07 composer-project install > update to 2.1.0rc using Web Setup. TestBuy/sandboxed performed with the paypal debug mode On as requested.

system.txt

See line no. 1435
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'base_grand_total' in 'field list', query was: INSERT INTO sales_invoice_grid

MariaDB [storedB]> show columns from sales_invoice_grid;
+-----------------------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+----------------------+------+-----+---------+-------+
| entity_id | int(10) unsigned | NO | PRI | NULL | |
| increment_id | varchar(50) | YES | MUL | NULL | |
| state | int(11) | YES | MUL | NULL | |
| store_id | smallint(5) unsigned | YES | MUL | NULL | |
| store_name | varchar(255) | YES | | NULL | |
| order_id | int(10) unsigned | NO | MUL | NULL | |
| order_increment_id | varchar(50) | YES | MUL | NULL | |
| order_created_at | timestamp | YES | MUL | NULL | |
| customer_name | varchar(255) | YES | | NULL | |
| customer_email | varchar(255) | YES | | NULL | |
| customer_group_id | smallint(6) | YES | | NULL | |
| payment_method | varchar(128) | YES | | NULL | |
| store_currency_code | varchar(3) | YES | | NULL | |
| order_currency_code | varchar(3) | YES | | NULL | |
| base_currency_code | varchar(3) | YES | | NULL | |
| global_currency_code | varchar(3) | YES | | NULL | |
| billing_name | varchar(255) | YES | MUL | NULL | |
| billing_address | varchar(255) | YES | | NULL | |
| shipping_address | varchar(255) | YES | | NULL | |
| shipping_information | varchar(255) | YES | | NULL | |
| subtotal | decimal(12,4) | YES | | NULL | |
| shipping_and_handling | decimal(12,4) | YES | | NULL | |
| grand_total | decimal(12,4) | YES | MUL | NULL | |
| created_at | timestamp | YES | MUL | NULL | |
| updated_at | timestamp | YES | MUL | NULL | |
+-----------------------+----------------------+------+-----+---------+-------+
25 rows in set (0.00 sec)

MariaDB [storedB]>
> ALTER TABLE sales_invoice_grid ADD base_grand_total decimal(12,4) AFTER grand_total;

pp_test

;)

Hi @commcad

Please provide us with debug.log file that is located in var/log directory under magento root folder. Please als ensure that "Debug: option is set to Yes Under PayPal Payments Standard configuration.

@alena-marchenko

Sure, see attached debug.txt below.

All looking very good on the paypal side of things having success ack and all. I also have the payment registered and issued to the seller. Can't be a paypal bug...been using Paypal for the last 12 years with litle over $500,000 in sales and never came across a payment failure.

See above post no 6 where I highlighted the bug. The mage's database column aren't named properly. Easy fix is to rename the column to what it should be but I am unaware of other possible crashes that could occur while doing/renaming this table column.

Same bug on Magento 2.1.0rc2 by the way. Can't run a shop using the Paypal payment option :/

debug.txt

Hi @commcad

We've created MAGETWO-54787 internal ticket regarding this issue.
Thank you.

I used fresh installed magento2.1 and still having unable to place order issue. column base_grand_total is there in sales_invoice_grid table.

Do we have visibility on these MAGETWO-54787 tickets? They keep being mentioned, so I assume they can be viewed somewhere?

@maderlock MAGETWO-54787 internal ticket.

Let's hope for this to be included in the upcoming release. In a meantime the ALTER table fix works like a charm. I haven't had any complications amending the column name (both dev & prod).

Thanks @commcad. Not happy with having to adjust the schema, but without any idea of timescales I've used your fix.

What commcad said. I placed the column in a different place based on the insert query that errored, but I imagine both would work. Here's the query i ran to fix the issue.

ALTER TABLE magento.sales_invoice_grid
ADD COLUMN base_grand_total DECIMAL(12,4) NULL DEFAULT NULL AFTER shipping_and_handling;

@BigBri41 Did you try the alter statement by @commcad? Is the nullable part important?

@maderlock The query that I ran is basically the same as the one @commcad posted, it just placed the column in a different place in the table, I expect that any inserts into the table reference the column by name though so that shouldn't be an issue. I have a feeling that the nullable part is important as its parent table (sales_invoice) has base_grand_total set as nullable also. I'm not sure that you would be able to add a non-nullable column to a table that has existing data either.

@BigBri41
I had the same problem (couldn't create invoices in the backend in Magento 2.1) but solved it by the next query in MySQL as mentioned by mauromm @ https://github.com/magento/magento2/issues/5324:

ALTER TABLE `sales_invoice_grid`
    ADD COLUMN `base_grand_total` DECIMAL(12,4) NULL DEFAULT NULL COMMENT 'Base Grand Total' AFTER `grand_total`;

MySQL gave an error "Mysql isn't here anymore" but after running the script for a second time, it gave an duplicate column error. The column was created the first time and i was able to create invoices in the backend and the error never occurred again.

Many thanks to @mauromm and hope this helps for you aswell.

The below method from commcad seems to work.
Should there be Create Account option in the end when you reach to the SUCCESS screen?

  • Create Account Appears only when customer manually enters all details and checkout the long way
  • No create account option with PayPal express checkout - this is the most widely used method and create account is a Must.

Does anyone have any idea when magento new version will be released?

Strange that there is no option for customers to create account when placing orders... Thought 2.1 would have it but cant see in my install at least. Any idea?
MariaDB [storedB]>

ALTER TABLE sales_invoice_grid ADD base_grand_total decimal(12,4) AFTER grand_total;

@s00071609
Have a look in Magento Admin > Stores > Configuration > Sales > Checkout > Checkout Options

I could be totally wrong here but the Magento ootb setting is set by default to "Allow Guest Checkout". Setting this to NO should force the customer to Sign-up prior.

I'm personally unaware of any timeframe RE future release. Happily running M2.1.0GA in both dev and prod here. That original ALTER method is not complaining in any ways so I'll keep abusing it until this is fixed officially (lots of cfg products, swatches, invoices, c-memo, newsletters... using it all flawlessly)

I think Guest Checkout is quite important and would not be good to turn it off. But as the 2.1 release note says that guest checkout create account opens after checkout, I was wondering if there is still some issue with it.
Basically there are two ways to checkout as guest, first way is buy manually filling in all details and using paypal express to checkout.

Second to directly jump to PayPal from mini- cart and complete checkout.

The first option displays a button "Create Account" at success screen, second option doesn't but I think i saw that a clean install of 2.1 without any data, shows the button when checking out in first or second way.

Most people like to simply hit paypal and checkout without entering anything. SO this method should trigger Create Account in the end. Not sure its a bug or a feature that does not exist. Below is the success page using first and second methods:
expresscheckout
normalcheckout

@s00071609 I see your point now. Feature or bug I can't answer unfortunately, Had a quick look for you but can't seem to find the answer: http://docs.magento.com/m2/ce/user_guide/sales/point-of-purchase.html

Alternative; have a go at the forum in case someone more exp than us knows already.
https://community.magento.com/t5/Core-Technology-Magento-2/ct-p/Magento-2

@s00071609 Please could you raise this as a separate ticket? This ticket should remain just for the missing invoice bug.

@maderlock @alena-marchenko I havent reported anything regarding missing invoice bug but concern about paypal express checkout that provides no option for customers to create account.

Later if they do create an account, the order does not appear in account. Strange that orders are not associated by customer email. These are some of the basic must-have features in ecommerce.

Most surprising is that customers cannot create account if they choose to use PayPal checkout without entering details. There is no option throughout checkout process. At least there should be Create Account option in the end no matter how you checkout. If they later decide to create an account - the orders wont appear.

_"The Create an Account form now opens as expected after checkout has been completed for a customer who is not logged in."_

@s00071609 hmmm I think what @maderlock meant is your issue is irrelevant to this schema bug and may confuse developers & merchants shall you persist posting here. Your issue has nothing to do with MAGETWO-54787, bud.

I've kindy posted a few links a few posts above to help you better follow-up on your issue. If you are convinced that it is a bug, and not a feature, the general advice is to create a New Issue for Magento to be notified and action on.

Here is the link for that:
https://github.com/magento/magento2/issues/new

Hi,
Bug with base_grand_total was fixed and delivered to develop branch.
Issue is closed as resolved.

Which release will this fix be part of? @NadiyaS

I have a paypal error, we can't place the order.
Magento 2.1 v CE.

paypal error 2 1

workaround by @commcad confirmed as working

Would be great to have this fixed in next release - any ideas when?

It still says the same with payment action order but works for sale and authorization on when tested using real details, but all of them does not work on sandbox mode.

I still have the same issue with message in system.log
main.CRITICAL: Exception message: Warning: Invalid argument supplied for foreach() in /var/www/public_html/test.com/vendor/magento/module-catalog/Model/Product.php on line 1910

Thanks @commcad for posting the fix, works for us too with Magento 2.1.0

Sounds like we need a patch release asap.

Can someone please clarify if I use the ALTER statement here to patch my 2.1.0 install... will that cause any issues when the next prod ver of mage is released/when I upgrade mage?

The same issue occurs on PayPal Express if you have it set to not skip the review page... which is necessary if you need to add carrier fetched shipping method/cost...

The issue has been fixed in 2.1.1

Upgraded to 2.1.1 and still getting this issue. The upgrade did not solved this issue for me.
Paypal pay now is still sending me back to the review order page with error "We can't place order" even if it should have skip the review order page. Paypal should send me to the success page with option to create account. I am using Paypal Standard Payments.

Hi @usertwelve ,
the cause of this bug was that DB table sales_invoice_grid did not have base_grand_total column.
If you really still have the same problem you will have error message on Invoice grid page. To check it go to Sales > Invoices. If this grid opens correctly and you see all invoice data, then you have another cause of your problem and please create additional ticket for this if it have not been already created.

It's a new installation 2.1.0 and just updated to 2.1.1. Not sure what you mean by Invoice "grid" page but no I don't see errors in the sales/invoice page. Maybe it is because I don't have any invoices yet? Each time I try to make a purchase I end up with this "We can't place order" message. I've tried a few different set-up with Paypal and I get this message each single time.

If you switch to Authorize Only instead of Authorize and Capture, does it work? Are the payments actually going through on the PayPal side?

With the bug in 2.1.0 that was the case... but if setting it to just Authorize only still doesn't work then you've definitely got another issue

I am assuming you are referring to Authorize.net configuration (since there is no such authorize options with Paypal) but I am only accepting payments with Paypal. I am trying to configure either Paypal Website Payments Standard or Paypal Express Checkout as the only option for payments. (I am already using this setup with 2 other older Magento site with no problems.) Both Paypal options seems to work as supposed but when I clic "Pay now" in Paypal it redirect me to the order review page with the alert "We can't place the order". Even when I select yes to "Skip Order Review Step". No invoice is created and no payments.

No, he is not referring to that. Look again and pay attention where in PayPal config you see a drop down menu with "Authorize" and "Authorize and Capture".
Double check it if you can find it until you see it..

---- On Mon, 12 Sep 2016 19:07:31 +0200 [email protected] wrote ----

I am assuming you are referring to Authorize.net configuration (since there is no such authorize options with Paypal) but I am only accepting payments with Paypal. I am trying to configure either Paypal Website Payments Standard or Paypal Express Checkout as the only option for payments. (I am already using this setup with 2 other older Magento site with no problems.) Both Paypal options seems to work as supposed but when I clic "Pay now" in Paypal it redirect me to the order review page with the alert "We can't place the order". Even when I select yes to "Skip Order Review Step". No invoice is created and no payments.


You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

You're right this config is available in Paypal also but only with Paypal Payflow. Can't find it in Paypal Website Payments Standard nor in the Paypal Express checkout.
By the way thanks for your help guys.

Basic setting -> advanced settings -> billing agreement

Check then double check again
It is indeed present

---- On Mon, 12 Sep 2016 20:16:26 +0200 [email protected] wrote ----

You're right this config is available in Paypal also but only with Paypal Payflow. Can't find it in Paypal Website Payments Standard nor in the Paypal Express checkout.


You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

I have set the Billing Agreement Signup to "Never" and the Paypal Billing Agreement Setting is disabled.
There is an option "Payment Action" which I can choose either "Authorization" or "Sale". It is set to Authorization but I can't see why it is important since the whole option (Paypal Billing Agreement Settings) is disabled.

Sorry Guys looks like my problem is not related to this issues. I have tried again with an other very basic test product and it worked this time. It was related to the product itself.. Maybe because of the customizable option. Thanks for your help.

Still doesn't work with configurable products; especially those having both swatches + custom options. You will get that same Cannot place order error.

However, it works fine if you use a configurable product having either one. Can't have both unfortunately ;)

in 2.1.0 and 2.1.1 @usertwelve

@commcad

I've got the same issue that you initially highlighted. I am pretty inexperienced with MySQL. However I have logged into the MySQL monitor via SSH as the root user. What are the exact commands I need to run to solve this problem - please explain step by step.

I copied and pasted this command:

MariaDB [storedB]>

ALTER TABLE sales_invoice_grid ADD base_grand_total decimal(12,4) AFTER grand_total;

but the following error was flagged:
screen shot 2016-09-14 at 00 00 23

Appreciate any support with this. Apologies for my lack of experience.

Kind Regards

Hey Neil

Change _pwd_ and database name (_magentodB_) with yours

From the Command Line Terminal:

$ sudo mysql -u root -p
$ _(enter pwd)_
$ USE _magentodB_;
$ ALTER TABLE sales_invoice_grid ADD base_grand_total decimal(12,4) AFTER grand_total;
$ quit
$ sudo service mysql restart

@neilrd

The problem is stil in Magento 2.1.1 if the product have a Custom Option fields.
The base_grand_total is in the table.

Im getting an error like this:

Integrity constraint violation: 1062 Duplicate entry for key 'SALES_ORDER_INCREMENT_ID_STORE_ID', query was: INSERT INTOsales_order``

Hi @plauge ,
the problem of current issue is not in sales_order. If you have another issue, please create new ticket with all necessary information and steps to reproduce.

Have same issue in Magento 2.1.2 for Some Orders

Have the same issues in Magento 2.1.3 with certain customers. "We can't place the order"

THERE IS AN ERROR WITH CONFIGURABLE PRODUCTS OR PRODUCTS WITH OPTIONS.
Please fix it!

Still having same issue on Magento 2.1.4 after payment with Paypal Express Checkout returned to the review page although "Skip review Step" is on with the following error message "We can't place the order".

In order to reproduce the problem, take into account that only happens when Paypal is configured with live credentials.

As LucScu pointed out - Have you guys tried to open the configurable product and save it again. It might give the error- SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1922-1..........
In my case I was using two stores and changed google analytics - turned it off and this issue got fixed. I believe that "We cant place order" may have to do with this error. Disabling Experiment code in Google Analytic in Sales-- GOogle API might fix the issue. No harm trying. Do let us know.

Looks like this issue is not fixed with magento 2.1.7 either. Amazing, this issue is still there and not fixed for over a year now. Its being carried over with every new upgrade

Any solution for this bug?

Magento 2.1.7 > Order Variable product with custom option Date > Pay with Paypal

Transaction in successful, but after redirecting from paypal there is a red statement We can't place the order.

Was this page helpful?
0 / 5 - 0 ratings