Option.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. namespace Joypack\Tencent\Map;
  3. /**
  4. * 腾讯位置服务
  5. * 公共参数
  6. */
  7. class Option
  8. {
  9. const OUTPUT_JSON = 'json';
  10. const OUTPUT_JSONP = 'jsonp';
  11. protected $option = [];
  12. protected $secret;
  13. public function __construct($key=null, $secret=null)
  14. {
  15. $this->setKey($key);
  16. $this->setSecret($secret);
  17. }
  18. public function setSecret($value)
  19. {
  20. $this->secret = $value;
  21. }
  22. /**
  23. * 开发密钥
  24. * @param string $value
  25. */
  26. public function setKey($value)
  27. {
  28. $this->option['key'] = $value;
  29. }
  30. /**
  31. * 返回格式:支持JSON/JSONP,默认JSON
  32. * @param string $value
  33. */
  34. public function setOutput($value=self::OUTPUT_JSON)
  35. {
  36. $this->option['output'] = $value;
  37. }
  38. /**
  39. * JSONP方式回调函数
  40. * @param string $value
  41. */
  42. public function setCallback($value)
  43. {
  44. $this->option['callback'] = $value;
  45. }
  46. /**
  47. * 签名
  48. * @param string $uri
  49. */
  50. public function setSig($uri)
  51. {
  52. $this->option['sig'] = $this->buildSig($uri, $this->getAll());
  53. }
  54. /**
  55. * 获得所有参数
  56. * @return array
  57. */
  58. public function getAll()
  59. {
  60. return $this->option;
  61. }
  62. /**
  63. * 生成签名
  64. * @param string $uri
  65. * @return string
  66. */
  67. protected function buildSig($uri, $option)
  68. {
  69. ksort($option);
  70. $pieces = [];
  71. foreach ($option as $key => $val)
  72. {
  73. $pieces[] = "{$key}={$val}";
  74. }
  75. $str = sprintf('%s?%s', rtrim($uri, '/'), implode('&', $pieces));
  76. /*
  77. echo '<pre>';
  78. print_r("{$str}{$this->secret}");
  79. die;
  80. //*/
  81. return md5("{$str}{$this->secret}");
  82. }
  83. }