1<?php 2/** 3 * This is a PHP library that handles calling reCAPTCHA. 4 * 5 * @copyright Copyright (c) 2015, Google Inc. 6 * @link http://www.google.com/recaptcha 7 * 8 * Permission is hereby granted, free of charge, to any person obtaining a copy 9 * of this software and associated documentation files (the "Software"), to deal 10 * in the Software without restriction, including without limitation the rights 11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 * copies of the Software, and to permit persons to whom the Software is 13 * furnished to do so, subject to the following conditions: 14 * 15 * The above copyright notice and this permission notice shall be included in 16 * all copies or substantial portions of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 * THE SOFTWARE. 25 */ 26 27namespace ReCaptcha\RequestMethod; 28 29use ReCaptcha\RequestMethod; 30use ReCaptcha\RequestParameters; 31 32/** 33 * Sends POST requests to the reCAPTCHA service. 34 */ 35class Post implements RequestMethod 36{ 37 /** 38 * URL to which requests are POSTed. 39 * @const string 40 */ 41 const SITE_VERIFY_URL = 'https://www.google.com/recaptcha/api/siteverify'; 42 43 /** 44 * Submit the POST request with the specified parameters. 45 * 46 * @param RequestParameters $params Request parameters 47 * @return string Body of the reCAPTCHA response 48 */ 49 public function submit(RequestParameters $params) 50 { 51 /** 52 * PHP 5.6.0 changed the way you specify the peer name for SSL context options. 53 * Using "CN_name" will still work, but it will raise deprecated errors. 54 */ 55 $peer_key = version_compare(PHP_VERSION, '5.6.0', '<') ? 'CN_name' : 'peer_name'; 56 $options = array( 57 'http' => array( 58 'header' => "Content-type: application/x-www-form-urlencoded\r\n", 59 'method' => 'POST', 60 'content' => $params->toQueryString(), 61 // Force the peer to validate (not needed in 5.6.0+, but still works 62 'verify_peer' => true, 63 // Force the peer validation to use www.google.com 64 $peer_key => 'www.google.com', 65 ), 66 ); 67 $context = stream_context_create($options); 68 return file_get_contents(self::SITE_VERIFY_URL, false, $context); 69 } 70} 71