PayPal BuyNow - 使用GET代替POST并附带returnUrl参数

3

今天我遇到了一个问题。我有以下的PayPal按钮配置:

<form action="https://www.paypal.com/cgi-bin/webscr" method="post" i d="paypalFormId">
    <input type="hidden" name="cmd" value="_xclick">
    <input type="hidden" name="business" value="mybusinessID">
    <input type="hidden" name="lc" value="DE">
    <input type="hidden" name="button_subtype" value="services">
    <input type="hidden" name="no_note" value="1">
    <input type="hidden" name="no_shipping" value="2">
    <input type="hidden" name="item_name" value="MyProductName">
    <input type="hidden" name="amount" value="1.00">
    <input type="hidden" name="custom" value="somecustom infos needed in the redirection">
    <input type="hidden" name="rm" value="2">
    <input type="hidden" name="return" value="https://myreturnurl.com">
    <input type="hidden" name="cancel_return" value="https://mycancelurl.com">
    <input type="hidden" name="currency_code" value="EUR">
    <input type="hidden" name="notify_url" value="myIPNUrl">
    <input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynowCC_LG.gif:NonHosted">
    <div class="row">
       <button type="submit" class="btn btn-submit-next pull-right">Bestellung abschließen</button>
    </div>

最近几天我没有更改任何可能影响这段代码的内容,但是重定向POST参数丢失了,现在重定向变成了GET方法,即使使用rm=2!

你有什么想法,发生了什么?

此致敬礼,

安托万

编辑:

我已经在JSFiddle上确定了问题:如果我删除item_name输入,则它可以工作。我不知道为什么,但也许这可以帮助您告诉我我做错了什么!


这可能是由于同样的全局问题引起的:https://stackoverflow.com/questions/45686395/dont-get-any-from-paypal-simulator-ipn-post-data-in-zend-framework-2 - Koala Yeung
嗨Koala,就我这边来说,这不是IPN问题,而是“返回”页面的问题。 - Antoine Verger
我有完全相同的问题。有人解决了吗?目前我正在使用下面提到的步骤来使用PDT,但很烦人的是PayPal没有关于这个突然变化的通知,无论它是否是错误,都没有任何通知。 - SolaceBeforeDawn
嗨@AntoineVerger,我遇到了相同的问题(https://stackoverflow.com/q/46277329/3286487)。有进展吗?我删除了item_name输入,但结果相同(GET)。 - y.luis.rojo
没有找到好的解决方案。Paypal 的官方反馈是切换从 IPN 到 PDT 方法... - Antoine Verger
显示剩余2条评论
1个回答

2
我们遇到了相同的问题。 您需要启用“PDT”,然后在返回URL post的“cm”变量中返回自定义字段。
要使用“PDT”,还需要启用“自动返回”。但是,如果您需要它是动态的,则仍然可以在按钮表单post中设置返回URL,而不是在“自动返回”配置中设置。
请参阅此沙箱支付按钮,并查看当其记录在我们的返回URL上时响应的外观。 https://developer.paypal.com/docs/classic/products/payment-data-transfer/

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick"><input type="hidden" name="amount" value="0.67">
<input type="hidden" name="cancel_return" value="http://test.smsportal.co.za/onlinePaymentv2/Testing3rdPartyResponse.aspx"> 
<input type="hidden" name="custom" value="this is the custom variable. it is named 'cm' in the returned Url."> 
<input type="hidden" name="return" value="http://test.smsportal.co.za/onlinePaymentv2/Testing3rdPartyResponse.aspx"> 
<input type="hidden" name="rm" value="2"> 
<input type="hidden" name="cbt" value="Return to Merchant"> <input type="hidden" name="business" value="paypalmerchant@smsportal.com">
<input type="hidden" name="item_name" value="Credit Purchase">
<input type="hidden" name="currency_code" value="EUR">
<input type="hidden" name="button_subtype" value="services"><input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynowCC_LG.gif:NonHostedGuest">
<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="Pay now"><img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1"></form>


谢谢你,Cornelius。我会试一下! - Antoine Verger
我试过了,Cornelius。激活了PDT,停用了IPN,但仍然没有POST而是GET。我也联系了Paypal支持团队,但他们目前还无能为力... - Antoine Verger
Paypal的支持不是很好。 我忽略了方法类型,只查找请求中的变量。 - Cornelius Meerholz
我在答案中添加了一个按钮,这样您就可以看到返回URL应该传递的变量。 - Cornelius Meerholz
现在返回的URL中充满了变量,例如success.php?amt=300.00&cc=USD&etc.... 有没有一种方法可以隐藏这些参数? - SolaceBeforeDawn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接