Files
2017-03-02 20:30:40 -06:00

279 lines
11 KiB
PHP
Executable File

<?php
if (!defined('CC_INI_SET')) die("Access Denied");
/**
* Copyright (C) 2006 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.
*
* It has a SendReq function to post different requests to the Google Server
* Send functions are provided for most of the commands that are supported
* by the server
* Refer demo/responsehandlerdemo.php for different use case scenarios
* for this code
*/
class GoogleResponse {
var $merchant_id;
var $merchant_key;
var $server_url;
var $schema_url;
var $base_url;
var $checkout_url;
var $checkout_diagnose_url;
var $request_url;
var $request_diagnose_url;
var $response;
var $root;
var $data;
var $xml_parser;
function GoogleResponse($id, $key, $response, $server_type ="checkout") {
$this->merchant_id = $id;
$this->merchant_key = $key;
if($server_type == "sandbox")
// changed from https://sandbox.google.com/ on 17 Jan 2007
$this->server_url = "https://sandbox.google.com/checkout/";
else
$this->server_url = "https://checkout.google.com/";
$this->schema_url = "http://checkout.google.com/schema/2";
$this->base_url = $this->server_url."cws/v2/Merchant/" .
$this->merchant_id;
$this->checkout_url = $this->base_url . "/checkout";
$this->checkout_diagnose_url = $this->base_url . "/checkout/diagnose";
$this->request_url = $this->base_url . "/request";
$this->request_diagnose_url = $this->base_url . "/request/diagnose";
$this->response = $response;
if(strpos(__FILE__, ':') !== false)
$path_delimiter = ';';
else
$path_delimiter = ':';
ini_set('include_path', ini_get('include_path').$path_delimiter.'.');
require_once('xml-processing/xmlparser.php');
$this->xml_parser = new XmlParser($response);
$this->root = $this->xml_parser->GetRoot();
$this->data = $this->xml_parser->GetData();
}
function HttpAuthentication($headers) {
if(isset($headers['Authorization'])) {
$auth_encode = $headers['Authorization'];
$auth = base64_decode(substr($auth_encode,
strpos($auth_encode, " ") + 1));
$compare_mer_id = substr($auth, 0, strpos($auth,":"));
$compare_mer_key = substr($auth, strpos($auth,":")+1);
} else {
return false;
}
if($compare_mer_id != $this->merchant_id ||
$compare_mer_key != $this->merchant_key)
return false;
return true;
}
function SendChargeOrder($google_order, $amount='', $message_log) {
global $config;
$postargs = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<charge-order xmlns=\"".$this->schema_url.
"\" google-order-number=\"". $google_order. "\">";
if ($amount != '') {
$postargs .= "<amount currency=\"".$config['defaultCurrency']."\">" . $amount . "</amount>";
}
$postargs .= "</charge-order>";
return $this->SendReq($this->request_url, $this->GetAuthenticationHeaders(),
$postargs, $message_log);
}
function SendRefundOrder($google_order, $amount, $reason, $comment, $message_log) {
global $config;
$postargs = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<refund-order xmlns=\"".$this->schema_url.
"\" google-order-number=\"". $google_order. "\">
<reason>". $reason . "</reason>
<amount currency=\"".$config['defaultCurrency']."\">".htmlentities($amount)."</amount>
<comment>". htmlentities($comment) . "</comment>
</refund-order>";
return $this->SendReq($this->request_url, $this->GetAuthenticationHeaders(),
$postargs, $message_log);
}
function SendCancelOrder($google_order, $reason, $comment, $message_log) {
$postargs = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<cancel-order xmlns=\"".$this->schema_url.
"\" google-order-number=\"". $google_order. "\">
<reason>". htmlentities($reason) . "</reason>
<comment>". htmlentities($comment) . "</comment>
</cancel-order>";
return $this->SendReq($this->request_url, $this->GetAuthenticationHeaders(),
$postargs, $message_log);
}
function SendTrackingData($google_order, $carrier, $tracking_no, $message_log) {
$postargs = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<add-tracking-data xmlns=\"". $this->schema_url .
"\" google-order-number=\"". $google_order . "\">
<tracking-data>
<carrier>". htmlentities($carrier) . "</carrier>
<tracking-number>". $tracking_no . "</tracking-number>
</tracking-data>
</add-tracking-data>";
return $this->SendReq($this->request_url, $this->GetAuthenticationHeaders(),
$postargs, $message_log);
}
function SendMerchantOrderNumber($google_order, $merchant_order, $message_log) {
$postargs = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<add-merchant-order-number xmlns=\"". $this->schema_url .
"\" google-order-number=\"". $google_order . "\">
<merchant-order-number>" . $merchant_order .
"</merchant-order-number>
</add-merchant-order-number>";
return $this->SendReq($this->request_url, $this->GetAuthenticationHeaders(),
$postargs, $message_log);
}
function SendBuyerMessage($google_order, $message, $send_mail="true",$message_log) {
$postargs = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<send-buyer-message xmlns=\"". $this->schema_url .
"\" google-order-number=\"". $google_order . "\">
<message>" . $message . "</message>
<send-mail>" . $send_mail . "</send-mail>
</send-buyer-message>";
return $this->SendReq($this->request_url, $this->GetAuthenticationHeaders(),
$postargs, $message_log);
}
function SendProcessOrder($google_order, $message_log) {
$postargs = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<process-order xmlns=\"".$this->schema_url .
"\" google-order-number=\"". $google_order. "\"/> ";
return $this->SendReq($this->request_url, $this->GetAuthenticationHeaders(),
$postargs, $message_log);
}
function SendDeliverOrder($google_order, $carrier, $tracking_no, $send_mail = "true", $message_log) {
$postargs = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<deliver-order xmlns=\"". $this->schema_url .
"\" google-order-number=\"". $google_order . "\">
<tracking-data>
<carrier>". htmlentities($carrier) . "</carrier>
<tracking-number>". $tracking_no . "</tracking-number>
</tracking-data>
<send-email>". $send_mail . "</send-email>
</deliver-order>";
return $this->SendReq($this->request_url, $this->GetAuthenticationHeaders(),
$postargs, $message_log);
}
function SendArchiveOrder($google_order, $message_log) {
$postargs = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<archive-order xmlns=\"".$this->schema_url.
"\" google-order-number=\"". $google_order. "\"/>";
return $this->SendReq($this->request_url, $this->GetAuthenticationHeaders(),
$postargs, $message_log);
}
function SendUnarchiveOrder($google_order, $message_log) {
$postargs = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<unarchive-order xmlns=\"".
$this->schema_url."\" google-order-number=\"".
$google_order. "\"/>";
return $this->SendReq($this->request_url, $this->GetAuthenticationHeaders(),
$postargs, $message_log);
}
function ProcessMerchantCalculations($merchant_calc) {
$result = $merchant_calc->GetXML();
echo $result;
}
function GetAuthenticationHeaders() {
$headers = array();
$headers[] = "Authorization: Basic ".base64_encode(
$this->merchant_id.':'.$this->merchant_key);
$headers[] = "Content-Type: application/xml";
$headers[] = "Accept: application/xml";
return $headers;
}
function SendReq($url, $header_arr, $postargs, $message_log) {
global $config;
// Get the curl session object
$session = curl_init($url);
// Set the POST options.
curl_setopt($session, CURLOPT_POST, true);
curl_setopt($session, CURLOPT_HTTPHEADER, $header_arr);
curl_setopt($session, CURLOPT_POSTFIELDS, $postargs);
curl_setopt($session, CURLOPT_HEADER, true);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
if($config['proxy']==1){
curl_setopt ($session, CURLOPT_PROXY, $config['proxyHost'].":".$config['proxyPort']);
}
// Do the POST and then close the session
$response = curl_exec($session);
if (curl_errno($session)) {
die(curl_error($session));
} else {
curl_close($session);
}
// Get HTTP Status code from the response
$status_code = array();
preg_match('/\d\d\d/', $response, $status_code);
// Check for errors
switch( $status_code[0] ) {
case 200:
// Success
break;
case 503:
die('Error 503: Service unavailable.');
break;
case 403:
die('Error 403: Forbidden.');
break;
case 400:
die('Error 400: Bad request.');
break;
default:
echo $response;
die('Error :' . $status_code[0]);
}
fwrite($message_log, sprintf("\n\r%s:- %s\n",date("D M j G:i:s T Y"),
$response));
}
function SendAck() {
$acknowledgment = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" .
"<notification-acknowledgment xmlns=\"" .
$this->schema_url . "\"/>";
echo $acknowledgment;
}
}
?>