Hi all,

  Many thanks for all your replies. I'm sorry for my lateness.

  I'm working on the PayPal stuff these days. I encountered another
problem with the function which accepts callback from Paypal then
sents response of shipping methods and shipping prices to Paypal. The
callback URL '/control/payPalCheckoutUpdate' was invoked by Paypal but
the shipping prices displayed on Paypal were not updated.

  This issue was caused by the value of the parameter named "MAXAMT"
sent to Paypal.
  In the funtion addCartDetails in PaypalServices.java, it sums up all
sub totals and other adjustments, but it may not sums up a shipping
price because there may be not a shiping price set in the cart.
  encoder.add("MAXAMT",
cart.getSubTotal().add(otherAdjustments).setScale(2).toPlainString());

  For example, i bought a product values $100. The value of "MAXAMT"
would be "100". Then I was redirected to Paypal and Paypal tried to
sending address information to the website and get a shipping method
called 'EXPRESS' which costs $20. Paypal would not update the shipping
price, because 100 (sub total) + 20 (postage) > 100 (MAXAMT).

  I fixed the issue in a rough way which just add 1000 more to the MAXAMT:
  encoder.add("MAXAMT",
cart.getSubTotal().add(otherAdjustments).add(BigDecimal.valueOf(1000l)).setScale(2).toPlainString());

  And there's another problem with calculating shipping price in
funciton 'getExpressCheckout' at line 615:
      Map<String, Object> result =
ShippingEvents.getShipGroupEstimate(dispatcher, delegator, cart, 0);
  I wrote a shipment service for one shipping method which calculates
the shipping price from the country geo id. That service can get the
contactMechId from the service context but it gets a null value from
the database:
   shippingAddress = delegator.findByPrimaryKey("PostalAddress",
UtilMisc.toMap("contactMechId", shippingContactMechId));

  I modified the code about shipping price getExpressCheckout in
PayPalServices.java and get the shipping price directly from  PayPal :
  BigDecimal shippingTotal = new BigDecimal(decoder.get("SHIPPINGAMT"));

  Cheers

Liang

2010/8/17, BJ Freeman <[email protected]>:
> since the code you removed checks to see if
> cart.getAttribute("payPalCheckoutToken");
> is empty then adds it, I would say the problem is farther up the line.
>
>
> Pranay Pandey sent the following on 8/16/2010 3:40 AM:
>> Hi Liang and Scott,
>>
>> This is the solution to the problem that I also found when I
>> communicated the issue with PayPal developers network. It seems correct.
>>
>> Thanks & Regards
>> --
>> Pranay Pandey
>>
>> On Aug 13, 2010, at 3:17 PM, 张良 wrote:
>>
>>> Hi there,
>>>
>>> I was redirected to Paypal when the first time i click the link
>>> /control/setPayPalCheckout after I added some items into the cart, and I
>>> returned back to the website without finished the payment on Paypal.
>>> Then i
>>> failed to be redirected to Paypal again after I clicked the link
>>> /control/setPayPalCheckout again.
>>>
>>> I don't know much about the Paypal express checkout, but I found a way to
>>> resovle this problem. I'm not sure if it's the correct way. Does
>>> anyone have
>>> ideas about this?
>>>
>>> There are 3 lines in PayPalServices.java from 111 to 113:
>>> if (UtilValidate.isNotEmpty(token)) {
>>> encoder.add("TOKEN", token);
>>> }
>>>
>>> The problem went away after I commented out those 3 lines. Any helps on
>>> this will be appreciated.
>>>
>>> Regards,
>>>
>>> Liang Zhang
>>
>>
>

Reply via email to