camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Joe San <codeintheo...@gmail.com>
Subject Re: Camel - PayPal Component
Date Tue, 26 Feb 2013 05:58:38 GMT
So you mean to say that in my Producer, I can get all the properties that I
need to use to connect to the service from the Message body. I'm just
wondering how. Just for me to be clear, here is a scenario wherein the
paypal call is made based on the result of a http call

from(httpCallWithPayPalParametersSetByTheUser).to(paypal://adaptivepayments?operation=pay)

So if I understand this correctly, the result of the from(...) operation
will have the parameters set in the Message's body and I can get that form
there are create the PayPal type objects and call the PayPal API?

Regrds,
Jothi


On Mon, Feb 25, 2013 at 10:59 PM, Christian Müller <
christian.mueller@gmail.com> wrote:

> A few comments:
> The AdaptivePaymentsService should be created once (in the doStart()
> method).
> You can look up the parameter from the in message header. You can also use
> a map as body and look up the properties from there. You can also let the
> user configure its own binding...
>
> Best,
> Christian
>
> Sent from a mobile device
> Am 24.02.2013 02:16 schrieb "Joe San" <codeintheopen@gmail.com>:
>
> > Camel Riders,
> >
> > Out of interest and with advice from Christian Müller, I took up the task
> > of writing this component. I created the stubs and I'm trying now to get
> > the Producer written.
> >
> > On a high level, PayPay adaptive payments API has different operations
> > (Pay, PaymentDetails and many more....).
> >
> >
> >
> https://www.x.com/developers/paypal/documentation-tools/adaptive-payments/integration-guide/APIntro
> >
> > So the goal is to provide integration to all those API operations. I
> > downloaded the API from x.com and the API comes with a sample web
> > application that has an example to all those API operations. There is a
> > PayRequest type object which must be sent as a parameter to all the
> service
> > calls to the API. So I'm currently stuck with how to stuff the values
> into
> > the PayRequest type object.
> >
> > Here is a snippet from my implementation so far.... This is actually a
> > snippet from my Producer
> >
> >     @Override
> >     public void doRequest(final Exchange exchange) throws Exception {
> >         final PayRequest req = populatePayRequest(exchange);
> >
> >         try {
> >             final PayRequest request = this.populatePayRequest(exchange);
> >             PayResponse resp = this.sendPayRequest(request);
> >
> >         }
> >         catch (Exception ex) {
> >
> >         }
> >     }
> >
> >     /**
> >      *
> >      * @param req
> >      * @return
> >      */
> >     private PayResponse sendPayRequest(final PayRequest req) throws
> > PayPalException {
> >         PayResponse resp = null;
> >
> >         try {
> >             // TODO... Get the properties from a Properties file
> >             AdaptivePaymentsService service = new
> > AdaptivePaymentsService(this
> >
> > .getClass().getResourceAsStream("/sdk_config.properties"));
> >             PayResponse resp = service.pay(req);
> >
> >         } catch (IOException ex) {
> >
> >         } catch (MissingCredentialException e) {
> >             e.printStackTrace();  //To change body of catch statement use
> > File | Settings | File Templates.
> >         } catch (InterruptedException e) {
> >             e.printStackTrace();  //To change body of catch statement use
> > File | Settings | File Templates.
> >         } catch (ClientActionRequiredException e) {
> >             e.printStackTrace();  //To change body of catch statement use
> > File | Settings | File Templates.
> >         } catch (SSLConfigurationException e) {
> >             e.printStackTrace();  //To change body of catch statement use
> > File | Settings | File Templates.
> >         } catch (OAuthException e) {
> >             e.printStackTrace();  //To change body of catch statement use
> > File | Settings | File Templates.
> >         } catch (HttpErrorException e) {
> >             e.printStackTrace();  //To change body of catch statement use
> > File | Settings | File Templates.
> >         } catch (InvalidCredentialException e) {
> >             e.printStackTrace();  //To change body of catch statement use
> > File | Settings | File Templates.
> >         } catch (InvalidResponseDataException e) {
> >             e.printStackTrace();  //To change body of catch statement use
> > File | Settings | File Templates.
> >         } finally {
> >             // Do some cleanup if necessary...
> >         }
> >
> >         return resp;
> >     }
> >
> >     /**
> >      * Populate the pay request
> >      * @param exchange
> >      * @return
> >      */
> >     private PayRequest populatePayRequest(Exchange exchange) {
> >
> >         //final PayRequest req = (PayRequest) exchange.getIn().getBody();
> >
> >         Map < String, Object > headers = exchange.getIn().getHeaders();
> >
> >         final PayRequest req = new PayRequest();
> >
> >         final String currencyCode =
> > headers.get(PayPalConstants.PAYPAL_CURRENCY_CODE) != null
> >                 ? (String)
> > headers.get(PayPalConstants.PAYPAL_CURRENCY_CODE)
> >                 : config.getCurrencyCode();
> >         req.setCurrencyCode(currencyCode);
> >
> >
> >
> >         final RequestEnvelope envelop =
> > headers.get(PayPalConstants.PAYPAL_REQUEST_ENVELOP) != null
> >                 ? new
> >
> >
> RequestEnvelope((String)headers.get(PayPalConstants.PAYPAL_REQUEST_ENVELOP))
> >                 : new
> RequestEnvelope(config.getRequestEnvelopErrorLang());
> >
> >         final List < Receiver > receiver = populateReceiver(headers);
> >         final ClientDetailsType clientDetails =
> > populateClientDetails(headers);
> >
> >
> >         return req;
> >     }
> >
> > Given below is a snippet from the sample web application that came with
> the
> > API that I downloaded. All I want to know is of an elegant way to create
> > the PayRequest object for the API call. What I want to avoid is to
> provide
> > the user with a whole bunch of parameters that he has to set in the
> header
> > to make the PayPal API call.
> >
> >     protected void doPost(HttpServletRequest request,
> >                           HttpServletResponse response) throws
> > ServletException, IOException {
> >         // TODO Auto-generated method stub
> >         HttpSession session = request.getSession();
> >         session.setAttribute("url", request.getRequestURI());
> >         session.setAttribute(
> >                 "relatedUrl",
> >                 "<ul><li><a href='Pay'>Pay</a></li><li><a
> > href='PaymentDetails'>PaymentDetails</a></li><li><a
> > href='Refund'>Refund</a></li><li><a
> > href='GetPaymentOptions'>GetPaymentOptions</a></li><li><a
> > href='ExecutePayment'>ExecutePayment</a></li><li><a
> > href='SetPaymentOptions'>SetPaymentOptions</a></li></ul>");
> >         RequestEnvelope requestEnvelope = new RequestEnvelope("en_US");
> >
> >         com.paypal.svcs.types.ap.PayRequest req = new
> > com.paypal.svcs.types.ap.PayRequest();
> >
> >         List<com.paypal.svcs.types.ap.Receiver> receiver = new
> > ArrayList<com.paypal.svcs.types.ap.Receiver>();
> >
> >         com.paypal.svcs.types.ap.Receiver rec = new
> > com.paypal.svcs.types.ap.Receiver();
> >         if (request.getParameter("amount") != "")
> >
> > rec.setAmount(Double.parseDouble(request.getParameter("amount")));
> >         if (request.getParameter("mail") != "")
> >             rec.setEmail(request.getParameter("mail"));
> >         if (request.getParameter("invoiceID") != "")
> >             rec.setInvoiceId(request.getParameter("invoiceID"));
> >         if (request.getParameter("paymentSubType") != "")
> >
> rec.setPaymentSubType(request.getParameter("paymentSubType"));
> >         if (request.getParameter("paymentType") != "")
> >             rec.setPaymentType(request.getParameter("paymentType"));
> >         if (request.getParameter("phoneNumber") != "") {
> >             PhoneNumberType phone = new PhoneNumberType(
> >                     request.getParameter("countryCode"),
> >                     request.getParameter("phoneNumber"));
> >             phone.setExtension(request.getParameter("extension"));
> >             rec.setPhone(phone);
> >         }
> >         if (request.getParameter("setPrimary") != "")
> >             rec.setPrimary(Boolean.parseBoolean(request
> >                     .getParameter("setPrimary")));
> >         receiver.add(rec);
> >         ReceiverList receiverlst = new ReceiverList(receiver);
> >         req.setReceiverList(receiverlst);
> >         req.setRequestEnvelope(requestEnvelope);
> >         ClientDetailsType clientDetails = new ClientDetailsType();
> >         if (request.getParameter("applicationID") != "")
> >             clientDetails.setApplicationId(request
> >                     .getParameter("applicationID"));
> >         if (request.getParameter("customerID") != "")
> >
> > clientDetails.setCustomerId(request.getParameter("customerID"));
> >         if (request.getParameter("customerType") != "")
> >
> > clientDetails.setCustomerType(request.getParameter("customerType"));
> >         if (request.getParameter("deviceID") != "")
> >             clientDetails.setDeviceId(request.getParameter("deviceID"));
> >         if (request.getParameter("location") != "")
> >
> clientDetails.setGeoLocation(request.getParameter("location"));
> >         if (request.getParameter("ipAddress") != "")
> >
> clientDetails.setIpAddress(request.getParameter("ipAddress"));
> >         if (request.getParameter("model") != "")
> >             clientDetails.setModel(request.getParameter("model"));
> >         if (request.getParameter("partnerName") != "")
> >
> > clientDetails.setPartnerName(request.getParameter("partnerName"));
> >         req.setClientDetails(clientDetails);
> >         if (request.getParameter("ipnNotificationURL") != "")
> >             req.setIpnNotificationUrl(request
> >                     .getParameter("ipnNotificationURL"));
> >         if (request.getParameter("memo") != "")
> >             req.setMemo(request.getParameter("memo"));
> >         if (request.getParameter("pin") != "")
> >             req.setPin(request.getParameter("pin"));
> >         if (request.getParameter("senderEmail") != "")
> >             req.setSenderEmail(request.getParameter("senderEmail"));
> >         if (request.getParameter("feesPayer") != "")
> >             req.setFeesPayer(request.getParameter("feesPayer"));
> >         FundingConstraint fundingConstraint = new FundingConstraint();
> >         List<FundingTypeInfo> fundingTypeInfoList = new
> > ArrayList<FundingTypeInfo>();
> >         if (request.getParameter("fundingType") != "") {
> >             FundingTypeInfo fundingTypeInfo = new FundingTypeInfo(
> >                     request.getParameter("fundingType"));
> >             fundingTypeInfoList.add(fundingTypeInfo);
> >         }
> >         FundingTypeList fundingTypeList = new FundingTypeList(
> >                 fundingTypeInfoList);
> >         fundingConstraint.setAllowedFundingType(fundingTypeList);
> >         req.setFundingConstraint(fundingConstraint);
> >         if (request.getParameter("preapprovalKey") != "")
> >
> req.setPreapprovalKey(request.getParameter("preapprovalKey"));
> >         if (request.getParameter("reverseAllPaymentsOnError") != "")
> >             req.setReverseAllParallelPaymentsOnError(Boolean
> >                     .parseBoolean(request
> >                             .getParameter("reverseAllPaymentsOnError")));
> >
> >         SenderIdentifier senderIdentifier = new SenderIdentifier();
> >         if (request.getParameter("senderIdentifierEmail") != "")
> >             senderIdentifier.setEmail(request
> >                     .getParameter("senderIdentifierEmail"));
> >         if (request.getParameter("senderCountryCode") != ""
> >                 && request.getParameter("senderPhoneNumber") != "") {
> >             PhoneNumberType senderPhone = new PhoneNumberType(
> >                     request.getParameter("senderCountryCode"),
> >                     request.getParameter("senderPhoneNumber"));
> >             if (request.getParameter("senderExtension") != "")
> >                 senderPhone.setExtension(request
> >                         .getParameter("senderExtension"));
> >             senderIdentifier.setPhone(senderPhone);
> >         }
> >         if (request.getParameter("useCredentials") != "")
> >
> senderIdentifier.setUseCredentials(Boolean.parseBoolean(request
> >                     .getParameter("useCredentials")));
> >         req.setSender(senderIdentifier);
> >
> >         if (request.getParameter("trackingID") != "")
> >             req.setTrackingId(request.getParameter("trackingID"));
> >         if (request.getParameter("actionType") != "")
> >             req.setActionType(request.getParameter("actionType"));
> >         if (request.getParameter("cancelURL") != "")
> >             req.setCancelUrl(request.getParameter("cancelURL"));
> >         if (request.getParameter("currencyCode") != "")
> >             req.setCurrencyCode(request.getParameter("currencyCode"));
> >         if (request.getParameter("returnURL") != "")
> >             req.setReturnUrl(request.getParameter("returnURL"));
> >         AdaptivePaymentsService service = new
> AdaptivePaymentsService(this
> >
> .getClass().getResourceAsStream("/sdk_config.properties"));
> >         try {
> >             com.paypal.svcs.types.ap.PayResponse resp = service.pay(req);
> >             response.setContentType("text/html");
> >             if (resp != null) {
> >                 session.setAttribute("RESPONSE_OBJECT", resp);
> >                 session.setAttribute("lastReq",
> service.getLastRequest());
> >                 session.setAttribute("lastResp",
> > service.getLastResponse());
> >                 if (resp.getResponseEnvelope().getAck().toString()
> >                         .equalsIgnoreCase("SUCCESS")) {
> >                     Map<Object, Object> map = new LinkedHashMap<Object,
> > Object>();
> >                     map.put("Ack", resp.getResponseEnvelope().getAck());
> >                     map.put("Correlation ID", resp.getResponseEnvelope()
> >                             .getCorrelationId());
> >                     map.put("Time Stamp", resp.getResponseEnvelope()
> >                             .getTimestamp());
> >                     map.put("Pay Key", resp.getPayKey());
> >                     map.put("Payment Execution Status",
> >                             resp.getPaymentExecStatus());
> >                     if (resp.getDefaultFundingPlan() != null)
> >                         map.put("Default Funding Plan", resp
> >
> > .getDefaultFundingPlan().getFundingPlanId());
> >                     map.put("Redirect URL",
> >                             "<a href=
> > https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_ap-payment&paykey="
> >                                     + resp.getPayKey()
> >                                     + ">
> > https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_ap-payment&paykey="
> >                                     + resp.getPayKey() + "</a>");
> >                     session.setAttribute("map", map);
> >                     response.sendRedirect("Response.jsp");
> >                 } else {
> >                     session.setAttribute("Error", resp.getError());
> >                     response.sendRedirect("Error.jsp");
> >                 }
> >             }
> >         } catch (SSLConfigurationException e) {
> >             // TODO Auto-generated catch block
> >             e.printStackTrace();
> >         } catch (InvalidCredentialException e) {
> >             // TODO Auto-generated catch block
> >             e.printStackTrace();
> >         } catch (HttpErrorException e) {
> >             // TODO Auto-generated catch block
> >             e.printStackTrace();
> >         } catch (InvalidResponseDataException e) {
> >             // TODO Auto-generated catch block
> >             e.printStackTrace();
> >         } catch (ClientActionRequiredException e) {
> >             // TODO Auto-generated catch block
> >             e.printStackTrace();
> >         } catch (MissingCredentialException e) {
> >             // TODO Auto-generated catch block
> >             e.printStackTrace();
> >         } catch (OAuthException e) {
> >             // TODO Auto-generated catch block
> >             e.printStackTrace();
> >         } catch (InterruptedException e) {
> >             // TODO Auto-generated catch block
> >             e.printStackTrace();
> >         }
> >
> >     }
> >
> > Thanks for going through such a long post.
> >
> > Regards,
> > Jothi
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message