技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> PHP --> Paypal接口详细代码(PHP版,非API接口)

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

浏览:18361次  出处信息

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. 面向“接口”编程和面向“实现”编程    (阅读:12560)
  2. PHP连贯接口    (阅读:6364)
  3. 存储基础知识之——硬盘接口简述    (阅读:6123)
  4. JavaScript Interface 接口的实现    (阅读:5817)
  5. 干嘛不去掉“I”和“Impl”?    (阅读:5672)
  6. 使用Mitmproxy分析接口    (阅读:5343)
  7. 接口设计规则一:让你的接口会说话    (阅读:3521)
  8. 以用户为中心的 API 异常设计    (阅读:2396)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1