根据脚本改变OpenCart中的价格

时间:2012-04-10 02:00:49

标签: php opencart

我正在建立零售业务,通过互联网销售黄金,使用opencart。不同之处在于我只接受比特币(BTC),这是一种新的加密货币。

问题是贵金属价格与BTC / GBP交易所波动很大。因此,我需要以相当频繁的价格自动更新我的开放式汽车价格,以避免因汇率变动和亏本出售而陷入困境。

我写了一个附加的脚本,它可以提取金币,银币和铂金的价格,然后用比特币计算价格。

因此,对于网站上的每个金属项目,我都希望目录中所有产品的价格自动更改(每15分钟一次是理想的)。

我的问题是:如何根据脚本更新opencart数据库中的价格?

价格必须根据以下四点改变: 该物品所含贵金属的种类。 该项目的百分比标记 该物品所含贵重金属的重量。 该项目的硬币类型。

我希望这些内容可以在opencart中编辑。对于每个项目,将有四个(额外)属性

金属类型      =>金      =>银      =>铂      =>不是金属(对于其他物品,它会忽略所有重量,价格变化) 标记百分比         百分比(整数?) 重量         整数 硬币标记         整数 “ 所以,假设我卖的是克鲁格兰类型的四分之一盎司金币:

四分之一盎司的金币重7.77克,因此在产品页面上,重量将与该数字一起列出。基本价格将设定为7.77克*黄金价格(克数)(此数字是使用附加的PHP脚本获取的)。

我从批发黄金价格的默认加价将是10%,“基本”价格将增加10%,这也将列在产品页面上。

Krugerrands,由于历史原因,往往包括超过黄金批发价格的价值。所以硬币标记大约是5比特币,价格会增加以反映这一点。 “ 这些价格小提琴都不应该由买家看到,他们应该看到价格变化以反映所有这些价格

所有产品的价格每小时都会发生变化,以反映黄金价格和BTC GBP汇率的变化。

下面是一个PHP脚本,用于提取黄金价格,白银价格和铂金价格,然后计算比特币中一克金属的价格。这是我编程的第一件事,所以可能有点冗长,或者不遵循既定惯例。答案可能非常复杂,所以我不希望有一个完整的答案。收到一些指示会很高兴!

 <?php
  /* This is a script that ultimately displays the price of gold in grams, denominated       in Bitcoins (BTC), a non fiat cryptographic currency. This is also the first thing I have ever programmed, so be nice */

 // line break variable
 $br = "<br> <br>";


    // CURL begin
//curl session 1: grab metal prices
$ch1 = curl_init();
curl_setopt( $ch1, CURLOPT_URL, 'http://drayah.no.de/metals/latest' );
curl_setopt( $ch1, CURLOPT_RETURNTRANSFER, 1 );
$metalsdata = curl_exec( $ch1 );


// curl session 2: Grab exchange rate for BTC/GBP
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, 'https://mtgox.com/api/1/BTCGBP/public/ticker' );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt( $ch, CURLOPT_FRESH_CONNECT, 1); 
curl_setopt( $ch, CURLOPT_TIMEOUT_MS, 1000);
curl_setopt( $ch, CURLOPT_USERAGENT, 'useragent');
$btcgbpdata = curl_exec( $ch );
curl_close( $ch );

// curl session 3: Grab  British pounds to USD exchange rates
$ch1 = curl_init();
curl_setopt( $ch1, CURLOPT_URL, 'https://raw.github.com/currencybot/open-exchange-rates/master/latest.json' );
curl_setopt( $ch1, CURLOPT_Rcheck if my code isETURNTRANSFER, 1 );
$currencydata = curl_exec( $ch1 );


//gold digest: turn JSON data into readable php, and extract the gold price
$metals  = json_decode( $metalsdata, true, 512 );
$goldprice = $metals['gold']['quote'];
$silverprice = $metals['silver']['quote'];
$platprice = $metals['platinum']['quote'];

//BTC digest of JSON

$btcgbp = json_decode( $btcgbpdata, true, 512 );
$btcgbpvwap = ($btcgbp['return']['vwap']['value']);
echo "$btcgbpvwap pounds per BTC";
echo $br;


//currency digest of JSON
$currency = json_decode( $currencydata, true, 512 );
$usdgbp = ($currency['rates']['GBP']);
echo "$usdgbp pence per USD dollar";
echo $br;
echo $br;
// convert metals into price per ounce in pounds

$goldpounds = $goldprice * $usdgbp;
$silverpounds = $silverprice * $usdgbp;
$platpounds = $platprice * $usdgbp;
echo "GBP $goldpounds per ounce of gold";
echo $br;
echo "GBP $silverpounds per ounce of silver";
echo $br;   
echo "GBP $platpounds per ounce of platinum";
echo $br;
echo $br;

//metals prices in grams
$goldpoundsgram = $goldpounds / 31.1034768;
$silverpoundsgram = $silverpounds / 31.1034768;
$platpoundsgram = $platpounds / 31.1034768;
echo "$goldpoundsgram pounds per gram of gold";
echo $br;
echo "$silverpoundsgram pounds per gram of silver";
echo $br;
echo "$platpoundsgram pounds per gram of platinum";
echo $br;
echo $br;
// metal prices denominated in BTC
$btcgoldgram = ($goldpoundsgram / $btcgbpvwap);
$btcsilvergram = ($silverpoundsgram / $btcgbpvwap);
$btcplatgram = ($platpoundsgram / $btcgbpvwap);
echo "<b>"; 
echo $btcgoldgram;
echo " bitcoins per gram of gold";
echo $br;   
echo $btcsilvergram;
echo " bitcoins per gram of silver";
echo $br;
echo $btcplatgram;
echo " bitcoins per gram of platinum";

?>

2 个答案:

答案 0 :(得分:4)

实际上price只是表product中的一个数字字段,您可以使用基于product_id的简单更新语句对其进行更新。

同一个表中还有一列cost,仅用于报告管理面板中的收入。如果您对此类报告感兴趣,也可以更新它。

要从product_id恢复product_description,您可以使用产品名称(请注意名称​​已本地化)。假设您的数据库包含名为 gram of silver 的产品,那么您的更新可能是

update product p,product_description d set price=$btcsilvergram
 where p.product_id=d.product_id and name='gram of silver'

价值免税。

答案 1 :(得分:0)

我正在寻找类似的东西。由于我的供应商价格均为美元(即它们都不会接受比特币),我宁愿将这些价格硬编码到Opencart中,然后使用Opencart的内置汇率转换器来收取足够的比特币以支付任何给定的费用天。通过调整我的管理员和主题设置,我只能在BTC中显示价格,并取消访问者更改默认货币(菜单项,模块等)的能力。然后,我只需要定期更新Opencart中的USD-&gt; BTC费率,所有产品价格都会适当更新 - 每天,每天4次,每小时等等。

Opencart数据库有一个名为“currency”的表,用于存储适当的汇率。

比特币通常以BTC-USD(每10亿美元XXusd)报价,但我需要USD-BTC汇率,因为我的价格以美元存储。我倒了一个比特币样本价格(每1美元1 / $ 4 => .25btc)并将其存储在Opencart中。

CURRENCY:
(4, 'Bitcoin', 'btc', 'B⃦', 'BTC', '2', 0.25000000, 1, '2012-04-10 12:13:45'),  
(2, 'US Dollar', 'USD', '$', '', '2', 1.00000000, 1, '2012-04-10 12:12:33');

现在,我只是一个脚本,可以在需要时更新“.25000000”值。我打算回避整个Opencart系统,并在服务器上设置一个cron作业,每天更新一次。我在其他地方设置了一些警报,以便在比特币价格出现大幅下跌时通知我。如果发生一些极端的价格变化,我可以登录Opencart并手动调整费率。

希望这会有所帮助: - )