Necesidad de datos de captura y la tienda de recepción por medio de IPN mediante el uso de la API de Paypal Pago en serie

StackOverflow https://stackoverflow.com/questions/2615632

  •  26-09-2019
  •  | 
  •  

Pregunta

Esta es una pregunta sobre Paypal Pago en serie IPN. Mi plataforma es PHP y MySQL .

En todo el sitio web de soporte de Paypal, he encontrado IPN sólo los pagos realizados. Necesito una IPN en líneas similares de Pago en serie, pero no pudo encontrarlo. También trató de experimentar con código de Pago en serie NVP ya existente, pero que no funcionó bien.

Lo que estoy tratando de hacer es que para todos los destinatarios a los que el pago ha sido enviado con éxito a través de Pago en serie, quiero dejar constancia de su correo electrónico, la cantidad y id_exclusivo en mi propia tabla de base de datos. Si es posible, quiero capturar el estado de pago, así, si ha sido un éxito al fracaso y en base a la misma, tengo que hacer algo de procesamiento en casa.

El código de pago código existente de masas es el siguiente:

<?php

$environment = 'sandbox';   // or 'beta-sandbox' or 'live'

/**
 * Send HTTP POST Request
 *
 * @param   string  The API method name
 * @param   string  The POST Message fields in &name=value pair format
 * @return  array   Parsed HTTP Response body
 */
function PPHttpPost($methodName_, $nvpStr_) {
    global $environment;

    // Set up your API credentials, PayPal end point, and API version.
    $API_UserName = urlencode('my_api_username');
    $API_Password = urlencode('my_api_password');
    $API_Signature = urlencode('my_api_signature');

    $API_Endpoint = "https://api-3t.paypal.com/nvp";
    if("sandbox" === $environment || "beta-sandbox" === $environment) {
        $API_Endpoint = "https://api-3t.$environment.paypal.com/nvp";
    }
    $version = urlencode('51.0');

    // Set the curl parameters.
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $API_Endpoint);
    curl_setopt($ch, CURLOPT_VERBOSE, 1);

    // Turn off the server and peer verification (TrustManager Concept).
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);

    // Set the API operation, version, and API signature in the request.
    $nvpreq = "METHOD=$methodName_&VERSION=$version&PWD=$API_Password&USER=$API_UserName&SIGNATURE=$API_Signature$nvpStr_";

    // Set the request as a POST FIELD for curl.
    curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);

    // Get response from the server.
    $httpResponse = curl_exec($ch);

    if(!$httpResponse) {
        exit("$methodName_ failed: ".curl_error($ch).'('.curl_errno($ch).')');
    }

    // Extract the response details.
    $httpResponseAr = explode("&", $httpResponse);

    $httpParsedResponseAr = array();
    foreach ($httpResponseAr as $i => $value) {
        $tmpAr = explode("=", $value);
        if(sizeof($tmpAr) > 1) {
            $httpParsedResponseAr[$tmpAr[0]] = $tmpAr[1];
        }
    }

    if((0 == sizeof($httpParsedResponseAr)) || !array_key_exists('ACK', $httpParsedResponseAr)) {
        exit("Invalid HTTP Response for POST request($nvpreq) to $API_Endpoint.");
    }

    return $httpParsedResponseAr;
}

// Set request-specific fields.
$emailSubject =urlencode('example_email_subject');
$receiverType = urlencode('EmailAddress');
$currency = urlencode('USD');                           // or other currency ('GBP', 'EUR', 'JPY', 'CAD', 'AUD')

// Add request-specific fields to the request string.
$nvpStr="&EMAILSUBJECT=$emailSubject&RECEIVERTYPE=$receiverType&CURRENCYCODE=$currency";

$receiversArray = array();

for($i = 0; $i < 3; $i++) {
    $receiverData = array(  'receiverEmail' => "user$i@paypal.com",
                            'amount' => "example_amount",
                            'uniqueID' => "example_unique_id",
                            'note' => "example_note");
    $receiversArray[$i] = $receiverData;
}

foreach($receiversArray as $i => $receiverData) {
    $receiverEmail = urlencode($receiverData['receiverEmail']);
    $amount = urlencode($receiverData['amount']);
    $uniqueID = urlencode($receiverData['uniqueID']);
    $note = urlencode($receiverData['note']);
    $nvpStr .= "&L_EMAIL$i=$receiverEmail&L_Amt$i=$amount&L_UNIQUEID$i=$uniqueID&L_NOTE$i=$note";
}

// Execute the API operation; see the PPHttpPost function above.
$httpParsedResponseAr = PPHttpPost('MassPay', $nvpStr);

if("SUCCESS" == strtoupper($httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($httpParsedResponseAr["ACK"])) {
    exit('MassPay Completed Successfully: '.print_r($httpParsedResponseAr, true));


} else  {
    exit('MassPay failed: ' . print_r($httpParsedResponseAr, true));
}

?>

En el código anterior, cómo y dónde puedo añadir código para capturar los campos que antes solicitada? Cualquier código que indica la solución es muy apreciada.

Muchas gracias.

¿Fue útil?

Solución

Estoy más familiarizado con pagos periódicos, pero creo que la respuesta IPN devolverá los valores que está buscando. Sólo capturarlos fuera de la matriz enviado de vuelta, colocarlos en algunas variables, y guardar en la base de datos.

$email   = $httpParsedResponseAr["receiver_email"];  
$amount  = $httpParsedResponseAr["mc_currency_x"];

Estos son los valores de las variables Pago en serie
https://cms.paypal.com/us / cgi-bin /? cmd = _render-contenido y content_id = desarrollador / e_howto_html_IPNandPDTVariables

Otros consejos

En general, existen dos formas de obtener estos datos, uno es mirar las respuestas de la llamada que realice a masspay directamente, y la otra es la creación de IPN para su cuenta.

Hay que configurar el IPN global, no puedo encontrar una manera de enviar en el IPN escucha URL como una variable en esta llamada.

HTH -FT

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top