cURL

2013-03-11 9 views
14

के माध्यम से पेपैल एपीआई से कनेक्ट नहीं हो सकता है, मैं "क्लासिक" एनवीपी एपीआई के माध्यम से पेपैल एक्सप्रेस भुगतान सेट अप करने का प्रयास कर रहा हूं।cURL

curl का उपयोग कर मेरे सर्वर से पेपैल-सैंडबॉक्स में कनेक्ट करने का प्रयास कर रहा है, कनेक्शन स्टालों और लगभग 2 मिनट के बाद समय समाप्त हो गया है।

मैं डॉक्स से example call उपयोग कर रहा हूँ:

curl -v --insecure https://api-3t.sandbox.paypal.com/nvp -d "USER=platfo_1255077030_biz_api1.gmail.com&PWD=1255077037&SIGNATURE=Abg0gYcQyxQvnf2HDJkKtA-p6pqhA1k-KTYE0Gcy1diujFio4io5Vqjf&METHOD=SetExpressCheckout&VERSION=78&PAYMENTREQUEST_0_PAYMENTACTION=SALE&PAYMENTREQUEST_0_AMT=19&PAYMENTREQUEST_0_CURRENCYCODE=USD&cancelUrl=http://www.yourdomain.com/cancel.html&returnUrl=http://www.yourdomain.com/success.html" 

शैल आउटपुट है:

* About to connect() to api-3t.sandbox.paypal.com port 443 (#0) 
* Trying 173.0.82.83... Connection timed out 
* couldn't connect to host 
* Closing connection #0 
curl: (7) couldn't connect to host 

जब मैं पीएचपी curl के माध्यम से ऐसा करने की कोशिश मैं किसी भी त्रुटि नहीं मिलता है और बस एक खाली संसाधन हैंडल।

मैं आसानी से अनुरोध कर सकते हैं (और सही डेटा वापस पाने के) अपने स्थानीय मशीन से और अन्य सर्वर है कि मैं का उपयोग कर सकते से तो मुझे लगता है कि यह कुछ सर्वर साइड गलत कॉन्फ़िगरेशन चल रहा है। एक सर्वर व्यक्ति नहीं होने के नाते मैं थोड़ा उलझन में हूं।

cURL सक्षम है और लॉग phpinfo में निम्नलिखित:

libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.15 libssh2/1.2.6 

openssl रूप में अच्छी तरह से सक्षम है। साथ ही, एपीआई के लाइव संस्करण से कनेक्ट करने का प्रयास करते समय भी मुझे वही समस्याएं आ रही हैं।

+2

हो सकता है कि इन अनुरोधों को अवरुद्ध करने वाले आपके सर्वर पर कुछ फ़ायरवॉल नियम हैं, क्या आप कर्ल अन्य वेबसाइटों तक पहुंचने में सक्षम हैं इस सर्वर से? अन्य एचटीटीपीएस वेबसाइटों के बारे में क्या? – talkol

+0

धन्यवाद, आश्चर्यजनक रूप से मैं आसानी से 'https' कनेक्शन सहित अन्य डोमेन के लिए कर्ल का उपयोग कर सकता हूं। – m90

+1

यहां टिप्पणियों को देखें http://stackoverflow.com/questions/12936733/timeout-on-connecting-to-https वे सभी आउटबाउंड फ़ायरवॉल प्रतिबंध से संबंधित हैं .. और कोई भी पेपैल का उल्लेख करता है :) – talkol

उत्तर

0

ए) सबसे पहले wget https://api-3t.sandbox.paypal.com/nvp करने की कोशिश और यदि आप "गलत अनुरोध" उत्तर के साथ एक सरल कनेक्शन प्राप्त कर सकते हैं देखते हैं, और नहीं तो आप Paypal सर्वर द्वारा अवरुद्ध किया गया है या अपने फ़ायरवॉल पोर्ट 443 पर आप ब्लॉक कर रहा है paypal

तक पहुँचने के लिए

बी) कस्टम हेडर को जोड़ने का प्रयास: -H "Host: api-3t.sandbox.paypal.com"

curl -v --insecure https://api-3t.sandbox.paypal.com/nvp -d "USER=platfo_1255077030_biz_api1.gmail.com&PWD=1255077037&SIGNATURE=Abg0gYcQyxQvnf2HDJkKtA-p6pqhA1k-KTYE0Gcy1diujFio4io5Vqjf&METHOD=SetExpressCheckout&VERSION=78&PAYMENTREQUEST_0_PAYMENTACTION=SALE&PAYMENTREQUEST_0_AMT=19&PAYMENTREQUEST_0_CURRENCYCODE=USD&cancelUrl=http://www.yourdomain.com/cancel.html&returnUrl=http://www.yourdomain.com/success.html" -H "Host: api-3t.sandbox.paypal.com"

सी) कर्ल का कौन सा संस्करण और क्या मंच पर प्रयोग कर रहे हैं? मेरे पास है:

curl 7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2 
0

$ch = curl_init(); 
# Merchant Account Credentials 
$ppUserID = "User Id Email"; //Take it from sandbox dashboard for test mode or take it from paypal.com account in production mode, help: https://developer.paypal.com/docs/classic/api/apiCredentials/ 
$ppPass = "User Pass"; //Take it from sandbox dashboard for test mode or take it from paypal.com account in production mode, help: https://developer.paypal.com/docs/classic/api/apiCredentials/ 
$ppSign = "Paypal Sign"; //Take it from sandbox dashboard for test mode or take it from paypal.com account in production mode, help: https://developer.paypal.com/docs/classic/api/apiCredentials/ 

$ppAppID = "APP-80W284485P519543T"; //if it is sandbox then app id is always: APP-80W284485P519543T 

$paypal_header_options = array(); 
    $paypal_header_options[] = "X-PAYPAL-SECURITY-USERID: $ppUserID"; 
    $paypal_header_options[] = "X-PAYPAL-SECURITY-PASSWORD: $ppPass"; 
    $paypal_header_options[] = "X-PAYPAL-SECURITY-SIGNATURE: $ppSign"; 
    $paypal_header_options[] = "X-PAYPAL-REQUEST-DATA-FORMAT: NV"; 
    $paypal_header_options[] = "X-PAYPAL-RESPONSE-DATA-FORMAT: NV"; 
    $paypal_header_options[] = "X-PAYPAL-APPLICATION-ID: $ppAppID"; 

$URL = 'https://api-3t.sandbox.paypal.com/nvp' 
    .'?USER='.$ppUserID 
    .'&PWD='.$ppPass 
.'&SIGNATURE='.$ppSign 
    .'&METHOD=SetExpressCheckout' 
    .'&VERSION=93' 
    .'&RETURNURL=https://localhost/express-checkout-single-product/success.php?success=true' 
    .'&CANCELURL=https://localhost/express-checkout-single-product/index.php' 
.'&PAYMENTREQUEST_0_CURRENCYCODE=USD' 
.'&PAYMENTREQUEST_0_AMT=250.00' #The payment amount for the first receiver # Merchant(Primary AC) Account Amount 
.'&PAYMENTREQUEST_0_ITEMAMT=225.00'       # Merchant(Primary AC) Account Email 
.'&PAYMENTREQUEST_0_TAXAMT=25.00' #Receiver designation (there can be only 1 primary receiver) 
.'&PAYMENTREQUEST_0_PAYMENTACTION=Order' 
.'&PAYMENTREQUEST_0_SELLERPAYPALACCOUNTID=email' 
.'&PAYMENTREQUEST_0_PAYMENTREQUESTID=CART110-PAYMENT0' #The payment amount for the second receiver # Seller(Secondry AC) Account Amount 
.'&PAYMENTREQUEST_1_CURRENCYCODE=USD' 
.'&PAYMENTREQUEST_1_AMT=75.00' #The payment amount for the first receiver # Merchant(Primary AC) Account Amount 
.'&PAYMENTREQUEST_1_ITEMAMT=65.00'       # Merchant(Primary AC) Account Email 
.'&PAYMENTREQUEST_1_TAXAMT=10.00' #Receiver designation (there can be only 1 primary receiver) 
.'&PAYMENTREQUEST_1_PAYMENTACTION=Order' 
.'&PAYMENTREQUEST_1_SELLERPAYPALACCOUNTID=email' 
.'&PAYMENTREQUEST_1_PAYMENTREQUESTID=CART110-PAYMENT1' 
    .'&L_PAYMENTREQUEST_0_NAME0=Departs2' 
    .'&L_PAYMENTREQUEST_0_NAME0=Sunset' 
.'&L_PAYMENTREQUEST_0_QTY0=1' 
    .'&L_PAYMENTREQUEST_0_AMT0=125' 
    .'&L_PAYMENTREQUEST_0_TAXAMT0=15' 
    .'&L_PAYMENTREQUEST_0_NAME1=Departs' 
.'&L_PAYMENTREQUEST_0_QTY1=1' 
    .'&L_PAYMENTREQUEST_0_AMT1=100.00' 
    .'&L_PAYMENTREQUEST_0_TAXAMT1=10.00'; 
    curl_setopt($ch, CURLOPT_URL, $URL); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    // curl_setopt($ch, CURLOPT_HTTPHEADER, $paypal_header_options); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

    $paypal_response = curl_exec($ch); 

$responseAr = explode('&', $paypal_response); 
$parsedResponseAr = array(); 
foreach($responseAr as $i => $value) { 
    $tmpAr = explode('=', $value); 
    if(!empty($tmpAr)) 
     $parsedResponseAr[strtoupper($tmpAr[0])] = urldecode($tmpAr[1]); 
} 
print_r(json_encode($parsedResponseAr)); 
curl_close($ch); 
0

अधिकांश शायद पेपैल एक्सप्रेस भुगतान सेवा रोक/गलत प्रमाणीकरण या नहीं वैध SSL प्रमाणपत्र जारी की वजह से अपने कनेक्शन को काट की कोशिश करो। इस मामले में, इस मुद्दे के बारे में सेवा प्रदाता से पूछने का प्रयास करें।

उम्मीद है कि, अपनी समस्या का समाधान करें।

0

आपका त्रुटि एनएसएस पैकेज के अपने सर्वर के संस्करण और api-3t.sandbox.paypal.com एक SNI प्रमाणपत्र का उपयोग कर के कारण है। आप पार्टी से अधिक

openssl s_client -servername api-3t.sandbox.paypal.com -tlsextdebug -connect api-3t.sandbox.paypal.com:443 2>/dev/null | grep "server name"

को क्रियान्वित करते हुए यह सत्यापित कर सकते हैं। उत्पादन TLS server extension "server name" (id=0), len=0 जो इंगित करता है कि इस सर्वर SNI प्रमाणपत्र के साथ है।

समाधान वास्तव में सरल है।

RedHat लिए वेरिएंट:

sudo yum -y update nss* 

डेबियन के लिए वेरिएंट:

sudo apt-get update nss* 

आप वास्तव में अपने कोड को बदलने की जरूरत नहीं है (कनेक्शन के लिए बुद्धिमान समस्याओं)