为什么Paypal沙盒无法处理付款?

6

我正在制作一款电子商务网站,Paypal集成似乎正常工作。我有一个购物车,汇总其中所有商品的总价,加上运费,然后使用以下行将该数字发送到Paypal。

string address = "https://api-3t.sandbox.paypal.com/nvp?USER=<username>&PWD=<password>&VERSION=71.0&SIGNATURE=<signature>&METHOD=SetExpressCheckout&PAYMENTREQUEST_0_AMT=" + lblTotal.Text + "&PAYMENTREQUEST_0_CURRENCYCODE=USD&RETURNURL=http://www.secretskeletonminiatures.com/checkout.aspx&CANCELURL=http://www.secretskeletonminiatures.com/cart.aspx&PAYMENTREQUEST_0_PAYMENTACTION=Sale";

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address);

然后我使用HTTPWebResponse获取Paypal的响应,并解析出令牌,将用户重定向到。
Response.Redirect("https://www.sandbox.paypal.com/us/cgi-bin/webscr?cmd=_express-checkout&useraction=commit&token=" + token);

当用户到达PayPal后,请登录并点击“立即付款”按钮,然后重定向到我的网站的结帐页面。
所以一切似乎都很好。但是当我检查沙盒账户时,实际上没有任何资金被转移。
最常见的原因是从重定向URL中缺少useraction=commit参数,但是它已经存在,所以这不是问题。
2个回答

8

对于后来遇到这个问题的任何其他人。我已经解决了它。一旦用户在PayPal上确认付款后返回您的网站,您仍然需要向PayPal服务器发送DoExpressCheckoutPayment请求以处理付款。

您需要提供PayerID和TOKEN给DoExpressCheckoutPayment进行处理。 PayerID附加在RETURNURL的URL中,或者可以通过使用TOKEN调用GetExpressCheckoutDetails来检索。


我在被重定向到成功的URL后调用了DoExpressCheckoutPayment。我重新获取了付款详情,显示CHECKOUTSTATUSPaymentActionCompleted,但是当我检查仪表板时,在交易选项卡中没有显示。 - kapitanluffy

0

当我集成PayPal时,我遇到了同样的问题,似乎他们的系统进行了一些修改。

如果您进入您的买家账户,您会看到您的付款处于待处理状态,并将在几天内获得批准,对于商家账户也是同样的情况。


我在任何一个账户上都没有看到任何待处理的付款。 - Brian Green
这是从买方账户中扣除的金额,并添加到卖方账户吗? - Bilal Murtaza
不,它们两个仍然保持我开始时的相同余额。 - Brian Green
这意味着它们被发送为授权,而不是“销售”类型的交易。这与Brian的问题不同,他只是缺少DoExpressCheckoutPayment。 - Robert

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