2011-09-02 37 views
7

Tôi đang cố gắng xác minh thông tin pdt paypal.CURL Yêu cầu sự cố

Tôi đã tạo biểu mẫu mô phỏng và gửi biểu mẫu. CNTT đã làm việc và trả lại thông tin.

Tôi đã thử cùng một yêu cầu làm curl. Nhưng yêu cầu của tôi đang trở lại trống với tôi.

dạng mockup của tôi:

<form method="post" action="https://sandbox.paypal.com/cgi-bin/webscr"> 
    <input type="hidden" name="cmd" value="_notify-synch"/> 
    <input type="hidden" name="at" value="-----"/> 
    <input type="hidden" name="tx" value="-----"/> 
    <input type="submit" value="Test"/> 
</form> 

REQ CURL My Code:

$arrData = array(
    'tx' => '----', 
    'cmd' => '_notify-synch', 
    'at' => '-----' 
); 
    $ch = curl_init('https://sandbox.paypal.com/cgi-bin/webscr'); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1) ; 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $arrData); 
    $strCurlResult = curl_exec($ch); 
    curl_close($ch); 
    return $strCurlResult; 

EDIT:

ON theo dõi lỗi curl tôi tìm thấy thông báo sau:

SSL: tên chủ đề chứng chỉ 'www.sandbox.paypal.com' không khớp với tên máy chủ mục tiêu 'sandbox.paypal.com'

+0

dupe có thể có: http://stackoverflow.com/questions/1776827/php-curl-paypal-sandbox –

+0

KoolKabin; vui lòng cập nhật câu hỏi này nếu chúng tôi đã đóng góp cho giải pháp của bạn. – Robert

Trả lời

8

Thay đổi: $ ch = curl_init ('https://sandbox.paypal.com/ cgi-bin/webscr ');
Đến: $ ch = curl_init ('https://www.sandbox.paypal.com/cgi-bin/webscr');

Lý do: chứng chỉ cho www.sandbox.paypal.com không hợp lệ đối với sandbox.paypal.com.
Thực hiện thay đổi tương tự trong 'hành động' của biểu mẫu, bằng cách này.

+0

Đây là thiên tài! – almaruf

0

Gửi nó như là chuỗi:

$arrData = array(
    'tx' => '----', 
    'cmd' => '_notify-synch', 
    'at' => '-----' 
); 

$fields_string = ""; 

foreach($arrData as $key=>$value) 
    $fields_string .= $key.'='.$value.'&'; 

rtrim($fields_string,'&'); 

$ch = curl_init('https://sandbox.paypal.com/cgi-bin/webscr'); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1) ; 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); 
$strCurlResult = curl_exec($ch); 
curl_close($ch); 
return $strCurlResult; 
+0

không may mắn ......... – KoolKabin

6

Bạn cần phải cho curl không để xác minh chứng chỉ SSL. Điều này có thể được thực hiện bằng cách thiết lập một tùy chọn cURL:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 

biết thêm thông tin ở đây:

http://php.net/manual/en/function.curl-setopt.php

+1

Nó không phải lúc nào cũng đủ. Trong một số env, bạn phải vô hiệu hóa CURLOPT_SSL_VERIFYHOST. –

2

curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, 0);

mặc dù các công trình trên không được khuyến nghị.

như robert nói

Thay đổi:

$ ch = curl_init ('https://sandbox.paypal.com/cgi-bin/webscr');

Để:

$ ch = curl_init ('https: //www.sandbox.paypal.com/cgi-bin/webscr ');

21

Thực tế, bạn chỉ có thể tắt xác minh HOST ngang hàng. Trong một số PHP/phiên bản cURL, chỉ cần vô hiệu hóa PEER là không đủ:

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 

Từ các tài liệu:

CURLOPT_SSL_VERIFYHOST: 1 để kiểm tra sự tồn tại của một tên phổ biến ở giấy chứng nhận đẳng SSL. 2 để kiểm tra sự tồn tại của một tên phổ biến và cũng xác minh rằng nó khớp với tên máy chủ được cung cấp. Trong môi trường sản xuất giá trị của tùy chọn này nên được giữ ở mức 2 (giá trị mặc định là ).

Các vấn đề liên quan