如何将贝宝与codeigniter集成?

Posted

技术标签:

【中文标题】如何将贝宝与codeigniter集成?【英文标题】:how to integrate paypal with codeigniter? 【发布时间】:2014-01-14 00:06:03 【问题描述】:

我正在尝试将 PayPal 支付与我的 codeigniter 项目集成。我的项目是关于一个约会网站,其中两个不同的用户相互交互。因此,我正在销售计划,在此基础上,将向用户提供在那段时间内向其他人发送消息的权限。为此,我开发了一个非常简单的页面,其中包含用于从不同计划中选择的单选按钮。 这些是以下计划

一个月 ($2) 两个月 ($4) 三个月 ($6) 四个月 ($8) 五个月 ($10)

等等

六个月 ($12)

因此,用户可以从上面选择任何计划,然后可以继续在 PayPal 上支付金额。此页面可供在我们网站上拥有帐户的用户使用。 这样我们就可以将当前用户的所有详细信息传输到 PayPal,例如 -- 姓名、电子邮件等。

我已尝试阅读许多有关如何集成 paypal 的文章,但没有一篇对我有帮助。 因为我是 codeigniter 的新手。

我还在贝宝上创建了贝宝和沙盒帐户。我从 sourceforge.net 下载了 php-toolkit 并独立使用它,然后它可以正常运行。但是当我尝试在 codeigniter 中实现时,它不需要任何地方。

请帮帮我!!

编辑:

<?php 

    //Configuration File
    include_once APPPATH.'../php_paypal/includes/config.inc.php'; 

    //Global Configuration File
    include_once APPPATH.'../php_paypal/includes/global_config.inc.php';

?> 
<?php echo form_open('https://www.sandbox.paypal.com/cgi-bin/webscr');?>   

 <input type="hidden" name="amount" value="9.95">
 <input type="hidden" name="item_name" value="Test Payment">
</form>

这就是我想要创造的。早些时候,我尝试在表单操作中使用“process.php”,但在 codeigniter 中出现 URL 错误。所以我想为什么不使用这种方式。我知道有负责向贝宝发送值的功能。而是通过这个动作方法。我被重定向到简单的贝宝页面。

【问题讨论】:

那么你应该发布你用于 Codeigniter 的代码,以便我们可以看到你做错了什么 @DamienPirsy --- 我已经更新了我的问题,请您再次检查并回复好吗?谢谢 【参考方案1】:

您可以按照以下步骤操作。

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

Form变量可以参考https://developer.paypal.com/webapps/developer/docs/classic/paypal-payments-standard/integration-guide/Appx_websitestandard_htmlvariables/

<form name="paypalFrm" id="paypalFrm" action="https://www.paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_ext-enter">
    <input type="hidden" name="redirect_cmd" value="_xclick-subscriptions">
    <input type="hidden" name="return" value="<?php echo $return_url;?>">
    <input type="hidden" name="cancel_return" value="<?php echo $cancel_return;?>">
    <input type="hidden" name="notify_url" value="<?php echo $notify_url;?>">
    <input type="hidden" name="custom" value="<?php echo $custom.",".$custom2;?>">
    <input type="hidden" name="business" value="<?php echo $business_id;?>">
    <input type="hidden" name="item_name" value="<?php echo $item_name;?>">
    <input type="hidden" name="item_number" value="1">
    <input type="hidden" name="no_note" value="1">
    <input type="hidden" name="currency_code" value="USD">
    <input type="hidden" name="a3" value="<?php echo $plan_amount;?>">  
    <input type="hidden" name="p3" value="1">  
    <input type="hidden" name="t3" value="M">   
    <input type="hidden" name="src" value="1">
    <input type="hidden" name="sra" value="1">
    <input type="hidden" name="srt" value="12">
    <input type="hidden" name="first_name" value="<?php echo $txtname;?>">
    <input type="hidden" name="lc" value="<?php echo $merchant_country;?>">
    <input type="hidden" name="email" value="<?php echo $txtemail;?>">
</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']      = $this->input->post('payment_status');
$content['payment_amount']      = $this->input->post('mc_gross');
$content['payment_currency']    = $this->input->post('mc_currency');
$content['txn_id']              = $this->input->post('txn_id');
$content['receiver_email']      = $this->input->post('receiver_email');
$content['payer_email']         = $this->input->post('payer_email');    
$custom                         = explode(",",$this->input->post('custom'));
$content['payment_id']          = $custom[0];
$content['type']                = $custom[1];
$content['txn_type']            = $this->input->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);

【讨论】:

请原谅我。如果我在某个地方出错了。首先,我试图让用户从我的网站向贝宝付款。我应该如何做到这一点? 如果你能观察到HTML表单;此表格正在提交给 Paypal 以进行付款。这意味着您只需要调用此表单的提交操作,它就会将用户带到贝宝付款。 非常感谢您的快速响应。最后我得到了结果。但是有一个问题,它重定向到一个贝宝页面,贝宝强制在该网站上注册。但早些时候,当我使用 php-toolkit 对其进行测试时,它会重定向到不同的页面,其中 paypal 提供了注册和直接付款的选项。我还需要更多帮助,我不知道实际付款时管理员需要提供哪些详细信息。我们可以在哪里动态获取详细信息,例如商家 ID、签名等? 好吧,Pankaj,需要商家 ID 才能向企业帐户付款,其余详细信息请阅读 HTML 表单可变文档的 paypal。这会帮助你。 developer.paypal.com/webapps/developer/docs/classic/… Hello Trimantra -- 尽管我已经使用您提供的 ipn 控制器成功地将数据插入到数据库中。但我正在尝试打印 $_POST 变量,但我什么也没得到。那么如何打印贝宝发布的所有值,或者我如何知道贝宝在 IPN 中发送的所有值。【参考方案2】:
$orderide = $this->checkout_model->user_order($order_table);
$business='paypal@business.example.com';            
$cancel_url="http://".$_SERVER['SERVER_NAME']."/checkout/cancel?orderide=".$orderide;
$success_url="http://".$_SERVER['SERVER_NAME']."/checkout/success?order_id=".$orderide;
$data['payment_url']="https://www.sandbox.paypal.com/cgi-bin/webscr?business=$business&cmd=_xclick&item_name=$title&item_number=$product_id&amount=$totalamount&currency_code=EUR&return=$success_url&cancel_return=$cancel_url";              

redirect($data['payment_url']);

return success URL可以获取用户id和支付金额

【讨论】:

【参考方案3】:

第 1 步:从此处下载 CodeIgniter PayPal 库:https://github.com/nrshoukhin/codeigniter-paypal-library。

第 2 步:将整个“应用程序”文件夹从库中拖放到您的 codeigniter 项目中。确保它不与您现有的文件冲突。

第 3 步:从控制器构造器加载库:-

public function __construct()
    parent::__construct();
    $this->load->library("paypal");

第 4 步:从“application/config/paypal.php”打开文件。并提供您的客户 ID、客户密码和货币。

第 5 步:创建一个控制器方法,如下所示:-

public function subscribe()

    if ( !empty($_POST["plan_name"]) && !empty($_POST["plan_description"]) ) 

        $this->paypal->set_api_context();

        $this->paypal->set_plan( $_POST["plan_name"], $_POST["plan_description"], "INFINITE" );

        $definition = "Regular Payments";
        $type       = "REGULAR";
        $frequency  = "MONTH";
        $frequncy_interval = '1';
        $cycles = 0;
        $price = "49";

        $this->paypal->set_billing_plan_definition( $definition, $type, $frequency, $frequncy_interval, $cycles, $price );

        $returnurl = base_url()."payment/success";
        $cancelurl = base_url()."payment/cancel";

        $this->paypal->set_merchant_preferences( $returnurl, $cancelurl );

        $line1 = "Street - 1, Sector - 1";
        $city  = "Dhaka";
        $state = "Dhaka";
        $postalcode = "12345";
        $country = "AU";

        $this->paypal->set_shipping_address( $line1, $city, $state, $postalcode, $country );

        $agreement_name = "Payment Agreement Name";
        $agreement_description = "Payment Agreement Description";

        $this->paypal->create_and_activate_billing_plan( $agreement_name, $agreement_description );

    


在这里,将频率设置为“MONTH”,并根据您想要的重复周期设置frequency_interval。

【讨论】:

以上是关于如何将贝宝与codeigniter集成?的主要内容,如果未能解决你的问题,请参考以下文章

如何将贝宝经常性宝石与 Spree 集成

Omnipay 贝宝与 laravel 4 的集成

将贝宝移动快速结账与 iOS 集成

贝宝与 Braintree Drop-In

paypal, php - 将贝宝支付整合到网站中

贝宝与 ActiveMerchant