OptInHandler.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <?PHP
  2. namespace Mailgun\Lists;
  3. use Mailgun\Messages\Exceptions\InvalidParameter;
  4. use Mailgun\Messages\Exceptions\TooManyParameters;
  5. use Mailgun\Messages\Expcetions\InvalidParameterType;
  6. /*
  7. This class is used for creating a unique hash for
  8. mailing list subscription double-opt in requests.
  9. */
  10. class OptInHandler{
  11. function __construct(){
  12. }
  13. public function generateHash($mailingList, $secretAppId, $recipientAddress){
  14. $innerPayload = array('r' => $recipientAddress, 'l' => $mailingList);
  15. $encodedInnerPayload = base64_encode(json_encode($innerPayload));
  16. $innerHash = hash_hmac("sha1", $encodedInnerPayload, $secretAppId);
  17. $outerPayload = array('h' => $innerHash, 'p' => $encodedInnerPayload);
  18. return urlencode(base64_encode(json_encode($outerPayload)));
  19. }
  20. public function validateHash($secretAppId, $uniqueHash){
  21. $decodedOuterPayload = json_decode(base64_decode(urldecode($uniqueHash)), true);
  22. $decodedHash = $decodedOuterPayload['h'];
  23. $innerPayload = $decodedOuterPayload['p'];
  24. $decodedInnerPayload = json_decode(base64_decode($innerPayload), true);
  25. $computedInnerHash = hash_hmac("sha1", $innerPayload, $secretAppId);
  26. if($computedInnerHash == $decodedHash){
  27. return array('recipientAddress' => $decodedInnerPayload['r'], 'mailingList' => $decodedInnerPayload['l']);
  28. }
  29. return false;
  30. }
  31. }