Prestahop api 1.7 update order webservice error - api

I'm triyng to update an order status & tranking number on prestashop 1.7.6.0 via webservice but if the new order status has to send email to customer I get error 500.
Cases:
new order status id 5 send email > error 500 (status changed, no mail sent, other changes like track nr ignored)
new order status id 4 doesn't send email > code 200 (all ok)
BUT if I try changing manually in back office to order status id 5 all is working, status changed and mail sent.
I do all my test on Postman as these information will be changed with a call from an external service for the management of shipment, how can I debug this problem?
End Point: www.domain.ext/api/orders/10705
xml sent
<?xml version="1.0" encoding="UTF-8"?>
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<order>
<id>10705</id>
<id_address_delivery xlink:href="https://www.domain.ext/api/addresses/11307">11307</id_address_delivery>
<id_address_invoice xlink:href="https://www.domain.ext/api/addresses/11307">11307</id_address_invoice>
<id_cart xlink:href="https://www.domain.ext/api/carts/11918">11918</id_cart>
<id_currency xlink:href="https://www.domain.ext/api/currencies/2">2</id_currency>
<id_lang xlink:href="https://www.domain.ext/api/languages/2">2</id_lang>
<id_customer xlink:href="https://www.domain.ext/api/customers/10806">10806</id_customer>
<id_carrier xlink:href="https://www.domain.ext/api/carriers/5">5</id_carrier>
<current_state xlink:href="https://www.domain.ext/api/order_states/5">5</current_state>
<module>codwfeeplus</module>
<invoice_number>0</invoice_number>
<invoice_date>2022-05-10 15:32:41</invoice_date>
<delivery_number>9050</delivery_number>
<delivery_date>2022-05-17 15:16:33</delivery_date>
<valid>1</valid>
<date_add>2022-05-10 15:32:40</date_add>
<date_upd>2022-05-17 15:23:53</date_upd>
<shipping_number notFilterable="true">1592222222</shipping_number>
<id_shop_group>1</id_shop_group>
<id_shop>1</id_shop>
<secure_key>044248612d0019be079f165138d46e85</secure_key>
<payment>CONTRASSEGNO</payment>
<recyclable>0</recyclable>
<gift>0</gift>
<gift_message/>
<mobile_theme>0</mobile_theme>
<total_discounts>0.000000</total_discounts>
<total_discounts_tax_incl>0.000000</total_discounts_tax_incl>
<total_discounts_tax_excl>0.000000</total_discounts_tax_excl>
<total_paid>15.500000</total_paid>
<total_paid_tax_incl>15.500000</total_paid_tax_incl>
<total_paid_tax_excl>15.500000</total_paid_tax_excl>
<total_paid_real>15.500000</total_paid_real>
<total_products>9.500000</total_products>
<total_products_wt>9.500000</total_products_wt>
<total_shipping>6.000000</total_shipping>
<total_shipping_tax_incl>6.000000</total_shipping_tax_incl>
<total_shipping_tax_excl>6.000000</total_shipping_tax_excl>
<carrier_tax_rate>0.000</carrier_tax_rate>
<total_wrapping>0.000000</total_wrapping>
<total_wrapping_tax_incl>0.000000</total_wrapping_tax_incl>
<total_wrapping_tax_excl>0.000000</total_wrapping_tax_excl>
<round_mode>2</round_mode>
<round_type>1</round_type>
<conversion_rate>1.000000</conversion_rate>
<reference>10705</reference>
<associations>
<order_rows nodeType="order_row" virtualEntity="true">
<order_row>
<id>10913</id>
<product_id xlink:href="https://www.domain.ext/api/products/203975">203975</product_id>
<product_attribute_id>0</product_attribute_id>
<product_quantity>1</product_quantity>
<product_name>xxxxxxxxxxxxxxxxxxxx</product_name>
<product_reference>12859</product_reference>
<product_ean13/>
<product_isbn/>
<product_upc/>
<product_price>10.000000</product_price>
<id_customization xlink:href="https://www.domain.ext/api/customizations/0">0</id_customization>
<unit_price_tax_incl>9.500000</unit_price_tax_incl>
<unit_price_tax_excl>9.500000</unit_price_tax_excl>
</order_row>
</order_rows>
</associations>
</order>
</prestashop>

I found it's a Prestashop 1.7.6 WS bug
https://github.com/PrestaShop/PrestaShop/issues/14842
Solved here https://github.com/PrestaShop/PrestaShop/pull/14899

Related

api implementation - is this the right approach ? ( Mule 4.4 )

I am implementing a GET request which needs to interact with an ERP and extract employee details .
Now the interaction with ERP is not using HTTP so it does not return status codes such as 400 etc
Any error if present is returned in the XML payload response .
Example:
<?xml version="1.0" encoding="utf8" ?>
<Output>
<Error>
<Status>0</Status>
<Details>No errors</Details>
</Error>
</Output>
So I have implemented it this way - where after calling ERP and receiving response I check if response contains any error ( errorCode = 0 means an error otherwise all good )
If not an error normal processing , if an error I simply set the http status to 400 and populate response with error details.
Question:
In the error flow I am NOT throwing any exception / error and simply returning a response with 400 response status and error details .
My gut feel is in this case there is no need to Raise error ( throw ) and then again catch it in error handler.
I thought it is unnecessary in this case but was looking for some feedback ?
Note - the exception handler below is meant to catch errors such as ERP is down / unavailable etc
Note - as this is more a design / approach question , am only pasting screen print of the flow and not the actual code
Please do share your feedback and suggestions
There is no mandate to use Mule Error handling to return an HTTP status, if that's your question.
Note that Mule 4 uses error handling, not exception handling, though it looks similar.
Unrelated, it is strange that you are using HTTP status 400 for a server error, when 400 is meant for bad client request. You may want to use a more proper status.

Sonos test suite fails on counting items in new playlist

I have a container (music show) with 19 tracks in it and 1 item for recommendations section for this show. So totaly there are 20 items. But if I am adding this show to playlist, only tracks will be processed and playlsit will contain 19 tracks. Sonos controller is working fine with it, but Test Suite fails with checking total items after adding show to playlist with message
FAIL The seed playlist and newly created playlist should have the same
quantity of items inside. (expected 19 != actual 20)
As the result Test Suite fails with 1 error. Is it O.K. to send test suite report with such fail? Or you will deny new service with such fail?
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://www.sonos.com/Services/1.1">
<SOAP-ENV:Body>
<ns1:getMetadataResponse>
<ns1:getMetadataResult>
<ns1:index>0</ns1:index>
<ns1:count>20</ns1:count>
<ns1:total>20</ns1:total>
<ns1:mediaCollection>
<ns1:id>CONTAINER:RECOMMENDATIONS:594</ns1:id>
<ns1:itemType>collection</ns1:itemType>
<ns1:displayType>grid</ns1:displayType>
<ns1:title>Recommendations</ns1:title>
<ns1:canPlay>false</ns1:canPlay>
<ns1:canAddToFavorites>false</ns1:canAddToFavorites>
</ns1:mediaCollection>
<ns1:mediaMetadata>
<ns1:id>TRACK:11422:594</ns1:id>
<ns1:itemType>track</ns1:itemType>
<ns1:displayType>list</ns1:displayType>
<ns1:title>He Ain't Give You None</ns1:title>
<ns1:summary>The Radiators</ns1:summary>
<ns1:mimeType>audio/mp3</ns1:mimeType>
<ns1:trackMetadata>
<ns1:artist>The Radiators</ns1:artist>
<ns1:duration>531</ns1:duration>
<ns1:rating>0</ns1:rating>
<ns1:canPlay>true</ns1:canPlay>
<ns1:canSkip>true</ns1:canSkip>
</ns1:trackMetadata>
</ns1:mediaMetadata>
<ns1:mediaMetadata>
<ns1:id>TRACK:58012:594</ns1:id>
<ns1:itemType>track</ns1:itemType>
<ns1:displayType>list</ns1:displayType>
<ns1:title>Alimony</ns1:title>
<ns1:summary>The Radiators</ns1:summary>
<ns1:mimeType>audio/mp3</ns1:mimeType>
<ns1:trackMetadata>
<ns1:artist>The Radiators</ns1:artist>
<ns1:duration>632</ns1:duration>
<ns1:rating>0</ns1:rating>
<ns1:canPlay>true</ns1:canPlay>
<ns1:canSkip>true</ns1:canSkip>
</ns1:trackMetadata>
</ns1:mediaMetadata>
[MORE ITEMS HERE]
</ns1:getMetadataResult>
</ns1:getMetadataResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
I am taking some liberties in answering your question since it seems to be directed at Sonos, so apologies in advance. It is very unlikely that your service will be rejected for a bug that happens to be inside Sonos test suite.
So my two cents, go for it and submit your service.
I believe that the issue here is that a playlist is defined as container specifically full of track elements (http://musicpartners.sonos.com/node/286) and your playlist contains a collection. This is why this is failing to generate the correct count in the test.

highrise API, put unprocessable entity , 37 Signals

i´m playing arround with the HIGHRISE API, and they understood the meaning of rest, its pretty cool and at some points gracefully forgivingly, but
has anybody any idea why the xml i PUT is not accepted ?
here is some relevant logging :
2014-02-23 00:00:04] app.INFO: Updating:Person:Highrise-API = people/11834527375.xml [] []
[2014-02-23 00:00:04] app.INFO: request body is :
<?xml version="1.0" encoding="UTF-8"?>
<person>
<first-name><![CDATA[Johnny]]></first-name>
<last-name><![CDATA[B. Good]]></last-name>
<visible-to><![CDATA[Everyone]]></visible-to>
<subject_datas type="array">
<subject_data>
<subject_field_id type="integer"><![CDATA[43212]]></subject_field_id>
<value><![CDATA[dsa328394OOKD323H]]></value>
</subject_data>
<subject_data>
<subject_field_id type="integer"><![CDATA[470259]]></subject_field_id>
<value><![CDATA[provider://w184071823/fmdks/2032]]></value>
</subject_data>
<subject_data>
<subject_field_id type="integer"><![CDATA[469130]]></subject_field_id>
<value><![CDATA[CORE]]></value>
</subject_data>
<subject_data>
<subject_field_id type="integer"><![CDATA[469132]]></subject_field_id>
<value><![CDATA[Way too cool]]></value>
</subject_data>
</subject_datas>
<contact-data>
<phone-numbers>
<phone-number type="array">
<number><![CDATA[081 6418273]]></number>
<location><![CDATA[Work]]></location>
</phone-number>
</phone-numbers>
<addresses type="array">
<address>
<city><![CDATA[New York City]]></city>
<country><![CDATA[US]]></country>
<state><![CDATA[New York]]></state>
<street><![CDATA[Siplingerstreet 11]]></street>
<zip><![CDATA[87527]]></zip>
<location><![CDATA[Work]]></location>
</address>
</addresses>
</contact-data>
</person>
[] []
[2014-02-23 00:00:04] app.INFO: request set [] []
[2014-02-23 00:00:04] app.ERROR: Guzzle/3.8.1 curl/7.28.1 PHP/5.4.10 - [2014-02-22T23:00:04+00:00] "PUT /people/11834527375.xml HTTP/1.1" 422 103 [] []
[2014-02-23 00:00:04] app.INFO: Caught client-error-exception in HighriseService updatePerson(): exception 'Guzzle\Http\Exception\ClientErrorResponseException' with message 'Client error response
[status code] 422
[reason phrase] Unprocessable Entity
i dont see the error :/
I´m very sure the subject_field_id´s are correct and those custom fields are set
Posting e.g saving that xml works, i saw from the response that are fields were set,
only thing i can guess is, that i´m trying to PUT a version where nothing has changed,
is that the problem ?
because my code only checks if that person exists at all and if so update it instead of creating
You should get back some XML in the body of the response. It should look like this:
<?xml version="1.0" encoding="UTF-8"?>
<errors>
<error>Phone number '555-555-5555' has already been taken</error>
</errors>
If you include the id for the existing phone number in your PUT request, then we know that you want to update the existing address, rather than adding a new one: https://github.com/basecamp/highrise-api/blob/master/sections/people.md#update-person
Contact data and Subject data that include an id will be updated, data that doesn’t will be assumed to be new and created from scratch. To remove a piece of data, prefix its id with a minus sign (e.g. -1).

QBXML Query for 50000 customers does not work

I installed QuickBooks Enterprise 13.0 Trial.
Imported 50000 customers using the Excel template it provided
Downloaded QB SDKTest.exe from
[https://member.developer.intuit.com/qbsdk-current/samples/readme.html#SDKTest (VB) (qbxml) (desktop)][1]
I have a simple query to request customers
<?xml version="1.0" ?>
<!DOCTYPE QBXML PUBLIC '-//INTUIT//DTD QBXML QBD 1.0//EN' >
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<CustomerQueryRq requestID = "Customers">
<ActiveStatus>All</ActiveStatus>
</CustomerQueryRq>
</QBXMLMsgsRq>
</QBXML>
It fails with the following response
<CustomerQueryRs statusMessage="There has been an internal error when processing the request." statusSeverity="Error" statusCode="1000" requestID="Customers"/>
The test was OK with 40000 customers. Did I reach a limit ? I expected to be able to work with 100000 customers
50K records are quite huge. So,you can try using 'Iterators' for this.
Ref - https://member.developer.intuit.com/qbSDK-current/doc/PDF/QBSDK_ProGuide.pdf
(Pg - 119)
Please let me know if it works.
You can refer the following link for object limits
http://support.quickbooks.intuit.com/support/articles/INF12412
Thanks

QBMS (Quickbooks Merchant Services) Scheduled Billing doesn't show up in Dashboard

I have added a wallet and scheduled billing for the future, I receive the scheduled billing ID and a success message, but when I go to recurring payments (this is all in the sandbox -- ptc), I don't see anything.
This is my request:
POST https://webmerchantaccount.ptc.quickbooks.com/j/AppGateway HTTP/1.1
Content-Type: application/x-qbmsxml
Content-Length: 770
<?xml version="1.0" encoding="utf-8"?>
<?qbmsxml version="4.5"?>
<QBMSXML>
<SignonMsgsRq>
<SignonTicketRq>
<ClientDateTime>2012-01-30T17:03:42</ClientDateTime>
<SessionTicket>***********************</SessionTicket>
</SignonTicketRq>
</SignonMsgsRq>
<QBMSXMLMsgsRq>
<CustomerScheduledBillingAddRq>
<CustomerID>1234721</CustomerID>
<WalletEntryID>102142113311000320665100</WalletEntryID>
<PaymentType>CreditCard</PaymentType>
<Amount>1.06</Amount>
<SalesTaxAmount>0.06</SalesTaxAmount>
<StartDate>2012-01-31</StartDate>
<FrequencyExpression>0 0 0 1 * ?</FrequencyExpression>
<ScheduledBillingStatus>Active</ScheduledBillingStatus>
</CustomerScheduledBillingAddRq>
</QBMSXMLMsgsRq>
</QBMSXML>
Then I get this response:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE QBMSXML PUBLIC "-//INTUIT//DTD QBMSXML QBMS 4.5//EN" "http://webmerchantaccount.ptc.quickbooks.com/dtds/qbmsxml45.dtd">
<QBMSXML>
<SignonMsgsRs>
<SignonTicketRs statusCode="0" statusSeverity="INFO">
<ServerDateTime>2012-01-30T23:07:46</ServerDateTime>
<SessionTicket>***********************</SessionTicket>
</SignonTicketRs>
</SignonMsgsRs>
<QBMSXMLMsgsRs>
<CustomerScheduledBillingAddRs statusCode="0" statusMessage="Status OK" statusSeverity="INFO">
<ScheduledBillingID>5225</ScheduledBillingID>
</CustomerScheduledBillingAddRs>
</QBMSXMLMsgsRs>
</QBMSXML>
Can anyone tell me why I can't see this in the dashboard? Or where I should see it?
Thanks!
If you're using a TEST/PTC merchant account, the transactions won't show up in the GUI dashboard. That's just how Intuit's system works. :-(