这不是一般问题,但我希望有人遇到过这个问题!!
我有一个prestashop网站,现在我正在使用phonegap创建这个网站的移动版本.
我通过prestashop webservice连接到站点数据库.
我可以添加一个新的购物车,但这个购物车是空的,它不属于已将产品添加到购物车的客户.
我原本希望使用这样的网址:
http://monsite/Create_carts.php?id_product=..&quantity=..&id_customer=..
Run Code Online (Sandbox Code Playgroud)
但是cart对象中没有id_product或id_customer属性.
我的问题是如何将产品添加到购物车并使其属于已登录的客户?
在通过互联网进行广泛搜索之后,我确信Prestashop不会以JSON格式返回数据,它只返回XML格式(不幸的是,这会导致跨域访问问题).
现在,我正在尝试将XML(由Prestashop返回)转换为JSON.我想编写PHP代码,它可以从Web服务中获取XML并发送回JSON.为此目的,我尝试了许多教程,但徒劳无功.转换后的JSON没有值,所以没用.我尝试的方法如下所列.
http://www.sitepoint.com/php-xml-to-json-proxy/
PHP将XML转换为JSON
要转换的XML:
<name>
<language id="1" xlink:href="http://localhost/prestashop/api/languages/1">
<![CDATA[ iPod Nano ]]>
</language>
</name>
Run Code Online (Sandbox Code Playgroud)
返回JSON:
"name":{"language":{"@attributes":{"id":"1"}}}
Run Code Online (Sandbox Code Playgroud) 在prestashop中生成模块控制器链接的确切方法是什么?另外,应该如何真正命名控制器的类以及url params应该如何镜像?
我看过几个比较不同的ECommerce CMS的问题:
我希望能让一些人为他们喜欢的相对较小的电子商店做点什么.我现在主要关注PrestaShop和Shopify.我真的很喜欢Shopify做主机,有优质的服务,并且易于理解和主题.然而,PrestaShop是免费的,并且似乎能够做到尽可能多的Shopify.
我已经确定Magento对这个项目来说过于笨重了,并且已经读过许多其他解决方案(osCommerce,ZenCart,OpenCart)已经过时,错误或者只是劣等.
最近我使用prestashop创建了一个eshop网站
https://www.prestashop.com/en/
因为我要为它构建Android应用程序.应用程序中包含的内容只是一些基本功能
例如,创建客户帐户/列表产品/订单产品/支付/查看订单等.常见的eshop功能...
问题是似乎周围的资源很少.是否有任何库/官方的/或者我需要从stratch开始创建API?
阅读 http://doc.prestashop.com/display/PS16/Developer+Guide一段时间,但不知道到目前为止我需要从什么开始.
这是一个相当抽象的问题,但由于社区不是那么受欢迎且资源有限,我希望这可以从对方的经验中学习,并帮助其他人提出相同的要求.
非常感谢您的帮助
一个电子商店开发使用perstashop并放到三个服务器:
前2是亚马逊,应该是相同的设置
服务器1:http: //be-pure.com/en/women/3-slim-y-tank.html
服务器2:http: //52.77.216.83/en/women/3-slim-y-tank.html
最后一个只是本地托管
服务器3:http: //internal001.zizsoft.com/be_pure/en/women/3-slim-y-tank.html
问题是服务器1加载速度与其他两台服务器相比非常慢,但性能应该是3中最好的.
看起来服务器1没有缓存文件
但实际上,他们都有
使用文件系统打开smarty缓存,在修改时打开retrmplie并打开文件系统缓存
鉴于代码和服务器设置相同,2 amazon服务器都是相同的设置,localhost one是其他服务器,但它应该比服务器1慢
1)如何调试/检查文件是否已经使用缓存?
(缓存文件位于cache/smarty中,缓存/ cachefs位于服务器中)
2)服务器1的加载时间是多少?只是把它看作一个PHP站点,任何方法来检查它为什么慢?
非常感谢您的帮助
我不断收到以下错误:
Wed Mar 30 01:22:43.780576 2016] [fastcgi:error] [pid 12345:tid 1234567890] [client 123.459.78.123:12345] FastCGI: incomplete headers (0 bytes) received from server "/path/to/php5-fcgi", referer: http://example.com/some/file.php
Run Code Online (Sandbox Code Playgroud)
这仅在我访问特定页面(控制器)时发生。更让我困惑的是,这个错误似乎是随机的。这意味着有时我可以很好地访问该页面,而其他时候我不断收到该错误。
我所说的页面是 Prestashop 1.5.4 的后台,特别是订单页面(后台 > 订单 > 订单)。
该页面确实向 MySQL 发送了一个查询(它花了不到一秒的时间)。这是完整的查询(已调试):
SELECT SQL_CALC_FOUND_ROWS
a.`id_order`,`reference`,`total_paid_tax_incl`,`payment`,a.date_add as date_add,
a.id_currency,
a.id_order AS id_pdf,
CONCAT(LEFT(c.`firstname`, 1), '. ', c.`lastname`) AS `customer`,
osl.`name` AS `osname`,
os.`color`,
IF((SELECT COUNT(so.id_order) FROM `ps_orders` so WHERE so.id_customer = a.id_customer) > 1, 0, 1) as new
FROM `ps_orders` a
LEFT JOIN `ps_customer` c ON (c.`id_customer` = …Run Code Online (Sandbox Code Playgroud) 我的问题如下.我为prestashop 1.7创建了一个支付模块.验证订单//在启动付款时创建.这通过使用validateOrder方法在payment.php控制器中发生:
$this->module->validateOrder(
(int) $cartId,
$this->module->statuses[$orderStatus],
$prestaTotal,
'paymentmodule',
null,
array(),
null,
false,
$customer->secure_key
);
Run Code Online (Sandbox Code Playgroud)
因此,创建了新订单,现在购物车与订单相关.并且客户被重定向到支付提供商.他们可以付钱,或按"取消"按钮.
webhook.php从支付提供商处收到订单状态,并在prestashop中更新订单状态.如果订单已付款,则会将其重定向到订单确认页面.但如果它被取消,那么购物车就不见了.
发生这种情况,因为prestashop检查订单是否存在.如果是这样,购物车将被删除.FronController.php中的init()方法负责:
/* Cart already exists */
if ((int) $this->context->cookie->id_cart) {
if (!isset($cart)) {
$cart = new Cart($this->context->cookie->id_cart);
}
if (Validate::isLoadedObject($cart) && $cart->OrderExists()) {
PrestaShopLogger::addLog('Frontcontroller::init - Cart cannot be loaded or an order has already been placed using this cart', 1, null, 'Cart', (int) $this->context->cookie->id_cart, true);
unset($this->context->cookie->id_cart, $cart, $this->context->cookie->checkedTOS);
$this->context->cookie->check_cgv = false;
}
Run Code Online (Sandbox Code Playgroud)
所以我在return.php控制器中创建了一个Method来制作属于现有订单的购物车的副本,所以你有一个新的购物车:
class PaymentModuleFrontController extends ModuleFrontController
{
public function initContent()
{
parent::initContent();
$cartId …Run Code Online (Sandbox Code Playgroud) 我正在通过包含使用guzzle 6.0 的包来更新prestashop模块.
Prestashop 1.7使用较旧版本的Guzzle 5.
当我在Prestashop上安装插件时,包含的Guzzle版本与Prestashop冲突,导致以下php错误.
未捕获的PHP异常InvalidArgumentException:"魔术请求方法需要URI和可选的选项数组"在/var/www/html/modules/package/vendorpackage/guzzlehttp/guzzle/src/Client.php第81行{"exception":"[object ](InvalidArgumentException(code:0):魔术请求方法需要在/var/www/html/modules/package/vendorpackage/guzzlehttp/guzzle/src/Client.php:81)"} []中的URI和可选选项数组
我找到了一些类似问题的其他例子:
基于这些,我对如何解决这个问题有一些想法.这些都不是正确的做法.当然有一种更清晰的方法来处理像作曲家这样的问题?
从包含的包中删除Guzzle - 这是最简单的一个,我的问题是如果我删除这个依赖关系它停止了什么,说什么其他依赖关系不会在以后删除不能删除的行?
可以检查Guzzle的包版本和交换调用取决于哪一个加载 - 类似于上面的问题我可以修复以确定我应该使用哪种类型的调用此错误,但我不能告诉其他问题这可能加注,我的代码最终可能会出现每个版本的语句.
手动更改插件中guzzle的名称空间.所以我可以进入我的包的vendor文件夹并为包强制一个特定的命名空间,我猜这将解决我的问题,但我正在失去安装可重用包的重点.
Fork Guzzle并参考该版本.我可以将guzzle插入并将其作为VCS包包含在插件中.这里的问题是我必须继续保持前进.
prestashop ×10
php ×7
html ×2
web-services ×2
android ×1
apache ×1
api ×1
composer-php ×1
controller ×1
cordova ×1
e-commerce ×1
guzzle ×1
hyperlink ×1
javascript ×1
json ×1
module ×1
mysql ×1
optimization ×1
shopify ×1