DynamicKey5.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. $version = "005";
  3. $NO_UPLOAD = "0";
  4. $AUDIO_VIDEO_UPLOAD = "3";
  5. // InChannelPermissionKey
  6. $ALLOW_UPLOAD_IN_CHANNEL = 1;
  7. // Service Type
  8. $MEDIA_CHANNEL_SERVICE = 1;
  9. $RECORDING_SERVICE = 2;
  10. $PUBLIC_SHARING_SERVICE = 3;
  11. $IN_CHANNEL_PERMISSION = 4;
  12. function generateRecordingKey($appID, $appCertificate, $channelName, $ts, $randomInt, $uid, $expiredTs)
  13. {
  14. return generateDynamicKey($appID, $appCertificate, $channelName, $ts, $randomInt, $uid, $expiredTs, $GLOBALS["RECORDING_SERVICE"], array());
  15. }
  16. function generateMediaChannelKey($appID, $appCertificate, $channelName, $ts, $randomInt, $uid, $expiredTs)
  17. {
  18. return generateDynamicKey($appID, $appCertificate, $channelName, $ts, $randomInt, $uid, $expiredTs, $GLOBALS["MEDIA_CHANNEL_SERVICE"], array());
  19. }
  20. function generateInChannelPermissionKey($appID, $appCertificate, $channelName, $ts, $randomInt, $uid, $expiredTs, $permission)
  21. {
  22. $extra[$GLOBALS["ALLOW_UPLOAD_IN_CHANNEL"]] = $permission;
  23. return generateDynamicKey($appID, $appCertificate, $channelName, $ts, $randomInt, $uid, $expiredTs, $GLOBALS["IN_CHANNEL_PERMISSION"], $extra);
  24. }
  25. function generateDynamicKey($appID, $appCertificate, $channelName, $ts, $randomInt, $uid, $expiredTs, $serviceType, $extra)
  26. {
  27. $signature = generateSignature($serviceType, $appID, $appCertificate, $channelName, $uid, $ts, $randomInt, $expiredTs, $extra);
  28. $content = packContent($serviceType, $signature, hex2bin($appID), $ts, $randomInt, $expiredTs, $extra);
  29. // echo bin2hex($content);
  30. return $GLOBALS["version"] . base64_encode($content);
  31. }
  32. function generateSignature($serviceType, $appID, $appCertificate, $channelName, $uid, $ts, $salt, $expiredTs, $extra)
  33. {
  34. $rawAppID = hex2bin($appID);
  35. $rawAppCertificate = hex2bin($appCertificate);
  36. $buffer = pack("S", $serviceType);
  37. $buffer .= pack("S", strlen($rawAppID)) . $rawAppID;
  38. $buffer .= pack("I", $ts);
  39. $buffer .= pack("I", $salt);
  40. $buffer .= pack("S", strlen($channelName)) . $channelName;
  41. $buffer .= pack("I", $uid);
  42. $buffer .= pack("I", $expiredTs);
  43. $buffer .= pack("S", count($extra));
  44. foreach ($extra as $key => $value) {
  45. $buffer .= pack("S", $key);
  46. $buffer .= pack("S", strlen($value)) . $value;
  47. }
  48. return strtoupper(hash_hmac('sha1', $buffer, $rawAppCertificate));
  49. }
  50. function packString($value)
  51. {
  52. return pack("S", strlen($value)) . $value;
  53. }
  54. function packContent($serviceType, $signature, $appID, $ts, $salt, $expiredTs, $extra)
  55. {
  56. $buffer = pack("S", $serviceType);
  57. $buffer .= packString($signature);
  58. $buffer .= packString($appID);
  59. $buffer .= pack("I", $ts);
  60. $buffer .= pack("I", $salt);
  61. $buffer .= pack("I", $expiredTs);
  62. $buffer .= pack("S", count($extra));
  63. foreach ($extra as $key => $value) {
  64. $buffer .= pack("S", $key);
  65. $buffer .= packString($value);
  66. }
  67. return $buffer;
  68. }
  69. ?>