Braintree 沙盒上的突然失败请求 API:'Billing state format is invalid'

Sudden Failure Requests on Braintree Sandbox API: 'Billing state format is invalid'

我们是 运行 一家连接到 Braintree 的英国 Magento 商店。几个月来一切都运行顺利,然后突然之间,我们无法再在连接到 Braintree Sandbox 的任何暂存或本地测试环境中完成订单。

结帐时,向 3d 安全端点发出请求,如果我们输入的是英国县,我们会收到以下响应:

端点: https://api.sandbox.braintreegateway.com/merchants/xxx/client_api/v1/payment_methods/xxx/three_d_secure/lookup

请求结算部分:

"additionalInfo": {
        "billingCity": "Leeds",
        "billingCountryCode": "GB",
        "billingGivenName": "John",
        "billingLine1": "50 Upton Road",
        "billingPhoneNumber": "07733222111",
        "billingPostalCode": "LE6 7TH",
        "billingState": "Yorkshire",
        "billingSurname": "Smith"
    },

响应:

{
    "error": {
        "message": "Billing state format is invalid."
    },
    "threeDSecureInfo": {
        "liabilityShiftPossible": false,
        "liabilityShifted": false
    }
}

如果我们从结帐中删除县字段(并最终从请求中删除'billingSate),则响应有效并且我们能够正常结帐。

有人有什么想法吗?

今天我在 Braintree 中遇到了 3DSecure 的同样问题。 首先,我确保我使用的是最新版本的插件、客户端和数据收集器脚本(在撰写此回复时)是:

<script src="https://js.braintreegateway.com/web/3.71.0/js/client.min.js"></script>
<script src="https://js.braintreegateway.com/web/3.71.0/js/data-collector.min.js"></script>
<script src="https://js.braintreegateway.com/web/dropin/1.25.0/js/dropin.min.js"></script>

然后我 modified/renamed 两个“threeDSecure”属性“locality”->“city”和“region”->“state”

dropin.requestPaymentMethod({
            threeDSecure: {
                amount: '10.01',
                email: 'me@mydomain.com',
                billingAddress: {
                    givenName: 'John',
                    surname: 'Smith',
                    streetAddress: '51 East Street,
                    extendedAddress: 'na',
                    city: 'Colchester',
                    state: 'Essex',
                    postalCode: 'CO1 2QY',
                    countryCodeAlpha2: 'GB'
                }
            }
        }, function (err, payload) {
            if (err) {
                console.log('tokenization error:');
                dropin.clearSelectedPaymentMethod();     
                return;
            }

            if (!payload.liabilityShifted) {
                console.log('Liability did not shift');
                return;
            }

                console.log('verification success');
                console.log(payload.nonce);
        });

我希望这对你有所帮助,因为它在沙盒环境中对我来说工作得很好。

关于这个问题,我终于从 Braintree 那里得到了答复。显然 3ds2 现在在 Sandbox 上强制执行,这需要将州或县作为两位数代码发送。

在生产中,如果发送全名,它将(当前)优雅地降级为 3ds1 并完成。

为了促使人们使用 3ds2,Sandbox 没有切换到 3ds1 并且 returns 错误。