RateHelper.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace common\helpers;
  3. use Yii;
  4. use yii\httpclient\Client;
  5. use yii\redis\Connection;
  6. class RateHelper
  7. {
  8. const RATE_URL = 'http://web.juhe.cn:8080/finance/exchange/rmbquot?key=05806e7b15ebbab91c1babceed3b468a';
  9. const RATE_CACHE_KEY = 'usdRate';
  10. /**
  11. * 获取入金 出金汇率
  12. * @param bool $refresh
  13. * @return mixed
  14. */
  15. public static function getRate($refresh = false)
  16. {
  17. $usdRate = Yii::$app->getCache()->get(self::RATE_CACHE_KEY);
  18. if ($usdRate == false || $refresh == true) {
  19. $client = new Client();
  20. $success = false;
  21. for ($i = 0; $i < 2; $i++) {
  22. $response = $client->get(self::RATE_URL, [], ['Referer' => 'web.juhe.cn'])->send();
  23. if ($response->getIsOk()) {
  24. $json = $response->getContent();
  25. $jsonArr = @json_decode($json, true);
  26. if ($jsonArr['error_code'] == 0 && !empty($jsonArr['result'][0])) {
  27. foreach ((array)$jsonArr['result'][0] as $dataKey => $dataRow) {
  28. if ($dataRow['name'] == '美元') {
  29. $usdRate['buyRate'] = number_format(round($dataRow['fBuyPri'] / 100, 3), 3, '.', '');
  30. $usdRate['sellRate'] = number_format(round($dataRow['fSellPri'] / 100, 3), 3, '.', '');
  31. Yii::$app->getCache()->set(self::RATE_CACHE_KEY, $usdRate, 3600);
  32. $success = true;
  33. break;
  34. }
  35. }
  36. }
  37. }
  38. if ($success == true) {
  39. break;
  40. }
  41. usleep(50000); // sleep 50ms
  42. }
  43. }
  44. return $usdRate;
  45. }
  46. /**
  47. * @return null|Connection
  48. */
  49. protected static function getRedis()
  50. {
  51. return Yii::$app->get('redis');
  52. }
  53. }