我在Magento中创建了一个自定义模块,可以在下订单时随时创建一个包含订单信息数组的变量。我现在需要创建一些将这些变量发送到外部数据库的机制或过程。但是,我不确定采取哪条路线。有人能指出我正确的方向吗?
编辑:这是我目前为Observer.php文件所做的:
<?php
class Companyname_Dataport_Model_Observer
{
public function orderPaid(Varien_Event_Observer $observer)
{
$orderId = $observer->getPayment()->getOrder()->getId();
$orderdata = array();
$orderdata['id'] = $order->getIncrementId();
$orderdata['customername'] = $order->getCustomerFirstname() . " " . $order->getCustomerLastname();
$orderdata['price'] = $order->getPrice();
$orderdata['items'] = array();
foreach ($order->getAllItems() as $orderItem) {
$item = array();
$item['productid'] = $orderItem->getProductId();
$item['qty'] = $orderItem->getQtyOrdered();
$orderdata['items'][] = $item;
}
// Writing to the DOM
}
}
答案 0 :(得分:1)
你可以通过以下几种方式解决这个问题,以下是其中两种方法:
1)最简单:在下订单并获得信息的那一刻,您可以使用PHP exec()函数来调用独立的PHP文件。 (变量通过的地方)
示例:
exec("php /path/to/standalone/script.php ". $variable);
(如果它是一个数组,你可能需要json_encode $ variable)
此脚本只使用变量并连接到本地/远程数据库以运行查询并更新信息。
2)您可以在外部服务器上创建一个可以随时从Magento调用的Web服务
还有其他方法可以做到这一点,但我希望我的答案中包含的有用信息可以帮助您入门。
答案 1 :(得分:1)
我建议您使用观察员,听取与订单创建相关的事件
例如,您可以收听sales_order_save_after
,在观察者中,您的方法将作为参数$observer
。然后,您可以使用$order = $observer->getEvent()->getOrder();
访问订单数据
这是一些代码:
config.xml :
<config>
...
<global>
...
<events>
<sales_order_save_after>
<observers>
<some_descriptive_string>
<type>singleton</type>
<class>themodelalias/observer</class>
<method>theMethodToUse</method>
</some_descriptive_string>
</observers>
</sales_order_save_after>
</events>
...
</global>
...
</config>
Observer.php :
class Yournamespace_Yourmodule_Model_Observer
{
public function theMethodToUse($observer)
{
$order = $observer->getEvent()->getOrder();
//here goes your code to send the information to your external db
{
}
答案 2 :(得分:1)
你可以使用cURL ....直接在observer.php中编写代码。在写卷毛时你需要跟随的东西......
您的数据将以json格式发送....以下是一个示例发件人示例:
$xurl='http://domain/Observer_test/';//open bravo or any other application's endpoint here
$curl = curl_init();
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_URL, $xurl);
curl_setopt($curl, CURLOPT_USERPWD, "111:abc");
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, array("data" => json_encode($data)));
$resp = curl_exec($curl);
curl_close($curl);
$resp = json_decode($resp);
php中的示例接收器代码(可以是任何语言):
$userkey=$_SERVER["PHP_AUTH_USER"];
$usersecret=$_SERVER["PHP_AUTH_PW"];
$key = '111';//16 character
$secret = 'abc';//32 character
if(!($userkey==$key && $usersecret==$secret)) {
http_response_code(403);
}else{
$data = $_POST["data"];
$dir='/path/to/save/file';
$file = new SplFileObject($dir."fread.txt", "w");
$written = $file->fwrite($data);
if($written){
header('Content-Type: application/json');
http_response_code(200);
echo json_encode(array("stat"=>"SUCCESS"));
}
}
所以基本上它是一个遵循REST架构的Web服务