Vous avez besoin de capturer et les détails de ce récepteur magasin via IPN en utilisant Paypal API de masse salariale

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

  •  26-09-2019
  •  | 
  •  

Question

Ceci est une question sur Paypal Mass Pay IPN. Ma plate-forme est PHP & mySQL .

Partout dans le site Web de support Paypal, j'ai trouvé IPN pour les paiements effectués seulement. Je besoin d'un IPN sur des lignes similaires pour Mass Pay mais n'a pas pu le trouver. En outre essayé d'expérimenter avec le code déjà existant de masse salariale NVP, mais cela ne fonctionne pas non plus.

Ce que je suis en train de faire est que pour tous les destinataires auxquels le paiement a été envoyé avec succès par Mass Pay, je veux enregistrer leur e-mail, le montant et id_unique dans ma propre table de base de données. Si possible, je veux saisir l'état de paiement et, si elle a été un succès de l'échec et basé sur la même chose, je dois faire un peu dans le traitement de la maison.

Le code existant de masse de paie est ci-dessous:

<?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));
}

?>

Dans le code ci-dessus, comment et où dois-je ajouter un code pour capturer les champs que je demandés ci-dessus? Tout code indiquant la solution est très appréciée.

Merci beaucoup.

Était-ce utile?

La solution

Je suis plus familier avec les paiements récurrents, mais je pense que la réponse IPN renverra les valeurs que vous recherchez. Il suffit de les capturer sur le tableau renvoyé, placez-les dans certaines variables et enregistrer dans la base de données.

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

Voici les valeurs des variables de masse Pay
https://cms.paypal.com/us / cgi-bin /? cmd = _render-content & content_id = développeur / e_howto_html_IPNandPDTVariables

Autres conseils

Il y a généralement deux façons d'obtenir ces données, on est d'examiner les réponses de l'appel que vous apportez à MassPay directement, et l'autre est la mise en place IPN pour votre compte.

Vous devez configurer l'IPN globale, je ne peux pas trouver un moyen d'envoyer l'IPN écouter url comme une variable sur cet appel.

HTH -FT

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top