gpt4 book ai didi

php - 如何解析来自 google checkout 的 XML 响应?

转载 作者:行者123 更新时间:2023-11-29 09:21:42 25 4
gpt4 key购买 nike

我在处理订单时看到了 google checkout 的 XML 响应 here .

我还看到了我在下面复制的 google responsehandlerdemo.php 文件。

我不知道应该在哪里插入用于更新商店库存水平的代码。有人可以指点我那里吗?我也不太确定当我收到回复时如何找出所订购的商品。

<?php



chdir("..");
require_once('library/googleresponse.php');
require_once('library/googlemerchantcalculations.php');
require_once('library/googleresult.php');
require_once('library/googlerequest.php');

define('RESPONSE_HANDLER_ERROR_LOG_FILE', 'googleerror.log');
define('RESPONSE_HANDLER_LOG_FILE', 'googlemessage.log');
$merchant_id = ""; // Your Merchant ID
$merchant_key = ""; // Your Merchant Key
$server_type = "sandbox"; // change this to go live
$currency = 'USD'; // set to GBP if in the UK

$Gresponse = new GoogleResponse($merchant_id, $merchant_key);

$Grequest = new GoogleRequest($merchant_id, $merchant_key, $server_type, $currency);

//Setup the log file
$Gresponse->SetLogFiles(RESPONSE_HANDLER_ERROR_LOG_FILE,
RESPONSE_HANDLER_LOG_FILE, L_ALL);

// Retrieve the XML sent in the HTTP POST request to the ResponseHandler
$xml_response = isset($HTTP_RAW_POST_DATA)?
$HTTP_RAW_POST_DATA:file_get_contents("php://input");
if (get_magic_quotes_gpc()) {
$xml_response = stripslashes($xml_response);
}
list($root, $data) = $Gresponse->GetParsedXML($xml_response);
$Gresponse->SetMerchantAuthentication($merchant_id, $merchant_key);

$status = $Gresponse->HttpAuthentication();
if(! $status) {
die('authentication failed');
}

/* Commands to send the various order processing APIs
* Send charge order : $Grequest->SendChargeOrder($data[$root]
* ['google-order-number']['VALUE'], <amount>);
* Send process order : $Grequest->SendProcessOrder($data[$root]
* ['google-order-number']['VALUE']);
* Send deliver order: $Grequest->SendDeliverOrder($data[$root]
* ['google-order-number']['VALUE'], <carrier>, <tracking-number>,
* <send_mail>);
* Send archive order: $Grequest->SendArchiveOrder($data[$root]
* ['google-order-number']['VALUE']);
*
*/

switch ($root) {
case "request-received": {
break;
}
case "error": {
break;
}
case "diagnosis": {
break;
}
case "checkout-redirect": {
break;
}
case "merchant-calculation-callback": {
// Create the results and send it
$merchant_calc = new GoogleMerchantCalculations($currency);

// Loop through the list of address ids from the callback
$addresses = get_arr_result($data[$root]['calculate']['addresses']['anonymous-address']);
foreach($addresses as $curr_address) {
$curr_id = $curr_address['id'];
$country = $curr_address['country-code']['VALUE'];
$city = $curr_address['city']['VALUE'];
$region = $curr_address['region']['VALUE'];
$postal_code = $curr_address['postal-code']['VALUE'];

// Loop through each shipping method if merchant-calculated shipping
// support is to be provided
if(isset($data[$root]['calculate']['shipping'])) {
$shipping = get_arr_result($data[$root]['calculate']['shipping']['method']);
foreach($shipping as $curr_ship) {
$name = $curr_ship['name'];
//Compute the price for this shipping method and address id
$price = 12; // Modify this to get the actual price
$shippable = "true"; // Modify this as required
$merchant_result = new GoogleResult($curr_id);
$merchant_result->SetShippingDetails($name, $price, $shippable);

if($data[$root]['calculate']['tax']['VALUE'] == "true") {
//Compute tax for this address id and shipping type
$amount = 15; // Modify this to the actual tax value
$merchant_result->SetTaxDetails($amount);
}

if(isset($data[$root]['calculate']['merchant-code-strings']
['merchant-code-string'])) {
$codes = get_arr_result($data[$root]['calculate']['merchant-code-strings']
['merchant-code-string']);
foreach($codes as $curr_code) {
//Update this data as required to set whether the coupon is valid, the code and the amount
$coupons = new GoogleCoupons("true", $curr_code['code'], 5, "test2");
$merchant_result->AddCoupons($coupons);
}
}
$merchant_calc->AddResult($merchant_result);
}
} else {
$merchant_result = new GoogleResult($curr_id);
if($data[$root]['calculate']['tax']['VALUE'] == "true") {
//Compute tax for this address id and shipping type
$amount = 15; // Modify this to the actual tax value
$merchant_result->SetTaxDetails($amount);
}
$codes = get_arr_result($data[$root]['calculate']['merchant-code-strings']
['merchant-code-string']);
foreach($codes as $curr_code) {
//Update this data as required to set whether the coupon is valid, the code and the amount
$coupons = new GoogleCoupons("true", $curr_code['code'], 5, "test2");
$merchant_result->AddCoupons($coupons);
}
$merchant_calc->AddResult($merchant_result);
}
}
$Gresponse->ProcessMerchantCalculations($merchant_calc);
break;
}
case "new-order-notification": {
$Gresponse->SendAck();
break;
}
case "order-state-change-notification": {
$Gresponse->SendAck();
$new_financial_state = $data[$root]['new-financial-order-state']['VALUE'];
$new_fulfillment_order = $data[$root]['new-fulfillment-order-state']['VALUE'];

switch($new_financial_state) {
case 'REVIEWING': {
break;
}
case 'CHARGEABLE': {
//$Grequest->SendProcessOrder($data[$root]['google-order-number']['VALUE']);
//$Grequest->SendChargeOrder($data[$root]['google-order-number']['VALUE'],'');
break;
}
case 'CHARGING': {
break;
}
case 'CHARGED': {
break;
}
case 'PAYMENT_DECLINED': {
break;
}
case 'CANCELLED': {
break;
}
case 'CANCELLED_BY_GOOGLE': {
//$Grequest->SendBuyerMessage($data[$root]['google-order-number']['VALUE'],
// "Sorry, your order is cancelled by Google", true);
break;
}
default:
break;
}

switch($new_fulfillment_order) {
case 'NEW': {
break;
}
case 'PROCESSING': {
break;
}
case 'DELIVERED': {
break;
}
case 'WILL_NOT_DELIVER': {
break;
}
default:
break;
}
break;
}
case "charge-amount-notification": {
//$Grequest->SendDeliverOrder($data[$root]['google-order-number']['VALUE'],
// <carrier>, <tracking-number>, <send-email>);
//$Grequest->SendArchiveOrder($data[$root]['google-order-number']['VALUE'] );
$Gresponse->SendAck();
break;
}
case "chargeback-amount-notification": {
$Gresponse->SendAck();
break;
}
case "refund-amount-notification": {
$Gresponse->SendAck();
break;
}
case "risk-information-notification": {
$Gresponse->SendAck();
break;
}
default:
$Gresponse->SendBadRequestStatus("Invalid or not supported Message");
break;
}
/* In case the XML API contains multiple open tags
with the same value, then invoke this function and
perform a foreach on the resultant array.
This takes care of cases when there is only one unique tag
or multiple tags.
Examples of this are "anonymous-address", "merchant-code-string"
from the merchant-calculations-callback API
*/
function get_arr_result($child_node) {
$result = array();
if(isset($child_node)) {
if(is_associative_array($child_node)) {
$result[] = $child_node;
}
else {
foreach($child_node as $curr_node){
$result[] = $curr_node;
}
}
}
return $result;
}

/* Returns true if a given variable represents an associative array */
function is_associative_array( $var ) {
return is_array( $var ) && !is_numeric( implode( '', array_keys( $var ) ) );
}
?>

我假设我想在下面的 block 中执行此操作,但我真的完全不确定如何解析 XML,这是我以前从未使用 PHP 做过的事情。

  case "new-order-notification": {
$Gresponse->SendAck();
break;"
}

最佳答案

看来您走在正确的轨道上:您希望在收到订单时减少库存,因此在其他地方,如果您的库存为零,您可以立即显示该商品缺货。

至于您的其他问题,看起来 $data[$root] 数组的每个括号级别都会使您在 XML 结构中下降到另一个级别,如示例代码的商家回调计算情况所示。

整个响应似乎都在 $data 中,因此我只需查看示例响应并以这种方式查找您要查找的内容。也许可以使用一些 echo 语句来查看 ['VALUE'] 在不同位置会出现什么情况。

完全是一个启发式的答案,但希望它有所帮助。 ;)

关于php - 如何解析来自 google checkout 的 XML 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1582699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com