0

PHP MercadoPago SDK モジュールを使用しています。これが私のコードです:

$mp = new MP("CLIENT_ID", "CLIENT_SCRET");  

foreach ($_SESSION["carrito"] as $value){
    $itemCode  = $value['tagme']; 
    $itemDesc  = get_pedido($itemCode);        
    $itemQty   = $value['cant'];  // it comes from $_POST['cant']       
    $unitPrice = $value['unit_price'];

    $items[] = array(
        "title" => $itemDesc,       
        "quantity" => $itemQty,
        "currency_id" => "ARS",
        "unit_price" => $unitPrice
    ); 
}

$preference = array(
    "items" => $items,
    "payer" => array(
        'name'  => $name,
        'email' => $email
    ),
    "back_urls" => array(
        'success' => 'http://example.com/success.php',
        'pending' => 'http://example.com/pending.php'
    )
);
echo '<pre>';print_r($items); echo '</pre>';
$mp->sandbox_mode(TRUE);
$preferenceResult = $mp->create_preference($preference);

出力は次の$itemsとおりです。

Array
(
    [0] => Array
        (
            [title] => Test Product
            [quantity] => 1
            [currency_id] => ARS
            [unit_price] => 36
        )

    [1] => Array
        (
            [title] => Shipping Cost
            [quantity] => 1
            [currency_id] => ARS
            [unit_price] => 42
        )

)

しかし、次のエラーが発生しました。

致命的なエラー: /home/..../public_html/mercadopago-sdk/mercadopago.php:227 のメッセージ「数量は数値でなければならない」というメッセージを含む例外「例外」がキャッチされていません:227 スタック トレース: #0 /home/..../ public_html/mercadopago-sdk/mercadopago.php(240): MPRestClient::exec('POST', '/checkout/prefe...', 配列, 'application/jso...') #1 /home/.. ../public_html/mercadopago-sdk/mercadopago.php(126): MPRestClient::post('/checkout/prefe...', Array) #2 /home/..../public_html/confirm.php(140) ): MP->create_preference(Array) #3 {main} が 227 行目の /home/..../public_html/mercadopago-sdk/mercadopago.php でスローされます

何か案が?

4

1 に答える 1

2

数量をINTに型キャストすることで問題を解決しました。

foreach ($_SESSION["carrito"] as $value){
    $itemCode  = $value['tagme']; 
    $itemDesc  = get_pedido($itemCode);        
    $itemQty   = $value['cant'];  // it comes from $_POST['cant']       
    $unitPrice = $value['unit_price'];

    $items[] = array(
        "title" => $itemDesc,       
        "quantity" => intval($itemQty), // this solved the error        
        "currency_id" => "ARS",
        "unit_price" => $unitPrice
    ); 
}

私の数量は、非表示から来てセッションに保存される文字列のようです:

<input type="hidden" name="cant" value="1" />

しかし、MercadoPago API はそのフィールドに整数を期待しています。そのため、 intval()を使用する必要がありました。

于 2013-07-29T09:05:46.283 に答える