2010-11-16 10 views
6

Mam przechowywanych klientów adres e-mail paypal w bazie danych i chcę wysłać im pieniądze za pomocą tego adresu e-mail. Używam PHP.Jak wysłać pieniądze do PayPal przy użyciu php

Ktoś proszę zasugerować, jak to zrobić.

+13

wydaje się dziwne, że wysyłasz pieniądze do klientów zamiast zbierać pieniądze. chcę być na twojej liście. – stillstanding

+0

Zacznijmy od listy wszystkiego, co wypróbowałeś? Czy byłeś google co najmniej? Lepiej jest, jeśli możesz dać konkretny problem tam, gdzie utknąłeś. Dzięki – pinaki

+0

@pinaki: Google nie jest odpowiedzią ani pomocnym w SO (większość wyszukiwań i tak wraca do pytania). Ale zgadzam się z tobą, że pytanie jest zbyt szerokie i powinien wrócić z konkretnym problemem. – Bobby

Odpowiedz

11

Szukałem tego samego problemu, oto, co działa dla mnie. Testowany w trybie piaskownicy i przy użyciu NVP (zamiast SOAP). Twój serwer musi obsługiwać Curl, w celu sprawdzenia go używać:

<?php 
echo 'curl extension/module loaded/installed: '; 
echo (!extension_loaded('curl')) ? 'no' : 'yes'; 
echo "<br />\n"; 
phpinfo(INFO_MODULES); // just to be sure 
?> 

Jeśli nie jest załadowany lub zainstalowane poprosić o swojej hostmaster lub get it here, inaczej śmiało:

<?php 
// code modified from source: https://cms.paypal.com/cms_content/US/en_US/files/developer/nvp_MassPay_php.txt 
// documentation: https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/howto_api_masspay 
// sample code: https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/library_code 

// eMail subject to receivers 
$vEmailSubject = 'PayPal payment'; 

/** MassPay NVP example. 
* 
* Pay one or more recipients. 
*/ 

// For testing environment: use 'sandbox' option. Otherwise, use 'live'. 
// Go to www.x.com (PayPal Integration center) for more information. 
$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. 
// How to obtain API credentials: 
// https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_NVPAPIBasics#id084E30I30RO 
$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($vEmailSubject); 
$receiverType = urlencode('EmailAddress'); 
$currency = urlencode('USD'); // or other currency ('GBP', 'EUR', 'JPY', 'CAD', 'AUD') 

// Receivers 
// Use '0' for a single receiver. In order to add new ones: (0, 1, 2, 3...) 
// Here you can modify to obtain array data from database. 
$receivers = array(
    0 => array(
    'receiverEmail' => "[email protected]", 
    'amount' => "20.00", 
    'uniqueID' => "id_001", // 13 chars max 
    'note' => " payment of commissions"), // I recommend use of space at beginning of string. 
    1 => array(
    'receiverEmail' => "[email protected]", 
    'amount' => "162.38", 
    'uniqueID' => "A47-92w", // 13 chars max, available in 'My Account/Overview/Transaction details' when the transaction is made 
    'note' => " payoff of what I owed you" // space again at beginning. 
) 
); 
$receiversLenght = count($receivers); 

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

$receiversArray = array(); 

for($i = 0; $i < $receiversLenght; $i++) 
{ 
$receiversArray[$i] = $receivers[$i]; 
} 

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

?> 

Powodzenia!

+1

Dlaczego, na Ziemi, użyć jakiegoś kiepskiego przykładu nieznanego pochodzenia z anonimowej tablicy ogłoszeń, zamiast ** z oficjalnej dokumentacji ** ?! –

+6

Może zapomniałem wspomnieć, że zrobiłem to z kodu przykładowego PayPal, lub może to być pierwsza skomentowana linia zawierająca słowa: "kod zmodyfikowany ze źródła". Nie chciałem dawać Deepakowi ani innym linku do oficjalnej dokumentacji, dałem mu przydatny kod. Przy okazji zmodyfikowałem oficjalny kod przykładowy, ponieważ pierwotny proces płatności został wykonany trzy razy, co oznacza: chcesz wysłać 10 dolców, a ten wyda 30, bez ostrzeżeń. – quantme

+4

quantme 1 Col. Shrapnel 0 –

1

Czego szukasz DoMassPay z próbek oficjalny kod PayPal, nie jest łatwo się domyślić, że nazwa: P

Powiązane problemy