2012-04-16 3 views
1

Когда я пытаюсь установитьExpressCheckout, я получаю ack = success, но не возвращает токен.Paypal SetExpressCheckout Soap

версия PAYPAL АФИ 87,0 Вот ссылка WSDL: https://www.sandbox.paypal.com/wsdl/PayPalSvc.wsdl

здесь командовать я использовать в axis2-1.6.1 для генерации кода Java

-uri https://www.sandbox.paypal.com/wsdl/PayPalSvc.wsd -p com.paypal.soap 

здесь ссылка на Java код, который генерируется с помощью Axis2 https://docs.google.com/open?id=0B97cB4uxjmztbGgxRER6VjBWcWc

здесь код SetExpressCheckout

PaymentDetailsType paymentDetails = new PaymentDetailsType(); 
    BasicAmountType orderTotal = new BasicAmountType(); 
    orderTotal.setCurrencyID(CurrencyCodeType.USD); 
    orderTotal.setString("10.00"); 
    paymentDetails.setOrderTotal(orderTotal); 
    paymentDetails.setPaymentAction(PaymentActionCodeType.Sale); 

    SetExpressCheckoutRequestDetailsType requestDetailsType = new SetExpressCheckoutRequestDetailsType(); 
    requestDetailsType.setCancelURL(buyer.getCancelUrl()); 
    requestDetailsType.setReturnURL(buyer.getReturnUrl()); 
    requestDetailsType.setPaymentDetails(new PaymentDetailsType[]{paymentDetails}); 

    SetExpressCheckoutRequestType requestType = new SetExpressCheckoutRequestType(); 
    requestType.setVersion("87.0"); 
    requestType.setSetExpressCheckoutRequestDetails(requestDetailsType); 

    SetExpressCheckoutReq req = new SetExpressCheckoutReq(); 
    req.setSetExpressCheckoutRequest(requestType); 

    RequesterCredentials requesterCredentials = new RequesterCredentials(); 
    CustomSecurityHeaderType customSecurityHeaderType = new CustomSecurityHeaderType(); 

    UserIdPasswordType userIdPasswordType = new UserIdPasswordType(); 
    userIdPasswordType.setUsername("<username>"); 
    userIdPasswordType.setPassword("<pass>"); 
    userIdPasswordType.setSignature("<signature>"); 
    customSecurityHeaderType.setCredentials(userIdPasswordType); 
    requesterCredentials.setRequesterCredentials(customSecurityHeaderType); 

    String endPoint = null; 
    endPoint = "https://api-3t.sandbox.paypal.com/2.0/"; //sandbox API Signature 
    PayPalAPIInterfaceServiceStub stub = new PayPalAPIInterfaceServiceStub(endPoint); 
    stub._getServiceClient().getOptions().setProperty(HTTPConstants.CHUNKED, false); 
    SetExpressCheckoutResponse setExpressCheckout = stub.setExpressCheckout(req, requesterCredentials); 

    SetExpressCheckoutResponseType checkoutResponse = setExpressCheckout.getSetExpressCheckoutResponse(); 
    Calendar timestamp = checkoutResponse.getTimestamp(); 
    String strdate = null; 
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss"); 
    if (timestamp != null) { 
     strdate = sdf.format(timestamp.getTime()); 
    } 
    System.out.println("Date:" + strdate); 
    System.out.println("CorrelationID:" + checkoutResponse.getCorrelationID()); 
    System.out.println("ack :" + checkoutResponse.getAck()); 
    if (checkoutResponse.getErrors() != null && checkoutResponse.getErrors().length > 0) { 
     PayPalAPIInterfaceServiceStub.ErrorType[] errors = checkoutResponse.getErrors(); 
     for (int i = 0; i < errors.length; i++) { 
      System.out.println(errors[i].getErrorCode()); 
      System.out.println(errors[i].getLongMessage()); 

     } 
    } 
    System.out.println("token:" + checkoutResponse.getToken()); 

здесь результат, который я получаю

Date:17/04/2012 12:33:38 
CorrelationID:a7c9fe7283bd 
ack :Success 
token:null 

как я получить Ack успех, но маркер нулевой? Контактное лицо для paypal сообщило, что для CorrelationID уже создан код ЕС: a7c9fe7283bd.

благодарит заранее.

ответ

1

Мне нужно использовать setExpressCheckoutResponse.getExtraElement(). GetText(), чтобы получить токен. почему setExpressCheckoutResponse.getToken() возвращает null?

0

Если посмотреть в упомянутый файл WSDL, в начале вы увидите следующее:

<wsdl:definitions 
    ns:version="89.0" 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns="http://schemas.xmlsoap.org/wsdl/" 
    ... > 

Это означает, что версия API, который должен быть использован, 89.0 - не помню, где это указано в Документация API PayPal, но об этом упоминалось точно.

Сообщите мне, если вы все еще сталкиваетесь с этой проблемой, так как мне удалось настроить PayPal Express Checkout с использованием SOAP в Java недавно и может помочь с этим.

0

Я просто наткнулся на этот вопрос и нашел ответ (это на C#, и я не уверен, если это относится к Java):

https://www.x.com/developers/paypal/forums/soap/paypal-api-aa-and-net-wcf-undeserialized-fields

Посмотрите на сгенерированный код для веб-службы (Reference.cs) и найдите AbstractResponseType. Последним свойством является Any(). Измените атрибут, чтобы соответствовать этому (игнорировать свойство):

[System.Xml.Serialization.XmlIgnoreAttribute()] 
    public System.Xml.XmlElement Any { 
     get { 
      return this.anyField; 
     } 
     set { 
      this.anyField = value; 
     } 
    } 

После этого, перекомпилировать и тест снова и теперь вы должны получить свойство токена правильно.

Если вы обновите код веб-службы, это изменение, конечно, будет заменено, и вам придется повторно его выполнять, если PayPal не исправляет это. BTW, мой номер версии WSDL - 98.0.

Gary Davis

Смежные вопросы