2012-03-14 87 views
12

我目前正在发布一个正常的交易到贝宝快递,并达到网关没有错误。贝宝快递 - 添加折扣

我想现在配置我的购物车向网关发送折扣。我的第一个想法是修改发送到网关的'AMT'值。然而,似乎贝宝通过计算总ITEMAMTTAXAMTSHIPPINGAMT领域,以确保总不变验证了“AMT”字段:

[L_AMT0] => 49.99 
[L_NUMBER0] => 3706{3}8 
[L_QTY0] => 1 
[L_TAXAMT0] => 0.00 
[ITEMAMT] => 49.99 
[TAXAMT] => 0 
[SHIPPINGAMT] => 14.95 
[AMT] => 64.94 

我多少送折扣贝宝?我已经浏览了我可以找到的文档,但没有运气;在SO上的类似问题也没有帮助。谢谢。

编辑:我注意到我可以通过SHIPDISCAMT这个字段。我不知道这是否会让我做我需要的东西 - 但我仍然收到错误,表明这些东西是'不匹配'。

+0

您是否可以预先计算您的贝宝变量的折扣和因素? – Josh 2012-03-14 21:01:36

+0

@Josh我该怎么做? PayPal将通过查看单个L_ *元素来重新计算“总计”如果它的计算与我将要修改的'AMT'字段不匹配,那么它将返回一个网关错误。 我确实想过修改每个单独的'L_AMT *'来取消每个折扣值的一部分,但这似乎是一个可怕的解决方案。 你能提供更深入的答复吗? (感谢帖子。) – Pete171 2012-03-14 21:11:25

+0

@Josh回答了我自己的问题。尽管如此,感谢您的帮助! – Pete171 2012-03-14 21:40:42

回答

22

明白了。

事实证明,您可以将负数金额作为订单项传递给自己,并将其标记为折扣。我不得不添加上面的代码:

$params['L_NAME1'] = 'Discount Coupon'; 
$params['L_AMT1'] = -$discountCodeAmount; 
$params['L_QTY1'] = 1; 
$params['ITEMAMT'] -= $discountCodeAmount; 
$params['AMT'] -= $discountCodeAmount; 

这有以下影响:

enter image description here

我发现我在这个PDF答案:

https://cms.paypal.com/cms_content/CA/en_US/files/developer/PP_ExpressCheckout_IntegrationGuide.pdf

出于某种原因该信息并未在我读过的其他几个官方PayPal快递文章/文件中提供。

+0

我找不到它,虽然它被记录为其他贝宝解决方案。很棒的发现。 – Josh 2012-03-14 21:42:24

0

我已使用负价格行项目技术来实现折扣,但遇到了问题 - 如果折扣值等于产品价格,例如,订单项如:

[L_NAME0] => Product #1 
[L_COST0] => 18.99 
[L_QTY0] => 1 
[L_NAME1] => Discount 
[L_COST1] => -18.99 
[L_QTY1] => 1 
[ITEMAMT] => 0.00 
[FREIGHTAMT] => 15.00 
[HANDLINGAMT] => 0.00 

然后它会产生PayPal错误“字段格式错误:10431-项目数量无效。”。

但是,删除折扣商品并发送代替它的“折扣”字段解决了此问题并给出了新的:-) PayPal始终将此字段显示为“送货折扣”,而它实际上是商品折扣。 至少,它的工作原理...

0

请参考此URL宝 HTML Variable List

<input type="hidden" name="discount_amount_cart" id="discount_amount_cart" value="3.00"> 

你可以把车宽折扣(discount_amount_cart),使用此参数产品广泛折扣(DISCOUNT_AMOUNT)。您可以在提供链接中找到更多信息。确保传递正整数值。 PayPal不接受负值。