gpt4 book ai didi

php - WordPress MySQL 插入 JSON 编码数据时出现奇怪的行为

转载 作者:行者123 更新时间:2023-11-29 18:27:29 26 4
gpt4 key购买 nike

我正在查看我的代码和结果,但没有看到任何明显的错误,因此我认为让几双眼睛仔细检查可能会很有用。

我有一个自定义的 PayPal IPN 监听器,用于更新数据库中的交易表。我在周五下类前部署了它,今天回来后它似乎工作大部分正常;但我想弄清楚为什么一个插入物表现得很奇怪。

以下是周末发生的插入的捕获: PayPal IPN log

如您所见,log 的预期 JSON 值第四笔交易的栏为空。我觉得很奇怪,因为 transaction_id 的值正在从同一数组解析列。

这是相关的数据库insert代码:

// Generate valid IPN log
private function generateIpnLog () {
global $wpdb;

// prepare log
$array_log = [];
$array_log['verified'] = true;
$array_log['ipn_response'] = (isset($this->PayPal_Response)) ? : 'Error reading from POST array';

// Parse transaction ID
$transaction_id = (isset($this->PayPal_Response['txn_id'])) ? $this->PayPal_Response['txn_id'] : null;

// Generate log
$log = json_encode($array_log);

// Update DB
$wpdb->insert(
'log_paypal',
[
'transaction_id' => ($transaction_id) ? $transaction_id : 'Error getting transaction ID',
'log' => ($log) ? $log : 'Error generating transaction log'
],
[
'%s',
'%s'
]
);

// json log response
$this->json_return = $log;
}

从 PayPal 响应中可以很好地解析交易 ID,因为我们知道 $array_log['verified']有一个明确声明的值我猜测 json_encode($array_log) 一定有问题。

我还检查了相关 PayPal 帐户的 PayPal IPN 历史记录中的数据,并可以验证 null log 中数据的形成方式没有任何不同。专栏与其他专栏的比较。

有人知道在这种情况下会发生什么吗?

最佳答案

正如 @ishegg 所建议的,这是一个编码问题,因为 PayPal IPN 使用 windows-1252 编码,并且 DB 字段以 UTF-8 编码。

在这种情况下很容易修复,因为 PayPal 返回数据不是嵌套/多维的(见下文)。

在证书链对 PayPal IPN 条目进行加密验证后调用之前的函数:

// Process IPN response
$this->PayPal_Response = $this->processIpn();

然后,函数本身:

// Manipulate IPN response and prepare  
// for database update and log
private function processIpn () {
// Response ref.
$response = $this->post_array;

if ( isset($response['charset']) ) {
if ($response['charset'] == "windows-1252") {
foreach ($response as $key => $ipn_value) {
$response[$key] = mb_convert_encoding($ipn_value, 'UTF-8', 'Windows-1252');
}
}
}
return $response;
}

关于php - WordPress MySQL 插入 JSON 编码数据时出现奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46040962/

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