我正在用 java 做一个 web 应用程序,我想使用 paypal api。我的应用程序正在我的机器(在 localhost 中)由 apache non in internet 运行。我在 paypal.developper 中创建了一个帐户,例如 myproject@gmail.com 。我创建了一些沙盒帐户(买家:buyer@gmail.com,和业务卖家 myproject-facilitator@gmail.com),我已经运行了一些测试,一切正常。
我的问题是:我无法配置 PDT(付款数据传输)或 IPN(即时付款通知)。
我去了我的贝宝个人资料-销售工具-网站偏好。我点击自动返回:ON,PDT:ON,然后在返回 url:http://127.0.0.1/myproject/prenotationIsDone.jsp
我保存它,它显示我的身份令牌。
现在,当我运行一些测试时,它甚至不会自动返回,它会像我在沙盒账户上进行测试一样进行付款:
我做这样的事情:
<form name="paypalForm" action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick" />
<input type="hidden" name="business" value="myproject@gmail.com" />
<input type="hidden" name="custom" value="1123" />
<input type="hidden" name="item_name" value="Camera" />
<input type="hidden" name="amount" value="20"/>
<input type="hidden" name="rm" value="1" />
<input type="hidden" name="return" value="http://127.0.0.1/myproject/prenotationIsDone.jsp" />
<input type="hidden" name="cancel_return" value="http://127.0.0.1/myproject/cancel.jsp" />
<input type="submit" value="Continua! "/>
即使我将电子邮件更改为沙箱业务电子邮件:myproject-facilitator@gmail.com 也将是相同的。它只是在没有自动退货和使用 PDT 的情况下进行付款。
在 jsp 文件中,我将有一些这样的行:
Enumeration en = request.getParameterNames();
while(en.hasMoreElements()){
String paramName = (String)en.nextElement();
out.println("parameters"+ paramName);
}
当然没有像 tx 这样的参数,因为 PDT 不起作用。知道如何解决这个问题吗?
第二个问题:我已经看到IPN(和PDT,但我不确定PDT)在本地服务器中不起作用,因为它需要在网络外部看到。我怎样才能解决这个问题 ?我尝试了这些步骤,但我想我做错了什么:首先我将 apache 的端口从默认的 8080 更改为端口 80。我在 NAT 中转到路由器,然后在外部 ip 中将端口转发到端口 80 (中的那个www.whatismyip.com
)。例如它将是: 198.122.141.2 现在,当我在浏览器中尝试 198.122.141.2:80/myproject/index.jsp 时,它什么也没有显示,或者它说找不到对象。即便如此,我尝试设置一个动态 ip、dydns 或 noip,它会是 myproject.ns0.it/myproject/index.jsp 并且它不显示任何内容。
请有人可以帮助我如何解决这个问题,或者有没有其他方法可以在我的本地服务器中验证贝宝的付款。谢谢你的时间,对不起我的英语