bebeboutik/modules/gcheckout/library/googleresponse.php
Srv Bebeboutik 6c0978166c add modules
2016-01-04 12:49:26 +01:00

227 lines
6.9 KiB
PHP
Executable File

<?php
/*
* Copyright (C) 2007 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* This class is instantiated everytime any notification or
* order processing commands are received.
*
* Refer demo/responsehandlerdemo.php for different use case scenarios
* for this code
*/
/**
* Handles the response to notifications sent by the Google Checkout server.
*/
class GoogleResponse {
var $merchant_id;
var $merchant_key;
var $schema_url;
var $log;
var $response;
var $root='';
var $data=array();
var $xml_parser;
/**
* @param string $id the merchant id
* @param string $key the merchant key
*/
function GoogleResponse($id=null, $key=null) {
$this->merchant_id = $id;
$this->merchant_key = $key;
$this->schema_url = "http://checkout.google.com/schema/2";
ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'.');
require_once('googlelog.php');
$this->log = new GoogleLog('', '', L_OFF);
}
/**
* @param string $id the merchant id
* @param string $key the merchant key
*/
function SetMerchantAuthentication($id, $key){
$this->merchant_id = $id;
$this->merchant_key = $key;
}
function SetLogFiles($errorLogFile, $messageLogFile, $logLevel=L_ERR_RQST) {
$this->log = new GoogleLog($errorLogFile, $messageLogFile, $logLevel);
}
/**
* Verifies that the authentication sent by Google Checkout matches the
* merchant id and key
*
* @param string $headers the headers from the request
*/
function HttpAuthentication($headers=null, $die=true) {
if (!is_null($headers))
$_SERVER = $headers;
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_GET['HTTP_AUTHORIZATIOIZATION'], 6)));
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
$compare_mer_id = $_SERVER['PHP_AUTH_USER'];
$compare_mer_key = $_SERVER['PHP_AUTH_PW'];
unset($_SERVER['PHP_AUTH_USER']);
unset($_SERVER['PHP_AUTH_PW']);
}
// IIS Note:: For HTTP Authentication to work with IIS,
// the PHP directive cgi.rfc2616_headers must be set to 0 (the default value).
elseif (isset($_SERVER['HTTP_AUTHORIZATION'])){
list($compare_mer_id, $compare_mer_key) = explode(':',
base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'],
strpos($_SERVER['HTTP_AUTHORIZATION'], " ") + 1)));
} elseif (isset($_SERVER['Authorization'])) {
list($compare_mer_id, $compare_mer_key) = explode(':',
base64_decode(substr($_SERVER['Authorization'],
strpos($_SERVER['Authorization'], " ") + 1)));
} else {
$this->SendFailAuthenticationStatus(
"Failed to Get Basic Authentication Headers",$die);
return false;
}
if ($compare_mer_id != $this->merchant_id
|| $compare_mer_key != $this->merchant_key) {
$this->SendFailAuthenticationStatus("Invalid Merchant Id/Key Pair",$die);
return false;
}
return true;
}
function ProcessMerchantCalculations($merchant_calc) {
$this->SendOKStatus();
$result = $merchant_calc->GetXML();
echo $result;
}
// Notification API
function ProcessNewOrderNotification() {
$this->SendAck();
}
function ProcessRiskInformationNotification() {
$this->SendAck();
}
function ProcessOrderStateChangeNotification() {
$this->SendAck();
}
// Amount Notifications
function ProcessChargeAmountNotification() {
$this->SendAck();
}
function ProcessRefundAmountNotification() {
$this->SendAck();
}
function ProcessChargebackAmountNotification() {
$this->SendAck();
}
function ProcessAuthorizationAmountNotification() {
$this->SendAck();
}
function SendOKStatus() {
header('HTTP/1.0 200 OK');
}
/**
* Set the response header indicating an erroneous authentication from
* Google Checkout
*
* @param string $msg the message to log
*/
function SendFailAuthenticationStatus($msg="401 Unauthorized Access",
$die=true) {
$this->log->logError($msg);
header('WWW-Authenticate: Basic realm="GoogleCheckout PHPSample Code"');
header('HTTP/1.0 401 Unauthorized');
if ($die) {
die($msg);
} else {
echo $msg;
}
}
/**
* Set the response header indicating a malformed request from Google
* Checkout
*
* @param string $msg the message to log
*/
function SendBadRequestStatus($msg="400 Bad Request", $die=true) {
$this->log->logError($msg);
header('HTTP/1.0 400 Bad Request');
if ($die) {
die($msg);
} else {
echo $msg;
}
}
/**
* Set the response header indicating that an internal error ocurred and
* the notification sent by Google Checkout can't be processed right now
*
* @param string $msg the message to log
*/
function SendServerErrorStatus($msg="500 Internal Server Error",
$die=true) {
$this->log->logError($msg);
header('HTTP/1.0 500 Internal Server Error');
if ($die) {
die($msg);
} else {
echo $msg;
}
}
/**
* Send an acknowledgement in response to Google Checkout's request
*/
function SendAck($die=true) {
$this->SendOKStatus();
$acknowledgment = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" .
"<notification-acknowledgment xmlns=\"" .
$this->schema_url . "\"/>";
$this->log->LogResponse($acknowledgment);
if ($die) {
die($acknowledgment);
} else {
echo $acknowledgment;
}
}
/**
* @access private
*/
function GetParsedXML($request=null){
if (!is_null($request)) {
$this->log->LogRequest($request);
$this->response = $request;
ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'.');
require_once('xml-processing/gc_xmlparser.php');
$this->xml_parser = new gc_xmlparser($request);
$this->root = $this->xml_parser->GetRoot();
$this->data = $this->xml_parser->GetData();
}
return array($this->root, $this->data);
}
}