论坛风格切换
  • 8017阅读
  • 6回复

解决paypal快速支付(PayPal Express Checkout)切换货币后提交的问题 [复制链接]

上一主题 下一主题
 

发帖
6653
大洋
50269
贡献值
940
只看楼主 倒序阅读 使用道具 楼主  发表于: 2012-04-30
— 本帖被 smileaway 执行取消置顶操作(2012-05-02) —

关于paypal快速支付(PayPal Express Checkout)切换货币后提交后paypal没有收到任何信息的问题困扰了很久,发现这个问题是在zencart1.3.9h版本的,之前的版本没有注意到,因为现在主要做这个版本的开发。 
可能很多人都会碰到跟我一样的问题,使用PayPal Express Checkout 的支付方式的时候,当我们提交订单的时候,只要不是当前系统的默认货币类型,提交后paypal都没有收到任何商品信息。一开始以为是用户地理位置的问题,也以为是系统的问题,排查了很久还是没有发现这个问题,所以就当成是一个bug了。也没有那么多时间去解决这个问题。直到今天实在不甘心这个问题,定下心来慢慢排查,终于发现了问题的根源在哪里了。 
其实是1.3.9版对PayPal Express Checkout 模块的处理函数做了一个处理,我看了一下1.3.8版的代码,发现还真是1.3.9添加进去的。添加这些代码就是只对系统默认的货币可以提交信息,选择其他的货币类型的话,提交的内容将设置为空。所以这就是我们看到的提交后没有任何信息的根源。具体代码如下: 
打开文件includes\modules\payment\paypalwpp.php,这个文件就是PayPal Express Checkout模块的处理。 
找到function getLineItemDetails($restrictedCurrency) 函数(大约1059行处),1.3.8版本是没有这个参数的。下面就是这个函数添加的特殊处理 
 
// if not default currency, do not send subtotals or line-item details//如果非默认的货币类型的话,不提交订单 
    if (DEFAULT_CURRENCY != $order->info['currency'] || $restrictedCurrency != DEFAULT_CURRENCY) { 
      $this->zcLog('getLineItemDetails 1', 'Not using default currency. Thus, no line-item details can be submitted.'); 
      return array(); 
    } 
    if ($currencies->currencies[$_SESSION['currency']]['value'] != 1 || $currencies->currencies[$order->info['currency']]['value'] != 1) { 
      $this->zcLog('getLineItemDetails 2', 'currency val not equal to 1.0000 - cannot proceed without coping with currency conversions. Aborting line-item details.'); 
      return array(); 
    } 
关于zencart1.3.9为什么添加这个处理,我也没有认真去追究这个问题。现在我们要解决这个问题的话,只要把这段代码注释掉就可以了。困扰很久的问题终于解决了。发来分享一下,希望对大家有帮助。 
 
如果不懂修改的话,可以直接下载该文件,把它替换includes\modules\payment\paypalwpp.php 这个文件就可以了。文件下载地址: paypalwpp.zip (35 K) 下载次数:72  
 
这样修改后,我们会发现虽然可以提交多种货币的订单,但是订单的价钱只换了货币符号,而没有按我们设置的汇率来提交这个价钱。这也是一个问题。这个问题引用官方比较合理的回答就是 
It removes product details when the customer selects an alternate (not your default) currency because Zen Cart has no way of knowing what exchange rate PayPal uses to convert currencies. For example, if your exchange rate is configured to 1.41 and PayPal's exchange rate is 1.39, then any exchange calculations will result in different numbers, thus causing mismatches and validation problems. 
引用地址http://www.zen-cart.com/showthread.php?159461-product-detail-not-display-on-maxican-paypal-payment-page/page2 
因为汇率的问题,我们知道paypal里面使用的汇率跟实际的汇率是有差异的。到这里我们可以解释为什么zencart只对默认的货币进行处理了(其实我也纳闷,为什么不按照后台设置的汇率来转换呢)。现在注释了以上的代码后,虽然可以正常提交订单,但是价钱没有因为货币类型而自动转换,其实就相当于安装默认的货币价钱提交订单,相当于没有对价钱做处理,只是对货币符号处理而已。为了保证不因为货币符号引起的错误,可以在“PayPal Express Checkout”模块下面设置, 
Transaction Currency 
Which currency should the order be sent to PayPal as?  
NOTE: if an unsupported currency is sent to PayPal, it will be auto-converted to USD (or GBP if using UK account) 
Default: Selected Currency 
选择跟系统默认的货币类型。这样就相当于把非默认的货币自动转换为系统默认的货币来提交订单。比如默认的是美元,而提交订单是把美元换成了欧元,那提交的时候进入paypal付款页面的就是美元。这样就保证了订单的金额是一致的。 
这也是现在想到的解决方法了。 
 

zencart外贸网站案例请看http://www.zencar-bbs.com/ 如果QQ在线联系没有反应,请直接加QQ:1023206115 或者 2257583107
关于zen cart的问题请发帖说明,不要发站内信,也不要QQ问,就是问了也没有人回复的。可以发好帖子,发帖子地址给我,叫我回复
!!!我要免费模板!!!

发帖
305
大洋
934
贡献值
109
只看该作者 沙发  发表于: 2012-05-01
Re:解决paypal快速支付(PayPal Express Checkout)切换货币后提交的 ..

好东西  感谢分享


发帖
72
大洋
344
贡献值
7
只看该作者 板凳  发表于: 2012-05-01
Re:解决paypal快速支付(PayPal Express Checkout)切换货币后提交的 ..

好 很不错呢 我这就去看看 我的那个问题 是不是 因为 这个引起的……

发帖
19
大洋
346
贡献值
17
只看该作者 地板  发表于: 2012-05-04
Re:解决paypal快速支付(PayPal Express Checkout)切换货币后提交的 ..

这个得顶~~~~

发帖
104
大洋
313
贡献值
26
只看该作者 4楼 发表于: 2012-10-10
Re:解决paypal快速支付(PayPal Express Checkout)切换货币后提交的 ..

楼主威武


发帖
137
大洋
423
贡献值
41
只看该作者 5楼 发表于: 2012-11-01
Re:解决paypal快速支付(PayPal Express Checkout)切换货币后提交的 ..

这个比较有用. 到时试下.


发帖
1
大洋
7
贡献值
0
只看该作者 6楼 发表于: 2013-09-10
Re:解决paypal快速支付(PayPal Express Checkout)切换货币后提交的 ..

谢谢楼主的分享。 
 
 

快速回复
限80 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容(---删除纯表情和无意义内容,扣1分---)
 
上一个 下一个