需要有关使用paypal IPN创建自定义订单表单的建议/示例

时间:2014-01-27 04:12:28

标签: php paypal paypal-ipn

我需要使用paypal的IPN在客户的网站上创建订单。他为客户创建了kydex皮套,所以我需要在订单上有多个选项。此外,我需要在交易完成后向客户以及我的客户发送包含发票的电子邮件。我对paypal IPN有着真正的零经验,所以我正在寻找任何建议,指导或这里的例子给我提供的例子。我没有太多的运气谷歌搜索。

3 个答案:

答案 0 :(得分:1)

有两个非常好的选择,不包括你手工完成。为什么重新发明轮子?很多非常好的,免费的例子已经存在。

  1. 使用CMS与电子商务平台(drupal + ubercart或其他,wordpress + woocommerce或其他,magento),其中包括自定义PayPal订购。

  2. PayPal建议我们这样做的方法是在他们的网站上生成一个非常复杂,完整的按钮,然后通过php copy将其捕捉到客户端站点 - >糊。这是一个非常确定的(双关语)选项,用于直接从PayPal支付+期权+发票。

  3. 除非你很快接受POST,否则你将会在几十年的时间里对已经掌握并重新回馈社区的事情犹豫不决。

答案 1 :(得分:0)

如果我是你,我会从developer.paypal.com开始,从那里你可以从那里设置你的ipn东西并查看集成方法。只是简单地说明它是如何工作的:

  1. 来自网站的客户订单
  2. 网站将产品信息发送至PayPal重定向至PayPal以确认付款
  3. Paypal通知您的ipn交易信息以及您从第2步发送的所有内容
  4. 现在你的ipn要做的事情应该是: 1.检查“已验证”状态,如果是,则继续,如果不是,请不要信用 2.检查重复的交易,因为你应该存储这些,因为人们喜欢尝试快速一个 3.检查货币是否正确,因为您只想使用汇率,例如美元而不是日元。

    现在如果一切都很好,那么你可以开始信用,即使paypal也这样做,你可以向管理部门和买家发送电子邮件

答案 2 :(得分:0)

以下是您可以遵循的步骤。

Step1 创建IPN表单。确保将IPN URL(通知URL)传递给paypal。

对于表单变量,您可以参考https://developer.paypal.com/webapps/developer/docs/classic/paypal-payments-standard/integration-guide/Appx_websitestandard_htmlvariables/

<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_cart">
    <input type="hidden" name="business" value="seller@designerfotos.com">
    <input type="hidden" name="item_name" value="hat">
    <input type="hidden" name="item_number" value="123">
    <input type="hidden" name="amount" value="15.00">
    <input type="hidden" name="first_name" value="John">
    <input type="hidden" name="last_name" value="Doe">
    <input type="hidden" name="address1" value="9 Elm Street">
    <input type="hidden" name="address2" value="Apt 5">
    <input type="hidden" name="city" value="Berwyn">
    <input type="hidden" name="state" value="PA">
    <input type="hidden" name="zip" value="19312">
    <input type="hidden" name="night_phone_a" value="610">
    <input type="hidden" name="night_phone_b" value="555">
    <input type="hidden" name="night_phone_c" value="1234">
    <input type="hidden" name="email" value="jdoe@zyzzyu.com">
    <input type="hidden" name="return" value="https//www.mysite.com/order/return">
    <input type="hidden" name="cancel_return" value="https//www.mysite.com/order/cancel" id="cancel_return">
    <input type="hidden" name="notify_url" value="https//www.mysite.com/ipn">
</form>

第2步:创建IPN控制器。详细了解审核https://developer.paypal.com/docs/classic/ipn/gs_IPN/

$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value) { $_POST[$key] = mysql_real_escape_string($value); }         

foreach ($_POST as $key => $value) {
    $value = urlencode(stripslashes($value));
    $req .= "&$key=$value";
}

$header = ''; 
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen('www.sandbox.paypal.com', 80, $errno, $errstr, 30);

// assign posted variables to local variables

$content['payment_status']      = $_POST['payment_status'];
$content['payment_amount']      = $_POST['mc_gross'];
$content['payment_currency']    = $_POST['mc_currency'];
$content['txn_id']              = $_POST['txn_id'];
$content['receiver_email']      = $_POST['receiver_email'];
$content['payer_email']         = $_POST['payer_email'];    
$content['txn_type']            = $_POST['txn_type'];        
$content['paydate']             = date('Y-m-d H:i:s');


if (!$fp)
{
    // HTTP ERROR
}
else
{

    fputs ($fp, $header . $req);
    if (!feof($fp))
    {
        $res = fgets ($fp, 1024);

        if(strcasecmp($content['txn_type'], "subscr_payment") == 0)
        {
            //Action            
        }
        else if(strcasecmp($content['payment_status'], "Completed") == 0)
        {
            //Action            
        }
        else if(strcasecmp($content['txn_type'], "subscr_cancel") == 0)
        {
           //Action            
        }
    }
    fclose ($fp);
}