2015-10-24 123 views
2

我使用PayPal IPN創建支付網關。提交付款後,我檢索PayPal的回覆。這是我收到(PHP的var_dump):PayPal IPN在沙盒中返回無效

array(45) { 
    ["mc_gross"]     => string(4) "1.00" 
    ["protection_eligibility"]  => string(10) "Ineligible" 
    ["address_status"]    => string(9) "confirmed" 
    ["item_number1"]    => string(1) "1" 
    ["payer_id"]     => string(13) "KUN39T5E6UA3W" 
    ["tax"]       => string(4) "0.00" 
    ["address_street"]    => string(14) "1 Main Terrace" 
    ["payment_date"]    => string(25) "14:01:20 Oct 24, 2015 PDT" 
    ["payment_status"]    => string(7) "Pending" 
    ["charset"]      => string(12) "Windows-1252" 
    ["mc_tax1"]      => string(4) "0.00" 
    ["address_zip"]     => string(7) "W12 4LQ" 
    ["mc_shipping"]     => string(4) "0.00" 
    ["mc_handling"]     => string(4) "0.00" 
    ["first_name"]     => string(4) "test" 
    ["address_country_code"]  => string(2) "GB" 
    ["address_name"]    => string(10) "test buyer" 
    ["notify_version"]    => string(3) "3.8" 
    ["custom"]      => string(13) "562bf19083b11" 
    ["payer_status"]    => string(8) "verified" 
    ["address_country"]    => string(14) "United Kingdom" 
    ["num_cart_items"]    => string(1) "1" 
    ["mc_handling1"]    => string(4) "0.00" 
    ["address_city"]    => string(13) "Wolverhampton" 
    ["payer_email"]     => string(44) "[myemail]" 
    ["verify_sign"]     => string(56) "AiPC9BjkCyDFQXbSkoZcgqH3hpacAymQrx4nOnSeR2hKuwHDAUFmNy.-" 
    ["mc_shipping1"]    => string(4) "0.00" 
    ["tax1"]      => string(4) "0.00" 
    ["txn_id"]      => string(17) "9UV91932BX9643323" 
    ["payment_type"]    => string(7) "instant" 
    ["last_name"]     => string(5) "buyer" 
    ["item_name1"]     => string(5) "test1" 
    ["address_state"]    => string(13) "West Midlands" 
    ["receiver_email"]    => string(38) "[myemail]" 
    ["quantity1"]     => string(1) "1" 
    ["pending_reason"]    => string(10) "unilateral" 
    ["txn_type"]     => string(4) "cart" 
    ["mc_gross_1"]     => string(4) "1.00" 
    ["mc_currency"]     => string(3) "GBP" 
    ["residence_country"]   => string(2) "GB" 
    ["test_ipn"]     => string(1) "1" 
    ["transaction_subject"]   => string(13) "562bf19083b11" 
    ["payment_gross"]    => string(0) "" 
    ["merchant_return_link"]  => string(10) "click here" 
    ["auth"]      => string(87) "AkxCT8gKLRplBETrTgj4KrgsPA.1rCwR.lM1EpzTQoW9QR-M0l3-kiwjq0hgNoZUQuJaGRdDHsGnjZ9NsbsRamg" 
} 

我然後執行以下命令:

$responseURL = "https://sandbox.paypal.com/cgi-bin/webscr?"; 
$params = "cmd=_notify-validate&" .http_build_query($_REQUEST); 

var_dump(file_get_contents($responseURL.$params)); 

將返回:無效

有什麼建議?測試可能不適用於Sandbox?

+0

我可能是錯的,但我認爲你應該發回一個'POST'請求​​。 – Axalix

回答

1

您需要發佈數據;在這裏工作,我用代碼:

$req = 'cmd=_notify-validate'; 

foreach($_POST as $key => $value) { 
    $value = urlencode($value); 
    $req .= "&{$key}={$value}"; 
} 

$res = ''; 
$ch = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr'); 
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $req); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close')); 
$res = curl_exec($ch); 
curl_close($ch); 

if(strcmp($res, "VERIFIED") == 0) 
{ 
    //VALID 
} 
0
$params = ['http' => [ 
    'method' => 'POST', 
    'header' => 'Content-type: application/x-www-form-urlencoded', 
    'content' => http_build_query(array_merge(['cmd' => '_notify-validate'], $_REQUEST)) 
]]; 

$result = file_get_contents('https://sandbox.paypal.com/cgi-bin/webscr', false, stream_context_create($params));