更简单的集成PayPal快速结账的方法?

5
我已经为Wordpress CMS构建了一个产品生成和显示插件,现在正在尝试集成某种形式的PayPal结帐过程。 我已经解决了购物车、产品、运费和合计等一切问题,并希望有人能指点我将此信息发送到PayPal最简单的方法。我知道有些方法并不安全,而其他方法则让你像表演狗一样跳跃。我一直在尝试学习如何使用cURL,然后如何让它与PHP配合工作——这似乎真的有点混乱。我现在已经在我的WAMP服务器上使cURL工作了......但是......
是否有更好的方法,或者我应该继续学习cURL?无论如何,我都可以以任何需要的格式格式化数据,以便将其发送到PayPal,并且不介意使用JavaScript进行此操作——这不是一个付费墙,每个订单都会由人员检查其准确性——因此,某些客户端脚本的干扰不会困扰我。我还绝对希望将他们发送到PayPal,我不想参与存储/处理他们的信用卡信息。但是,拥有IPN也很好。有人可以指引我方向或向我保证我已经走上了正确的道路吗?
非常感谢。
2个回答

7
这是我自动重定向到PayPal并传递所有表单细节的方法:
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" id="paypal">

 <input type="hidden" name="cmd" value="_xclick" />
  <input type="hidden" name="cbt" value="Return to example" />
 <input type="hidden" name="business" value="email" />
 <input type="hidden" name="item_name" value="example Purchase" />
 <input type="hidden" name="amount" value="9.99">
 <input type="hidden" name="button_subtype" value="services" />
 <input type="hidden" name="no_shipping" value="1">
 <input type="hidden" name="return" value="URL" />
 <input type="hidden" name="notify_url" value="URL"/>
 <input type="hidden" name="cancel_return" value="URL" />
<input type="hidden" name="currency_code" value="USD"/>
<input type="hidden" name="image_url" value="" />
<input type="hidden" id="custom" name="custom" value="invoice_id to track"/>
 <input type="hidden" class="btn btn-primary" style="width:100%" alt="PayPal - The safer, easier way to pay online!"/>

</form>

对于多个产品,您可以简单地将更多产品添加到表格中,例如:

<input type="hidden" name="item_name_1" value="Item #1">
<input type="hidden" name="amount_1" value="1.00">
<input type="hidden" name="item_name_2" value="Item #2">
<input type="hidden" name="amount_2" value="2.00">

然而,使用此方法并非完美无缺。所有数据都需要由PHP生成并输入到页面中,您还需要在IPN回调时检查交易以确保已付款。
<script type="text/javascript">
  function myfunc () {
     var frm = document.getElementById("paypal");
     frm.submit();
  }
  window.onload = myfunc;
</script>

谢谢您的快速回复。这对整个购物车中的产品也适用吗,还是只能一个一个地处理?您能提供一些关于如何处理IPN的信息吗? - Jon
再次感谢,生成所需的HTML以将此表单发送到PayPal应该不是问题。看起来唯一缺失的拼图块将是找出和处理IPN。 - Jon
是的,这是整个过程中最烦人的部分之一,你可以去PayPal文档网站获取默认的PHP IPN脚本,然后使用你在表单中作为自定义字段放置的unique_id查询数据库以获取交易信息并检查所有内容。 - Harry Beasant
各位,我有一个问题,表单操作直接指向PayPal,那么如何检查安全性呢?我的意思是,如果有人更改HTML并结账少付款怎么办...在提交表单之前如何检查所有这些内容。 - Maruti Mohanty
您需要在从PayPal收到的即时付款通知(IPN)中确认付款成功后,才能继续执行任何允许成功付款的操作。 - user216084

3
您可能想要使用新的PayPal SDK。他们提供了一组很好的示例代码,包括快速结账和IPN的代码。请查看此处: https://www.x.com/developers/paypal/documentation-tools/paypal-sdk-index 获取快速结帐SDK。目前,他们的PHP SDK版本应该是SDK 98。 您不必担心Curl,SDK会为您处理所有细节。一个典型的调用可能是这样的。
$setECResponse = $paypalService->SetExpressCheckout($setECReq);

这行代码是基于示例模拟的。它是完全面向对象的。他们提供了类。在这种情况下,有一个请求对象需要您填写,示例演示了如何做到这一点; 只需将示例用作您的模板。

听起来你想要使用PayPal Express结账,这样你就不必处理信用卡或其他任何事情。用户被重定向到PayPal网站,并且所有的财务交易都在那里进行。用户被重定向回您的网站。然后您有一个页面,用户可以查看订单并在批准后单击提交。当用户单击提交时,您调用PayPal API告诉PayPal交易已获批准。 PayPal随后执行交易并发送确认和交易ID给您。然后您可以调用getTransactionDetails并向客户显示确认。您还可以将这些交易详细信息放入数据库中。

以下是您可以调用的API。这些与他们提供的示例代码密切相关

$paypalService->SetExpressCheckout($setECReq);

用户被导向到PayPal的网址,并浏览了一些页面,然后返回到你的页面。

你的订单审核页面 $paypalService->GetExpressCheckoutDetails($getExpressCheckoutReq);

你的订单确认页面

$paypalService->GetExpressCheckoutDetails($getECReq);

$paypalService->DoExpressCheckoutPayment($DoECReq);

告诉PayPal进行交易。
$paypalService->GetTransactionDetails($request);

在这里,您可以将交易详情存入数据库。您还可以发送带有所有细节的邮件,这样您就会知道何时发生交易。

IPN可能有点棘手。他们提供了一个示例IPN侦听器,可以帮助您。您需要在PayPal网站上设置侦听器URL。您还需要设置SSL证书。

SDK相对较新,但PayPal正在开发一种更新的方式:developer.paypal.com。它是在过去一个月左右推出的。您可能也想研究一下。


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