Как осуществлять извещения IPN Меркадо Паго, для частичных платежей?

Я использую checkout основной давая клиентам выбор заплатить с двумя карточками.

Я использую SDK PHP v 0.5.2 и считаю конфигурировавшим слушать topic payments извещений IPN.

/collections/notifications / [идентификация]? access_token = [ACCESS_TOKEN]

Я получил извещение, консультировал состояние оплаты и он был принят, тогда я вручил продукт, но я не считаю осуществленной логику проверения, - полная общая сумма ли продажи общая сумма оплаты. Я нуждаюсь в том, чтобы знать, есть ли какой-то признак в оплате, которую он показывает, что это - частичная оплата для checkear прямо эта переменная, или: Каковым был бы правильный способ осуществлять эту функциональность?

3
задан 17.01.2017, 15:54
0 ответов

Если tenés осуществленный выбор заплатить с двумя средствами платежей, я рекомендую тебе слушать извещения merchant_order, которые это объект, который содержит всю информацию о продаже, и у тебя будут проблемы с разделенными платежами.

Здесь у тебя есть документация, но главным образом это код, который ты был бы должен осуществлять

    // Get the payment and the corresponding merchant_order reported by the IPN.
if($_GET["topic"] == 'payment'){
    $payment_info = $mp->get("/collections/notifications/" . $_GET["id"]);
    $merchant_order_info = $mp->get("/merchant_orders/" . $payment_info["response"]["collection"]["merchant_order_id"]);
// Get the merchant_order reported by the IPN.
} else if($_GET["topic"] == 'merchant_order'){
    $merchant_order_info = $mp->get("/merchant_orders/" . $_GET["id"]);
}

if ($merchant_order_info["status"] == 200) {
    // If the payment's transaction amount is equal (or bigger) than the merchant_order's amount you can release your items 
    $paid_amount = 0;

    foreach ($merchant_order_info["response"]["payments"] as  $payment) {
        if ($payment['status'] == 'approved'){
            $paid_amount += $payment['transaction_amount'];
        }   
    }

    if($paid_amount >= $merchant_order_info["response"]["total_amount"]){
        if(count($merchant_order_info["response"]["shipments"]) > 0) { // The merchant_order has shipments
            if($merchant_order_info["response"]["shipments"][0]["status"] == "ready_to_ship"){
                print_r("Totally paid. Print the label and release your item.");
            }
        } else { // The merchant_order don't has any shipments
            print_r("Totally paid. Release your item.");
        }
    } else {
        print_r("Not paid yet. Do not release your item.");
    }
2
ответ дан 03.12.2019, 17:39