基于blockchain.com URL实现USD转BTC自动换算报错求助
问题解决:修复BTC价格显示的非数值错误
错误原因
你当前的代码里,$btc_conversion_rate变量仅存储了API的URL字符串,并未实际发起请求获取返回的汇率数值。直接用字符串和价格做除法运算,会触发"非数值类型"警告,导致计算失败。
修正后的代码
function manual_currency_conversion( $price ) { // 发起请求获取1美元对应的BTC汇率 $btc_conversion_rate = file_get_contents("https://www.blockchain.com/tobtc?currency=USD&value=1"); // 处理请求失败或返回非数值的情况 if ( !is_numeric($btc_conversion_rate) || (float)$btc_conversion_rate <= 0 ) { return 'N/A'; // 请求失败时显示占位符 } // 计算商品价格对应的BTC金额:价格(美元) × 1美元兑换的BTC数量 $btc_price = (float)$price * (float)$btc_conversion_rate; return number_format( $btc_price, 8, '.', '' ); } add_filter( 'wc_price', 'btc_additional_currency', 10, 5 ); function btc_additional_currency( $return, $price, $args, $unformatted_price, $original_price = null ) { $display_btc_price = manual_currency_conversion( $price ); $btc_currency = '₿'; $display_btc_price = $btc_currency . $display_btc_price; $btc_price_on_product_page = '<small><span class="btc-price"> ( ' . $display_btc_price . ' ) </small></span>'; return $return . $btc_price_on_product_page; }
关键改动说明
- 添加API请求逻辑:用
file_get_contents()获取blockchain.com返回的汇率数值,而非直接使用URL字符串。 - 增加异常处理:判断请求返回内容是否为有效数值,避免因API请求失败引发后续错误。
- 修正计算逻辑:原代码除法逻辑错误,正确计算应为「商品美元价格 × 1美元兑换的BTC数量」,得到对应BTC金额。
替代方案(若服务器禁用file_get_contents)
如果服务器限制了file_get_contents(),可改用curl方式请求API:
function get_btc_conversion_rate() { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://www.blockchain.com/tobtc?currency=USD&value=1"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $rate = curl_exec($ch); curl_close($ch); return $rate; } // 在manual_currency_conversion函数中替换请求部分: $btc_conversion_rate = get_btc_conversion_rate();
内容的提问来源于stack exchange,提问作者Learning WooStoreFront
相关产品推荐
相关产品推荐

