Я продаю товар, цена и валюта которого зависят от адреса доставки.
Если у пользователя два адреса, один в США, а другой в Великобритании, он сможет изменить адрес доставки через PayPal. Когда пользователь меняет регион с США на Великобританию, PayPal сообщает моему сайту, что произошло изменение региона, и он отвечает с новой валютой и ценой, изменяющейся с 345 долларов на 305 фунтов стерлингов.
Когда PayPal получает это обновление, PayPal отображает ошибку для покупателя. Во вкладке сети есть больше информации, и можно найти следующую ошибку: CANNOT_MIX_CURRENCIES
. Однако и цены на товары, и общие цены конвертируются в желаемую валюту, поэтому нет смешивания валют. Ниже приведен запрос и соответствующий ответ, в котором возникает ошибка.
Запрос: PATCH - ›www.sandbox.paypal.com/smart/api / order / 890595684S747592L / patch
{
"data":{
"patch":[
{
"op":"replace",
"path":"/purchase_units/@reference_id=='xxx'",
"value":{
"reference_id":"xxx",
"invoice_id":"xxx",
"custom_id":1,
"description":"xxx",
"amount":{
"currency_code":"GBP",
"value":"305.00",
"breakdown":{
"item_total":{
"currency_code":"GBP",
"value":"305.00"
},
"shipping":{
"currency_code":"GBP",
"value":"0.00"
},
"tax_total":{
"currency_code":"GBP",
"value":"0.00"
},
"discount":{
"currency_code":"GBP",
"value":"0.00"
}
}
},
"items":[
{
"name":"xxx",
"sku":"xxx",
"currency":"GBP",
"quantity":1,
"category":"PHYSICAL_GOODS",
"unit_amount":{
"currency_code":"GBP",
"value":"305.00"
}
}
]
}
}
]
}
}
Ответ:
{
"ack":"contingency",
"contingency":"UNPROCESSABLE_ENTITY",
"data": {
"name":"UNPROCESSABLE_ENTITY",
"details":[{
"location":"body",
"issue":"CANNOT_MIX_CURRENCIES",
"description":"CANNOT_MIX_CURRENCIES"
}],
"message":"The requested action could not be performed, semantically incorrect, or failed business validation.",
"debug_id":"xxx",
"links":[{
"href":"https://developer.paypal.com/docs/api/orders/v2/#error-CANNOT_MIX_CURRENCIES",
"rel":"information_link",
"method":"GET"
}]
},
"meta":{"calc":"xxx","rlog":"xxx"},
"server":"xxx"
}
Ниже приведен запрос (и ответ) на создание единицы покупки выше.
Запрос: POST - ›POST -› www.sandbox.paypal.com/v2/checkout/ заказы
{
"intent":"CAPTURE",
"purchase_units":[
{
"reference_id":"xxx",
"invoice_id":"xxx",
"custom_id":1,
"description":"xxx",
"amount":{
"currency_code":"USD",
"value":"345.00",
"breakdown":{
"item_total":{
"currency_code":"USD",
"value":"345.00"
},
"shipping":{
"currency_code":"USD",
"value":"0.00"
},
"tax_total":{
"currency_code":"USD",
"value":"0.00"
},
"discount":{
"currency_code":"USD",
"value":"0.00"
}
}
},
"items":[
{
"name":"xxx",
"sku":"xxx",
"currency":"USD",
"quantity":1,
"category":"PHYSICAL_GOODS",
"unit_amount":{
"currency_code":"USD",
"value":"345.00"
}
}
]
}
],
"application_context":{
"shipping_preference":"GET_FROM_FILE"
}
}
Ответ:
{
"id":"xxx",
"status":"CREATED",
"links":[
{
"href":"https://api.sandbox.paypal.com/v2/checkout/orders/xxx",
"rel":"self",
"method":"GET"
},
{
"href":"https://www.sandbox.paypal.com/checkoutnow?token=xxx",
"rel":"approve",
"method":"GET"
},
{
"href":"https://api.sandbox.paypal.com/v2/checkout/orders/xxx",
"rel":"update",
"method":"PATCH"
},
{
"href":"https://api.sandbox.paypal.com/v2/checkout/orders/xxx/capture",
"rel":"capture",
"method":"POST"
}
]
}
Я использую PayPal Orders API v2 через response-paypal-button-v2 пакет npm.
В документации для CANNOT_MIX_CURRENCIES упоминается, что все валюты в покупной единице должны быть одинаковыми, но не упоминается, что изменение валюты покупной единицы невозможно. Что-то сбивает с толку то, что я смог найти упоминание об этой ошибке (CANNOT_MIX_CURRENCIES) только в Billing Agreement API v1.
CANNOT_MIX_CURRENCIES
Код валюты недействителен. Все коды валют очень совпадают. Используйте один и тот же код валюты для всех объектов суммы.