IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Paypal接口详细代码(PHP版,非API接口)

司徒楠,一个PHP程序员 2010-07-19 22:42:37 累计浏览 19,395 次
本机暂存

notify_url 响应代码:

以下是代码片段:
<?php 
error_reporting(’7’); 
  
// 由于这个文件只有被Paypal的服务器访问,所以无需考虑做什么页面什么的,这个页面不是给人看的,是给机器看的 
  
/** 
* 从数据库获取指定的订单信息 
*/ 
$order = $PDO->query("select * from order where order_out_id = ’{$_GET[’order_id’]}’")->fetch_all(); 
  
if(!empty($order)) 

    if(’FINISH’ == $order[’payment_status’]) 
    { 
        exit; 
    } 
  
    // 拼装验证信息 
    $req = ’cmd=_notify-validate’; 
    foreach ($_POST as $k=>$v) 
    { 
        $v = urlencode(stripslashes($v)); 
        $req .= "&{$k}={$v}"; 
    } 
  
    $ch = curl_init(); 
    curl_setopt($ch,CURLOPT_URL,’https://www.paypal.com/cgi-bin/webscr’); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch,CURLOPT_POST,1); 
    curl_setopt($ch,CURLOPT_POSTFIELDS,$req); 
    $res = curl_exec($ch); 
    curl_close($ch); 
    echo $res; 
  
    if($res) 
    { 
        // 如果这次的请求是Paypal的服务器发送到我方服务器的则继续验证,否则退出 
        if(strcmp($res, ’VERIFIED’) == 0) 
        { 
            if ($_POST[’payment_status’] != ’Completed’ && $_POST[’payment_status’] != ’Pending’) 
            { 
                exit; 
            } 
  
               // 如果收款人不是我的账号 
            if(’你的paypal账号’ != $_POST[’mc_email’]) 
            { 
                exit; 
            } 
  
            // 如果价格不符 
            if($_POST[’mc_gross’] != $order[’payment_price’]) 
            { 
                exit; 
            } 
  
            // 如果货币类型不对 
            if(’USD’ != $_POST[’mc_currency’]) 
            { 
                exit; 
            } 
  
        } 
        elseif(strcmp($res,’INVALID’) === 0) 
        { 
            echo ’fail’; 
        } 
    } 

else 

    echo ’fail’; 
}

提交到paypal进行支付代码:

以下是代码片段:
<?php 
// 生成订单号 
$order_id = uniqid(); 
// 组织表单数据 
$form_data = array( 
    ’cmd’ => ’_xclick’,                        // 网站拥有自己的购物车系统 
    ’business’ => ’**********’,         //商家的贝宝账号 
    ’item_name’=> $order_id,              //订单号 
    ’amount’   => 100,                       //商品总价 
    ’currency_code’ => ’USD’,             //使用哪种货币 USD-美元 
    ’return’    => ’http://www.xxx.com/response.php?order_id=’.$order_id,// 当用户支付完成后,浏览器会跳转到这个页面,一般情况下无需做复杂操作,直接告诉用户付款成功即可,无需其他逻辑,真正的付款成功与否的通知在notify_url 
    ’invoice’ => $order_id, 
    ’charset’ => ’UTF-8’,                    //网站使用的编码 
    ’no_shipping’ => ’1’, 
    ’no_note’     => ’0’, 
    ’image_url’   => ’https://www.paypal.com/en_US/i/logo/paypal_logo.gif’, 
    ’cancel_return’ => ’http://www.xxx.com/goods.php?good_id=12123’,// 如果用户跳转到paypal支付接口后不想继续购买,点击取消付款后会跳转到这个页面 
    ’notify_url’  => ’http://www.xxx.com/notify.php?order_id=’.$order_id,// PAYPAL的服务器会把用户时候付款,付款成功与否的信息发送到这里,用户不感觉得到,这完全是Paypal的服务器向你的服务器发送的数据 
    ’rm’ => ’2’, 
); 
  
// 生成提交表单 
?> 
https://www.sandbox.paypal.com/cgi-bin/webscr 
<form action="https://www.paypal.com/cgi-bin/webscr" target="_blank" method="post"> 
<?php foreach($form_data as $key=>$name): ?> 
<input type="hidden" name="<?php echo $key; ?>" value="<?php echo $name; ?>" /> 
<?php endforeach; ?> 
<input type="submit" value="Use Paypal" /> 
</form>
演示:http://www.c1991.com/demo/pay?paypal

同分类推荐文章

  1. Go 实验特性详解 (2026-06-21 10:05:27)
  2. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)
  3. Loop Engineering 实践:我把 RDMA 开发库移植到 Go 语言,花费 239 块钱 (2026-06-17 04:00:24)

查看更多 后端 文章 →

建议继续学习

  1. 使用gettext来支持PHP的多语言 (累计阅读 39,244)
  2. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,144)
  3. 我的PHP,Python和Ruby之路 (累计阅读 13,122)
  4. include(“./file.php”)和include(“file.php”)区别 (累计阅读 12,773)
  5. 15个最好的免费开源电子商务平台 (累计阅读 12,511)
  6. Redis消息队列的若干实现方式 (累计阅读 12,064)
  7. 到底什么是MVC? (累计阅读 11,827)
  8. 整理了一份招PHP高级工程师的面试题 (累计阅读 11,655)
  9. Rolling cURL: PHP并发最佳实践 (累计阅读 11,469)
  10. 你必须了解的Session的本质 (累计阅读 11,409)