. * * @package Simple PHP Integration * @link https://www.bspayone.com/ * @copyright (C) BS PAYONE GmbH 2016, 2018 * @author Florian Bender * @author Timo Kuchel * @author Hannes Reinberger */ namespace App\Services; //require 'vendor/autoload.php'; use Exception; use GuzzleHttp\Client; use Psr\Http\Message\ResponseInterface; /** * Class Payone */ class Payone { /** * The URL of the Payone API */ const PAYONE_SERVER_API_URL = 'https://api.pay1.de/post-gateway/'; const PAYONE_CLIENT_API_URL = 'https://secure.pay1.de/client-api/'; /** * performing the HTTP POST request to the PAYONE platform * * @param array $request * @param string $responsetype * @throws Exception * @return array|\Psr\Http\Message\StreamInterface Returns an array of response * parameters in "classic" mode, a Stream for any other mode. */ public static function sendRequest($request, $responsetype = "") { if ($responsetype === "json") { // appends the accept: application/json header to the request // This is used to retrieve structured JSON in the response // $client = new Client(['headers' => ['accept' => 'application/json', 'content-type' => 'text/plain;charset=UTF-8']]); $client = new Client(['headers' => ['accept' => 'application/json']]); } else { // if $responsetype is set to anything else than "json", use the standard request // $client = new Client(['headers' => ['content-type' => 'text/plain;charset=UTF-8']]); $client = new Client(); } // echo "Requesting..."; $begin = microtime(true); try { $response = $client->request('POST', self::PAYONE_SERVER_API_URL, ['form_params' => $request]); } catch (\GuzzleHttp\Exception\ClientException $e) { $error = $e->getResponse(); $responseBodyAsString = $error->getBody()->getContents(); MyLog::writeLog( 'payone', 'error', 'Error:1002 Der Zahlungsanbieter ist nicht erreichbar, die Zahlung konnte nicht durchgeführt werden. App\Services\Payone::sendRequest Something went wrong during the HTTP request.', ['error' => $error, 'responseBodyAsString' => $responseBodyAsString, 'request' => $request] ); abort(403, 'Der Zahlungsanbieter ist nicht erreichbar, die Zahlung konnte nicht durchgeführt werden. Bitte versuchen Sie es später erneut. Fehlercode: 1002'); } if (isset($response)) { if (implode($response->getHeader('Content-Type')) == 'text/plain;charset=UTF-8'){ // if the content type is text/plain, parse response into array $return = self::parseResponse($response); // \Log::channel('payone')->error('App\Services\Payone::sendRequest content type is text/plain: '.$response); } else { // if the content type is anything else, just return the response body $return = json_decode($response->getBody(),true); MyLog::writeLog( 'payone', 'error', 'Error: App\Services\Payone::sendRequest content type is anything else', ['error' => $return, 'response' => $response, 'request' => $request] ); } } else { MyLog::writeLog( 'payone', 'error', 'Error: App\Services\Payone::sendRequest Something went wrong during the HTTP request', ['request' => $request] ); throw new Exception('Something went wrong during the HTTP request.'); } $end = microtime(true); $duration = $end - $begin; if(!is_array($return)){ MyLog::writeLog( 'payone', 'error', 'Error: 1003 App\Http\Controllers\Pay\PayoneController::ResponseData response is non array: return:', ['return'=>$return, 'response' => $response, 'request' => $request] ); abort(403, 'Der Zahlungsanbieter ist nicht erreichbar, die Zahlung konnte nicht durchgeführt werden. Bitte versuchen Sie es später erneut. Fehlercode: 1003'); } if(!isset($return['status'])){ MyLog::writeLog( 'payone', 'error', 'Error: 1004 App\Http\Controllers\Pay\PayoneController::ResponseData response has non status', ['return'=>$return, 'response' => $response, 'request' => $request] ); abort(403, 'Der Zahlungsanbieter ist nicht erreichbar, die Zahlung konnte nicht durchgeführt werden. Bitte versuchen Sie es später erneut. Fehlercode: 1004'); } /* echo "done.\n"; echo "Request took " . $duration . " seconds.\n"; echo "
"; */ return $return; } /** * gets response string an puts it into an array * * @param \Psr\Http\Message\ResponseInterface $response * @throws Exception * @return array */ public static function parseResponse(ResponseInterface $response) { $responseArray = array(); $explode = explode("\n", $response->getBody()); foreach ($explode as $e) { $keyValue = explode("=", $e); if (trim($keyValue[0]) != "") { if (count($keyValue) == 2) { $responseArray[$keyValue[0]] = trim($keyValue[1]); } else { $key = $keyValue[0]; unset($keyValue[0]); $value = implode("=", $keyValue); $responseArray[$key] = $value; } } } /*if ($responseArray['status'] == "ERROR") { $msg = "Payone returned an error:\n" . print_r($responseArray, true); throw new Exception($msg); }*/ return $responseArray; } }