Paypal NVP API - постоянно получаю сообщение об ошибке 81002 - PullRequest
8 голосов
/ 03 мая 2010

Я новичок в PayPal API, и у меня возникают проблемы с вызовом SetExpressCheckout с использованием CURL в PHP. Насколько я понимаю, все настроено правильно, но я получаю сообщение об ошибке 81002 «Указанный метод не поддерживается».

Фрагмент кода приведен ниже. Я получил файл корневых сертификатов CA от здесь .

<code><?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); ?>
Result: <?php print_r($result); ?>

Когда я запускаю код, вывод будет следующим:

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
)

Кто-нибудь знает, в чем может быть проблема?

С уважением, Андре.

Ответы [ 3 ]

4 голосов
/ 11 июня 2011

Проблема в том, что вы используете urlencode + http_build_query. Вы получите двойное кодирование, а PayPal отклонит некоторую информацию.

3 голосов
/ 20 мая 2012

У меня была эта проблема, и в конце концов обнаружил, что это была проблема с получением параметры передаются вообще. Я использовал следующий вид кода для передачи параметры (как показано в различных примерах в сети для PayPal):

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

Когда я изменил это на:

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

перестал выдавать мне ошибку неизвестного метода (и перешел на другие ошибки: -)

Код Ruby ниже работал для меня (хотя я удалил обратные 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)
2 голосов
/ 21 декабря 2010

Я не использую PHP API, но я столкнулся с той же ошибкой 81002 при использовании Callback API (java), и я получил это, когда некоторые из параметров либо отсутствовали, либо неправильно отформатированы.

Я не знаю, решили ли вы проблему, но мой совет - проверить, какой из параметров требуется для SetExpressCheckout ( Справочник по API ). И затем, если вы их установили, проверьте, удовлетворяет ли часть ограничения описания параметра.

К сожалению, иногда они выдают неуместные ошибки (или ошибки, которые разработчик не совсем понимает). С другой стороны, я обычно отвечаю на большинство моих ответов на их форуме. Если у вас "проблемы", вы также можете написать личное сообщение члену команды PayPal в смену (или человеку, который уже решил вашу проблему).

Надеюсь, это помогло!
Деспот

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...