CoinRate.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. namespace app\common\library;
  3. use think\Cache;
  4. use think\Hook;
  5. /**
  6. * 根据汇率转换金额
  7. * Class CoinRate
  8. * @package app\common\library
  9. */
  10. class CoinRate
  11. {
  12. protected static $apiUrl = 'https://api.it120.cc/gooking/forex/rate?fromCode=%s&toCode=%s';
  13. /**
  14. * 转换汇率金额
  15. * @param $amount
  16. * @param string $from
  17. * @param string $to
  18. * @return float|mixed
  19. */
  20. public static function transfer($amount, $from='CNY', $to='USD')
  21. {
  22. if(empty($from) || empty($to)){
  23. return $amount;
  24. }
  25. $cacheKey = "cache:rates:{$from}_{$to}";
  26. $data = Cache::get($cacheKey);
  27. $rate = isset($data['rate'])? floatval($data['rate']) : 0.00;
  28. $expired = isset($data['expired'])? intval($data['expired']) : 0;
  29. if($rate<=0 || $expired<time()){
  30. $result = curl_api_get(sprintf(self::$apiUrl, $to, $from));
  31. $result = $result? json_decode($result, true) : [];
  32. $data = isset($result['data'])? $result['data'] : [];
  33. $rate = isset($data['rate'])? floatval($data['rate']) : 0.00;
  34. if($rate > 0){
  35. $data['expired'] = time() + 300;
  36. Cache::set($cacheKey, $data, time() + 300);
  37. }
  38. }
  39. return $rate>0? floatval($rate * $amount) : $amount;
  40. }
  41. /**
  42. * 转换汇率金额
  43. * @param $amount
  44. * @param string $from
  45. * @param string $to
  46. * @return float|mixed
  47. */
  48. public static function getRate($from='CNY', $to='USD')
  49. {
  50. $cacheKey = "cache:rates:{$from}_{$to}";
  51. $data = Cache::get($cacheKey);
  52. $rate = isset($data['rate'])? floatval($data['rate']) : 0.00;
  53. $expired = isset($data['expired'])? intval($data['expired']) : 0;
  54. if($rate<=0 || $expired<time()){
  55. $result = curl_api_get(sprintf(self::$apiUrl, $to, $from));
  56. $result = $result? json_decode($result, true) : [];
  57. $data = isset($result['data'])? $result['data'] : [];
  58. $rate = isset($data['rate'])? floatval($data['rate']) : 0.00;
  59. if($rate > 0){
  60. $data['expired'] = time() + 300;
  61. Cache::set($cacheKey, $data, time() + 300);
  62. }
  63. }
  64. return $rate;
  65. }
  66. }
  67. ?>