Php 将我的paypal从一次性付款更改为paypal sub
因此,我有一个会员网站,用户需要每月支付x金额才能使用它,此时我已对其进行编码,以便他们需要每月结帐。当然,用户要求我更改此网站,以便自动支付。用户需要进入我的会员页面选择一个,然后接受1笔付款。我已经去贝宝,并作出了一个子按钮,但希望得到一些帮助,以添加到我目前的付款编码Php 将我的paypal从一次性付款更改为paypal sub,php,paypal,Php,Paypal,因此,我有一个会员网站,用户需要每月支付x金额才能使用它,此时我已对其进行编码,以便他们需要每月结帐。当然,用户要求我更改此网站,以便自动支付。用户需要进入我的会员页面选择一个,然后接受1笔付款。我已经去贝宝,并作出了一个子按钮,但希望得到一些帮助,以添加到我目前的付款编码 <a class="cd-select" href="upgradeaccount.php?Popular=2">Select</a>
<a class="cd-select" href="upgradeaccount.php?Popular=2">Select</a>
<?php
if (isset($_GET['Popular'])) {
// Setup class
require_once('paypal.class.php'); // include the class file
$p = new paypal_class; // initiate an instance of the class
$p->paypal_url = 'https://www.paypal.com/cgi-bin/webscr'; // testing paypal url
//$p->paypal_url = 'https://www.paypal.com/cgi-bin/webscr'; // paypal url
// setup a variable for this script (ie: 'http://www.domain.com/paypal.php')
$this_script = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
// if there is not action variable, set the default action of 'process'
if (empty($_GET['action'])) $_GET['action'] = 'process';
switch ($_GET['action']) {
case 'process': // Process and order...
// There should be no output at this point. To process the POST data,
// the submit_paypal_post() function will output all the HTML tags which
// contains a FORM which is submited instantaneously using the BODY onload
// attribute. In other words, don't echo or printf anything when you're
// going to be calling the submit_paypal_post() function.
// This is where you would have your form validation and all that jazz.
// You would take your POST vars and load them into the class like below,
// only using the POST values instead of constant string expressions.
// For example, after ensureing all the POST variables from your custom
// order form are valid, you might have:
//
// $p->add_field('first_name', $_POST['first_name']);
// $p->add_field('last_name', $_POST['last_name']);
$p->add_field('business', 'admin@mydomain.com');
$p->add_field('return', $this_script.'?action=success');
$p->add_field('cancel_return', $this_script.'?action=cancel');
$p->add_field('notify_url', $this_script.'?action=ipn');
$p->add_field('item_name', 'mydomain.com Popular Account Upgrade');
$p->add_field('amount', '2.00');
$p->submit_paypal_post(); // submit the fields to paypal
//$p->dump_fields(); // for debugging, output a table of all the fields
break;
case 'success': // Order was successful...
// This is where you would probably want to thank the user for their order
// or what have you. The order information at this point is in POST
// variables. However, you don't want to "process" the order until you
// get validation from the IPN. That's where you would have the code to
// email an admin, update the database with payment status, activate a
// membership, etc.
echo "<html><head><title>Success</title></head><body><h3>Thank you for your order.</h3>";
foreach ($_POST as $key => $value) { echo "$key: $value<br>"; }
echo "</body></html>";
// You could also simply re-direct them to another page, or your own
// order status page which presents the user with the status of their
// order based on a database (which can be modified with the IPN code
// below).
break;
case 'cancel': // Order was canceled...
// The order was canceled before being completed.
echo "sorry ";
echo "<html><head><title>Canceled</title></head><body><h3>The order was canceled.</h3>";
echo "</body></html>";
break;
case 'ipn': // Paypal is calling page for IPN validation...
// It's important to remember that paypal calling this script. There
// is no output here. This is where you validate the IPN data and if it's
// valid, update your database to signify that the user has payed. If
// you try and use an echo or printf function here it's not going to do you
// a bit of good. This is on the "backend". That is why, by default, the
// class logs all IPN data to a text file.
if ($p->validate_ipn()) {
// Payment has been recieved and IPN is verified. This is where you
// update your database to activate or process the order, or setup
// the database with the user's order details, email an administrator,
// etc. You can access a slew of information via the ipn_data() array.
// Check the paypal documentation for specifics on what information
// is available in the IPN POST variables. Basically, all the POST vars
// which paypal sends, which we send back for validation, are now stored
// in the ipn_data() array.
// For this example, we'll just email ourselves ALL the data.
echo" worked";
$subject = 'Instant Payment Notification - Recieved Payment';
$to = 'myemail@live.co.uk'; // your email
$body = "An instant payment notification was successfully recieved\n";
$body .= "from ".$p->ipn_data['payer_email']." on ".date('m/d/Y');
$body .= " at ".date('g:i A')."\n\nDetails:\n";
foreach ($p->ipn_data as $key => $value) { $body .= "\n$key: $value"; }
mail($to, $subject, $body);
}
break;
}
}
但是现在得到了错误
定期无效。您必须为订阅指定A3、P3和T3参数的有效值。我通过编辑paypal类并添加此参数来修复它
$this->add_field('rm','2'); // Return method = POST
$this->add_field('cmd','_xclick-subscriptions');
$this->add_field('a3','2');
$this->add_field('p3','1');
$this->add_field('t3','M');
$this->add_field('src','1');
$this->add_field('rm','2'); // Return method = POST
$this->add_field('cmd','_xclick-subscriptions');
$this->add_field('rm','2'); // Return method = POST
$this->add_field('cmd','_xclick-subscriptions');
$this->add_field('a3','2');
$this->add_field('p3','1');
$this->add_field('t3','M');
$this->add_field('src','1');