تحتاج إلى التقاط وتخزين تفاصيل المتلقي عبر IPN باستخدام واجهة برمجة تطبيقات PayPal Mass Pay

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

  •  26-09-2019
  •  | 
  •  

سؤال

هذا سؤال حول PayPal Mass Pay IPN. منصتي PHP و MYSQL.

في جميع أنحاء موقع PayPal Support ، وجدت IPN للمدفوعات التي تم إجراؤها فقط. أحتاج إلى IPN على خطوط مماثلة للحصول على رواتب جماعية ولكن لم أتمكن من العثور عليها. حاول أيضًا تجربة رمز NVP Mass Pay الحالي بالفعل ، لكن هذا لم ينجح أيضًا.

ما أحاول القيام به هو أنه بالنسبة لجميع المستلمين الذين تم إرسال الدفع إليهم بنجاح عبر Mass Pay ، أريد تسجيل بريدهم الإلكتروني والمبلغ والفريد من نوعه في جدول قاعدة البيانات الخاص بي. إذا كان ذلك ممكنًا ، أريد الحصول على حالة الدفع أيضًا ، سواء كان ذلك نجاحًا في الفشل واستنادًا إلى ذلك ، فأنا بحاجة إلى القيام ببعض المعالجة في المنزل.

رمز الدفع الشامل للمدونة الحالية أدناه:

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

?>

في الكود أعلاه ، كيف وأين أقوم بإضافة رمز لالتقاط الحقول التي طلبتها أعلاه؟ أي رمز يشير إلى أن الحل هو موضع تقدير كبير.

شكراً جزيلاً.

هل كانت مفيدة؟

المحلول

أنا أكثر دراية بالمدفوعات المتكررة ، لكنني أعتقد أن استجابة IPN سترسل القيم التي تبحث عنها. ما عليك سوى الاطلاع عليها من المصفوفة المرسلة ، ووضعها في بعض المتغيرات ، وحفظها في قاعدة البيانات.

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

فيما يلي قيم متغيرات الأجور الشاملة
https://cms.paypal.com/us/cgi-bin/؟cmd=_render-content&content_id=developer/e_howto_html_ipnandpdtvariables

نصائح أخرى

هناك عمومًا طريقتان للحصول على هذه البيانات ، أحدهما هو النظر إلى الردود من المكالمة التي تقوم بها إلى MassPay مباشرة ، والآخر يقوم بإعداد IPN لحسابك.

يجب عليك إعداد IPN العالمي ، لا يمكنني العثور على طريقة لإرسال عنوان URL للاستماع إلى IPN كمتغير في هذه المكالمة.

HTH -FT

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top