2010-05-03 20 views
8

मैं पेपैल एपीआई के लिए नया हूं, और मुझे PHP में कर्ल का उपयोग करके SetExpressCheckout को कॉल करने में समस्या हो रही है। मेरा सवाल है मैं सही ढंग से सब कुछ की स्थापना की है, जहाँ तक है, लेकिन मैं प्राप्त करने में कोई 81,002 त्रुटि "विधि निर्दिष्ट समर्थित नहीं है" रखा।पेपैल एनवीपी एपीआई - त्रुटि प्राप्त करना जारी रखें 81002

कोड स्निपेट नीचे है। मुझे सीए रूट प्रमाणपत्र फ़ाइल here से मिली है।

Data sent: Array 
(
    [USER] => andree_1272823561_biz_api1.gmail.com 
    [PWD] => 1272823576 
    [SIGNATURE] => Am1t0wiu2tv7VwZ5ebdeY9zv1GF6Ad0PFz-qTGFFf7vbWU6ee4bxy8KL 
    [VERSION] => 52.0 
    [PAYMENTACTION] => Sale 
    [METHOD] => SetExpressCheckout 
    [AMT] => 52.00 
    [RETURNURL] => get_express_checkout_details.php 
    [CANCELURL] => index.php 
) 

Result: Array 
(
    [ACK] => Failure 
    [L_ERRORCODE0] => 81002 
    [L_SHORTMESSAGE0] => Unspecified Method 
    [L_LONGMESSAGE0] => Method Specified is not Supported 
    [L_SEVERITYCODE0] => Error 
) 

किसी को भी जानता है क्या समस्या हो सकती है:

<?php 

$paypal_data = array(
    'USER' => urlencode('andree_1272823561_biz_api1.gmail.com'), 
    'PWD' => urlencode('1272823576'), 
    'SIGNATURE' => urlencode('Am1t0wiu2tv7VwZ5ebdeY9zv1GF6Ad0PFz-qTGFFf7vbWU6ee4bxy8KL'), 
    'VERSION' => urlencode('52.0'), 
    'PAYMENTACTION' => urlencode('Sale'), 
    'METHOD' => urlencode('SetExpressCheckout'), 
    'AMT' => urlencode('52.00'), 
    'RETURNURL' => urlencode('get_express_checkout_details.php'), 
    'CANCELURL' => urlencode('index.php') 
); 

$url = 'https://api-3t.sandbox.paypal.com/nvp?' . http_build_query($paypal_data); 
$curl = curl_init(); 

curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem'); 

$result = curl_exec($curl); 
curl_close($curl); 
parse_str($result, $result); 
?> 

<pre>Data sent: <?php print_r($paypal_data); ?></pre> 
<pre>Result: <?php print_r($result); ?></pre> 

जब मैं कोड चलाने के लिए, उत्पादन पीछा कर रहा है?

सम्मान, एंड्री।

+0

यह मेरे साथ ठीक है, केवल अंतर है। कि मैं प्रमाणपत्र विकल्प का उपयोग नहीं कर रहा हूँ, और यह दो विकल्प curl_setopt जोड़ा ($ कर्ल, CURLOPT_SSL_VERIFYPEER, FALSE) है; \t curl_setopt ($ कर्ल, CURLOPT_SSL_VERIFYHOST, FALSE); – falomir

+0

एचएम .. अजीब। मैंने आपके द्वारा सुझाई गई दो पंक्तियों के साथ CAINFO विकल्प बदल दिया है, और फिर भी मुझे एक ही त्रुटि संदेश मिला है। – Andree

उत्तर

2

मैं PHP एपीआई का उपयोग नहीं कर रहा हूं, लेकिन मैं कॉलबैक एपीआई (जावा) का उपयोग करके उसी 81002 त्रुटि में भाग गया और मुझे यह मिला कि कुछ पैरामीटर या तो गायब या बुरी तरह से बनाये गये थे।

यदि आप समस्या हल हो जाती मैं नहीं जानता, लेकिन मेरी सलाह की जाँच की जाएगी जो मानकों के हैं SetExpressCheckout (API Reference) के लिए requred। और यदि आपने उन्हें सेट किया है, तो जांच करें कि सीमाएं पैरामीटर के विवरण का हिस्सा संतुष्ट है या नहीं।

अफसोस की बात है लेकिन वे कभी-कभी अनुचित त्रुटियों को फेंक देते हैं (या त्रुटियां जो डेवलपर समझ में नहीं आती)। दूसरी ओर मैं आमतौर पर अपने अधिकांश प्रतिक्रियाओं को उनके मंच पर उत्तर देता हूं। यदि "परेशानी" में आप पेपैल टीम के सदस्य को शिफ्ट पर एक निजी संदेश भी लिख सकते हैं (या उस व्यक्ति को जो आपकी समस्या को हल कर चुका है)।

आशा है कि मदद की!
Despot

+1

उग; एपीआई संदर्भ दस्तावेज बहुत अच्छा नहीं है।उदाहरण के लिए, 'SetExpressCheckout' ऑपरेशन के लिए, स्पष्ट रूप से पैरामीटर 'एएमटी' को "बहिष्कृत" किया गया है लेकिन यह किसी भी तरह से "आवश्यक" है! ऐसा लगता है कि यह _really_ आवश्यक नहीं है क्योंकि मैं उस पैरामीटर को शामिल किए बिना उस ऑपरेशन के लिए एक सफल अनुरोध करने में सक्षम था। –

4

समस्या तब होती है जब आप urlencode + http_build_query का उपयोग करते हैं। आप डबल एन्कोडिंग के साथ समाप्त हो जाएंगे और पेपैल कुछ जानकारी अस्वीकार कर देगा।

+2

मुझे अभी अपने ही कोड के साथ यही समस्या थी। मैंने पाया कि मैं अनुरोध को 'डबल-एन्कोडिंग' था और वह ''' 'नाम-मूल्य जोड़ी डिलीमीटर को'% 26' के रूप में परिवर्तित कर रहा था, इसलिए "अनिर्दिष्ट विधि" त्रुटि। [यह बुरा है, और बहुत भ्रमित है कि त्रुटि _also_ में 'लंबा संदेश' शामिल है "विधि निर्दिष्ट नहीं है" क्योंकि यह सीधे 'शॉर्ट संदेश' के विपरीत है! मुझे लगा कि मुझे बताया जा रहा था कि 'SetExpressCheckout' विधि समर्थित नहीं थी!] –

+0

मुझे एक ही समस्या थी क्योंकि मैं'; 'का उपयोग कर रहा हूं विभाजक के रूप में। पेपैल केवल 'और' का समर्थन करता है। – StrangeElement

3

मुझे यह समस्या थी और अंत में पता चला कि यह पैरामीटर को प्रेषित करने में समस्या थी। मैं कोड की निम्न प्रकार उपयोग कर रहा था मानकों (के रूप में पेपैल के लिए नेट पर विभिन्न उदाहरणों में दिखाया गया है) पारित करने के लिए:

http.set_form_data({"q" => "ruby", "lang" => "en"}, ';') 

जब मैं करने के लिए इस बदल दिया है:

http.form_data = {"q" => "ruby", "lang" => "en"} 

यह मुझे देना बंद कर दिया अज्ञात विधि त्रुटि (और अन्य त्रुटियों पर स्थानांतरित :-)

नीचे रूबी कोड मेरे लिए काम करता है (हालांकि मैंने वापसी URL हटा दिए हैं)। उपयोगकर्ता नाम आदि मानक सैंडबॉक्स वाले हैं।

# http://www.ensta-paristech.fr/~diam/ruby/online/ruby-doc-stdlib/libdoc/net/http/rdoc/classes/Net/HTTP.html 
# https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_ECGettingStarted 

require 'net/https' 
require 'uri' 

uri = URI('https://api-3t.sandbox.paypal.com/nvp') 

request_object = Net::HTTP::Post.new(uri.path) 

request_object.form_data = { 
'USER'=>'sdk-three_api1.sdk.com', # Sandbox value. See e_howto_api_ECGettingStarted 
'PWD'=>'QFZCWN5HZM8VBG7Q', # Sandbox value. See e_howto_api_ECGettingStarted 
'SIGNATURE'=>'A-IzJhZZjhg29XQ2qnhapuwxIDzyAZQ92FRP5dqBzVesOkzbdUONzmOU', # Sandbox value. See e_howto_api_ECGettingStarted 
'METHOD'=>'SetExpressCheckout', 
'VERSION'=>'88.0', 
'PAYMENTREQUEST_0_PAYMENTACTION'=>'Sale', 
'PAYMENTREQUEST_0_AMT'=>'23.00', # Must have exactly two decimals for cents. See e_howto_api_ECGettingStarted above. 
'PAYMENTREQUEST_0_CURRENCYCODE'=>'USD', 
'cancelUrl'=>'http://www.add your own URL here', 
'returnUrl'=>'http://www.add your own URL here' 
} 

http = Net::HTTP.new(uri.host,uri.port) 
# HACK: The following two lines turn off secure certificate checking!! 
http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
response = http.request(request_object) 
संबंधित मुद्दे