我正在尝试将PayPal付款与我的codeigniter项目集成。我的项目是关于一个约会网站,其中两个不同的用户互相交流。因此,我正在销售计划,在此基础上,将为用户提供访问权限,以便在该段时间内向其他人发送消息。为此我开发了一个非常简单的页面,其中包含可从不同计划中选择的单选按钮。 这些是以下计划
- 一个月(
$2
)- 两个月(
$4
)- 三个月(
$6
)- 四个月(
$8
)- 五个月(
$10
)
等等
- 六个月(
$12
)
因此,用户可以从上面选择任何计划,然后可以继续进一步支付PayPal金额。在我们网站上拥有帐户的用户可以使用此页面。 所以我们可以将当前用户的所有细节传递给PayPal,例如 - 姓名,电子邮件等。
我曾尝试阅读很多关于如何整合paypal的文章,但没有一篇能帮助我。 因为我是codeigniter的新手。
我还在paypal上创建了Paypal和沙盒帐户。我从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错误。所以我想为什么不用这种方式。我知道有函数负责向paypal发送值。但通过这种行动方法。我被重定向到简单的paypal页面。
答案 0 :(得分:6)
以下是您可以遵循的步骤。
Step1 创建IPN表单。确保将IPN URL(通知URL)传递给paypal。
<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);
}
答案 1 :(得分:0)
$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¤cy_code=EUR&return=$success_url&cancel_return=$cancel_url";
redirect($data['payment_url']);
在return success URL
中,您可以获取用户ID和付款金额
答案 2 :(得分:0)
第1步:从https://github.com/nrshoukhin/codeigniter-paypal-library此处下载CodeIgniter PayPal库。
第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”,并根据所需的重复周期设置频率间隔。