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
-
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.
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