我们正在建立一个基于 Spree 并托管在 Heroku 上的在线商店。我们想让结帐尽可能简单,因此我们决定使用 PayPal Express Checkout 和 Instant Update API 来确定运费。
当我们通过 HTTP 测试结帐过程时,一切正常 - 当用户输入他的送货地址时,PayPal 在后台查询我们的服务器并获取运费。
但是,当我们切换到 SSL 时,运费不会更新并恢复为默认的统一费率。我不知道出了什么问题,因为一切都是一样的,除了这次应用程序是通过 HTTPS 访问的,即https://myapp.herokuapp.com
我检查了日志,发现 PayPal 的服务器确实进行了查询,但运费并未在 PayPal 的结帐页面上更新。
有什么想法吗?
更新:
经过进一步测试,PayPal 似乎没有遵守交易设置中设置的超时时间。我们在回调方法中添加了一个简单的“sleep(x)”来人为地诱导一些延迟(x 秒),即使在正常的 HTTP 上,仅仅 1 秒的延迟就足以导致 PayPal 忽略响应。
最大超时应该是 6 秒,但实际上似乎根本不是这种情况。再加上 HTTPS(建立连接需要更长的时间),这可能就是回调失败的原因。
我已经向 PayPal 提交了一张票,但我不确定他们是否会对此做出回应或采取任何措施......