发布到没有“表单”的 PayPal 示例 URL
Posted
技术标签:
【中文标题】发布到没有“表单”的 PayPal 示例 URL【英文标题】:POST to sample URL for PayPal without "form" 【发布时间】:2011-04-17 21:31:10 【问题描述】:在 paypal 平台上测试支付交易时,我在将数据发布到特定 URL 时遇到了一些问题。尽管在技术上更容易理解,但我选择不使用他们的 API 和 NVP 平台,因为需要首先创建交易,然后返回并必须创建一个重复的配置文件(而不是一次全部 - 我认为愚蠢的设计) .
最终,我试图将已加密的数据放入特定变量中,并将该数据发布到选择的 URL,而不必将其视为用户单击提交的表单。
我的 HTML 表单有效 - 代码是:
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_blank">';
<input type="hidden" name="cmd" value="_s-xclick"/>';
<input type="hidden" name="encrypted" value="'.$encrypted.'"/>';
<input type="submit" value="Go to checkout" name="submit" class="cartButton" />';
</form>
其中 $encrypted 是我的加密参数。虽然代码有效 - 我不想让用户单击要发送到表单的链接。相反,我希望用户单击一个按钮,该按钮首先运行 php 脚本以将数据存储在临时数据库中,然后将所需元素(CMD 和 ENCRYPTED)推送到帖子 URL(https://www.sandbox.paypal.com /cgi-bin/webscr)。
任何想法如何做到这一点?可能吗?我的网站使用 PHP 和 mysql。 使用任何类型的 Javascript 都不是解决方案。
编辑 1
我已将其设置为使用 cURL 作为发布数据的一种可能方式,但发生了两件事:1)我没有得到任何响应,2)消费者实际上需要被重定向到带有在数据库插入发生后发布数据。
【问题讨论】:
使用 expresscheckout,您仍然可以从用户那里获取所有数据,创建交易,然后将用户重定向到 paypal 站点。您可以“走很长一段路”(即在 Paypal 中输入详细信息,返回站点,返回 Paypal)并不是流程的必要条件。 (虽然这是 paypal 官方要求的,但我见过的大多数 expresscheckout 实现并不真正关心那个 ping-pong 选项)。 我不认为 PayPal 喜欢人们这样做(客户喜欢付款页面是安全的,即使您确实通过 SSL 显示付款页面,它也不会显示为 PayPal 证书)。然而,无论如何,你需要 cURL 或做同样工作的东西。将您得到的回复呈现给用户应该是直截了当的。如果您根本没有收到任何响应,请尝试发布到另一个站点,如果失败,您很可能违反了防火墙规则(或位于 NAT 路由器后面)。 @Wrikken - 正如我上面所说,快速结帐流程对于定期/订阅付款来说是可怕的。此外 - 快速结账允许消费者使用 PayPal 余额付款 - 我们根本不感兴趣。 @berty - 我不确定你在说什么。我的“方式”是某人单击我已经在我端创建的加密按钮时使用的确切方法。正如我在编辑中所说,我已经在使用 cUrl。我已经可以将我的回复回复给消费者,所以这也不是问题。我很难相信您在发布几行不适用或已解决的 cmets 和问题之前阅读了该问题。 更不用说 - 根据所有 PayPal 指南,这是受支持和首选的方式。我没有预先收集任何付款信息 - 全部在 Paypal 端处理。 【参考方案1】:您可以使用 cURL 将数据发布到 URL。
【讨论】:
@chigley - 我应该添加我的笔记;我对 cURL 的唯一问题是我实际上需要将消费者重定向到发布的 URL 以及发布的数据 @JM4 - 在这种情况下,我真的想不出任何不涉及 javascript 的建议!使用 cURL 可能仍然有可能,但我对此了解不足,无法提出任何建议。 确实不可能通过 cURL 响应将用户引导到那里(请求结束并完成),并且没有 javascript 这是不可能的 afaik。 '在没有点击的情况下发布表单' 和 '没有 javascript' 是相互排斥的。 @wrikken - 你错了 - 如果只需要简单的发布,那么发布表单数据和没有 JavaScript 是很容易实现的。然而,我的问题是我需要发布数据,并且网站像表单 action="" 一样重定向。 '一个 POST 正在发生' 确实,出于这个原因,我在“my 浏览器”中强调了“my”。如果您不知道某些事情,那么正确的回答不是 'inccorect'(原文如此),这立即使我不愿意进一步前进。长话短说:响应 POST 请求(用户的浏览器应该执行,而不是您的服务器),Paypal 启动一个会话,存储值,设置所有类型的 cookie,您无法让用户浏览器发送到 paypal.com,因为 cookie 不是跨域共享的(在浏览器的正常安全设置中)。【参考方案2】:您是否考虑过通过wget
管道传输数据?
【讨论】:
考虑到 Paypal 设置,这并不是我真正想要的解决方案【参考方案3】:这是不可能的,但还有另一种方法:您触发一个异步后台 javascript 事件,该事件将一个帖子触发到您自己的服务器以存储数据......以及另一个将表单发送到 PayPal 以进行安全处理的同步前台事件。
【讨论】:
但是,那些在浏览器中禁用了 javascript 的用户呢?以上是关于发布到没有“表单”的 PayPal 示例 URL的主要内容,如果未能解决你的问题,请参考以下文章