Magento2 无效的_请求:字段[order.avsDetails.billToFirstname]不在字符集[ISO-8859-1]中

Magento2 无效的_请求:字段[order.avsDetails.billToFirstname]不在字符集[ISO-8859-1]中,magento2,Magento2,由于某些原因,当我使用OnTap MasterCard扩展名时,Shipppment地址中的任何阿拉伯语字符都会抛出错误: INVALID_REQUEST: Field [order.avsDetails.billToFirstname] was not in charset [ISO-8859-1] 扩展链接: https://marketplace.magento.com/ontap-module-mastercard.html 请提供帮助。您可以尝试使用插件对构建器(在网关/Reque

由于某些原因,当我使用OnTap MasterCard扩展名时,Shipppment地址中的任何阿拉伯语字符都会抛出错误:

INVALID_REQUEST: Field [order.avsDetails.billToFirstname] was not in charset [ISO-8859-1]
扩展链接:

https://marketplace.magento.com/ontap-module-mastercard.html

请提供帮助。

您可以尝试使用插件对构建器(在
网关/Request
文件夹中)中生成的数据进行编码

您可以阅读更多有关如何创建插件的内容,这些插件在需要时对构建器中的所有字段执行编码

您将创建一个新模块,该模块正在对从市场上获得的扩展进行所需的修改

在本例中,要定义生成器,您的
di.xml
将如下所示:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="\OnTap\MasterCard\Gateway\Request\ShippingDataBuilder">
        <plugin name="jsparo_ontap_mastercard_gateway_request_shippingdatabuilder" type="Jsparo\MasterCard\Plugin\Gateway\Request\ShippingDataBuilder" sortOrder="1"/>
    </type>
</config>
<?php
namespace Jsparo\MasterCard\Plugin\Gateway\Request;
class ShippingDataBuilder {
    public function afterBuild(array $subject, $result) {
        array_walk_recursive($result, function(&$value) {
            $value = mb_convert_encoding($value, 'ISO-8859-1', 'UTF-8');
        }
        return $result;
    }
}

您必须为所有生成不正确数据的构建器执行此操作。

看起来像是编码问题,但奇怪的是扩展专门请求
ISO-8859-1
作为编码,数据库中表的编码是什么?表的编码:
utf8\u general\u ci
,数据库的编码:
utf8mb4
看起来不错,如果我是你,我会尝试直接联系创建该扩展的人。我尝试了很多次与他联系,但他们没有回复。在扩展主页
https://marketplace.magento.com/ontap-module-mastercard.html
。你能帮忙吗?我下载了扩展,但由于我自己无法完全测试它,你能提供完整的堆栈跟踪(省略敏感信息)吗?另外,你能提供确切的时间发生的信息吗?(我可以看到请求是为了捕获、销售或验证而发送的,并且是使用您在
网关/request
中找到的生成器类生成的)谢谢,我尝试了解决方案,阿拉伯文的效果很好,但当返回测试英语单词时出现此错误
[ISO-8859-1]操作被网关拒绝或拒绝,收单机构或发卡机构在处理交易时发生内部系统错误
您的日志中是否有任何错误(请检查您的Web服务器和magento日志),因为此错误表示网关存在编码问题,或者您的服务器在检查返回的数据时返回了500/其他错误。我的服务器没有返回任何错误,只是日志中有错误
[ISO-8859-1]网关拒绝或拒绝了操作,处理交易时发生收单机构或发卡机构内部系统错误
。在这种情况下,您可能必须查明您发送的数据是否包含无法正确识别的字符,并仅在特定情况下更改这些字符。我没有任何阿拉伯语方面的经验,所以从我这方面来说,帮助你更进一步有点困难。不过,您可以通过搜索找到其他一些解决方案。如果你解决了,请告诉我。是的,我昨天已经解决了,我可以通过
“firstName”=>mb\u detect\u编码($billingAddress->getFirstname(),“auto”)==“UTF-8”来检查?mb_convert_编码($billingAddress->getFirstname(),'ISO-8859-1','UTF-8'):$billingAddress->getFirstname(),
,在ciCustomerDataBuilder.php中。但用英语来说,它抛出了
操作被网关拒绝或拒绝,收单机构或发卡机构在处理交易时发生内部系统错误。