Aucune description

Signature.php 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace AliyunMNS\Signature;
  3. use AliyunMNS\Requests\BaseRequest;
  4. use AliyunMNS\Constants;
  5. class Signature
  6. {
  7. static public function SignRequest($accessKey, BaseRequest &$request)
  8. {
  9. $canonicalizedMNSHeaders = "";
  10. $headers = $request->getHeaders();
  11. $contentMd5 = "";
  12. if (isset($headers['Content-MD5']))
  13. {
  14. $contentMd5 = $headers['Content-MD5'];
  15. }
  16. $contentType = "";
  17. if (isset($headers['Content-Type']))
  18. {
  19. $contentType = $headers['Content-Type'];
  20. }
  21. $date = $headers['Date'];
  22. $queryString = $request->getQueryString();
  23. $canonicalizedResource = $request->getResourcePath();
  24. if ($queryString != NULL)
  25. {
  26. $canonicalizedResource .= "?" . $request->getQueryString();
  27. }
  28. if (0 !== strpos($canonicalizedResource, "/"))
  29. {
  30. $canonicalizedResource = "/" . $canonicalizedResource;
  31. }
  32. $tmpHeaders = array();
  33. foreach ($headers as $key => $value)
  34. {
  35. if (0 === strpos($key, Constants::MNS_HEADER_PREFIX))
  36. {
  37. $tmpHeaders[$key] = $value;
  38. }
  39. }
  40. ksort($tmpHeaders);
  41. $canonicalizedMNSHeaders = implode("\n", array_map(function ($v, $k) { return $k . ":" . $v; }, $tmpHeaders, array_keys($tmpHeaders)));
  42. $stringToSign = strtoupper($request->getMethod()) . "\n" . $contentMd5 . "\n" . $contentType . "\n" . $date . "\n" . $canonicalizedMNSHeaders . "\n" . $canonicalizedResource;
  43. return base64_encode(hash_hmac("sha1", $stringToSign, $accessKey, $raw_output = TRUE));
  44. }
  45. }
  46. ?>