gpt4 book ai didi

php - Paypal IPN 取消成员(member)资格 PHP

转载 作者:行者123 更新时间:2023-11-29 02:53:17 25 4
gpt4 key购买 nike

因此,当用户购买成员(member)资格时,我获得的代码非常有效。但是我不确定如果用户取消时如何编码。当用户通过它们取消时,papal 会向您抛出哪些字段?

我知道我应该使用 subscr_cancelled 但不确定取消背后的正确伪代码和逻辑。

例如:

  • 用户取消时的支付状态是什么?
  • 我是否只忽略付款状态?

到目前为止,这是我的代码,它有点笨拙,因为我已经测试了很多:

if (strcmp ($res, "VERIFIED") == 0) {
// check whether the payment_status is Completed
// check that txn_id has not been previously processed
// check that receiver_email is your PayPal email
// check that payment_amount/payment_currency are correct
// process payment and mark item as paid.
// assign posted variables to local variables

$item_name = $_POST['item_name'];
$item_number = $_POST['item_number'];
$txn_type = $_POST['txn_type'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];
$id = $_POST['custom'];
$make_premium =1;
$make_loser=0;


if($payment_status=="Completed"){
$user_id_check = $mysqli->query("SELECT `username` FROM `users` WHERE `ID` ='$id'");
if($user_id_check->num_rows > 0){
$txn_id_check = $mysqli->query("SELECT `transaction_id` FROM `payment` WHERE `transaction_id`='$txn_id'");
if($txn_id_check->num_rows != 1) {
$query = "INSERT INTO `payment` (`transaction_id`, `payment_status`, `users_id`, `txn_type`) VALUES(?, ?, ?, ?)";
$statement = $mysqli->prepare($query);
$statement->bind_param('ssis',$txn_id, $payment_status, $id, $txn_type);
if($statement->execute()){
if($txn_type =="subscr_signup"){
$update_user_to_premium =("UPDATE `users` SET `is_member` =? WHERE `ID` =?");
$stmt =$mysqli->prepare($update_user_to_premium);
$stmt->bind_param('ii',$make_premium,$id);
$stmt->execute();
}
}else{
die('Error : ('. $mysqli->errno .') '. $mysqli->error);
}
$statement->close();
}
}
}
}
if($txn_id_check->num_rows == 1){
if($txn_type=="subscr_cancel"){
$update_user_to_loser =("UPDATE `users` SET `is_member` =? WHERE `ID` =?");
$stmt =$mysqli->prepare($update_user_to_loser);
$stmt->bind_param('ii',$make_loser,$id);
$stmt->execute();
}
{
if(DEBUG == true) {
error_log(date('[Y-m-d H:i e] '). "Verified IPN: $req ". PHP_EOL, 3, LOG_FILE);
}
} else if (strcmp ($res, "INVALID") == 0) {
// log for manual investigation
// Add business logic here which deals with invalid IPN messages
if(DEBUG == true) {
error_log(date('[Y-m-d H:i e] '). "Invalid IPN: $req" . PHP_EOL, 3, LOG_FILE);
}
}

我应该使用这样的东西吗

switch ($_POST['txn_type']) {   
case 'subscr_signup':
break;

case 'subscr_eot':
//subscription end of term
break;

case 'subscr_cancel':
//subscription canceled
break;

编辑:

if (strcmp ($res, "VERIFIED") == 0) {
// check whether the payment_status is Completed
// check that txn_id has not been previously processed
// check that receiver_email is your PayPal email
// check that payment_amount/payment_currency are correct
// process payment and mark item as paid.
// assign posted variables to local variables

$item_name = $_POST['item_name'];
$item_number = $_POST['item_number'];
$txn_type = $_POST['txn_type'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];
$id = $_POST['custom'];
$subscr_id = $_POST['subscr_id'];
$make_premium =1;
$make_loser=0;


if($payment_status=="Completed"){
$user_id_check = $mysqli->query("SELECT `username` FROM `users` WHERE `ID` ='$id'");
if($user_id_check->num_rows > 0){
$txn_id_check = $mysqli->query("SELECT `transaction_id` FROM `payment` WHERE `transaction_id`='$txn_id'");
if($txn_id_check->num_rows != 1) {
$query = "INSERT INTO `payment` (`transaction_id`, `payment_status`, `users_id`, `txn_type`, `subscr_id`) VALUES(?, ?, ?, ?, ?)";
$statement = $mysqli->prepare($query);
$statement->bind_param('ssiss',$txn_id, $payment_status, $id, $txn_type, $subscr_id);
if($statement->execute()){
if($txn_type =="subscr_signup"){
$update_user_to_premium =("UPDATE `users` SET `is_member` =? WHERE `ID` =?");
$stmt =$mysqli->prepare($update_user_to_premium);
$stmt->bind_param('ii',$make_premium,$id);
$stmt->execute();
}
}else{
die('Error : ('. $mysqli->errno .') '. $mysqli->error);
}
$statement->close();
}
}
}
}

if($txn_type=="subscr_cancel"){
// get user id from row with subscription id
$get_user_id = $mysqli->("SELECT `users_id` FROM `payment` WHERE `subscr_id`='$subscr_id'");
$row = $get_user_id->fetch_assoc();
$users_id = $row[`users_id`];
$update_user_to_loser =("UPDATE `users` SET `is_member` =? WHERE `ID` =?");
$stmt =$mysqli->prepare($update_user_to_loser);
$stmt->bind_param('ii',$make_loser,$users_id);
$stmt->execute();
}
{
if(DEBUG == true) {
error_log(date('[Y-m-d H:i e] '). "Verified IPN: $req ". PHP_EOL, 3, LOG_FILE);
}
} else if (strcmp ($res, "INVALID") == 0) {
// log for manual investigation
// Add business logic here which deals with invalid IPN messages
if(DEBUG == true) {
error_log(date('[Y-m-d H:i e] '). "Invalid IPN: $req" . PHP_EOL, 3, LOG_FILE);
}
}
?>

最佳答案

如果配置文件被取消,则不会发生付款。那是一种不同类型的交易。没有付款,所以没有付款状态,所以您不会在那种 IPN 中获得该参数。

您可以在沙盒中轻松测试它。您只需要创建一个卖家账户和一个买家账户,并在您的卖家账户中配置 IPN 来点击您的听众。然后从卖家账户创建一个订阅按钮,从买家账户注册,然后取消。这将触发每个步骤的 IPN,因此您可以看到预期的结果并相应地调整您的 IPN 监听器。

这是 subscr_cancel 交易的 IPN 示例。

Array
(
[amount3] => 4.99
[address_status] => confirmed
[recur_times] => 2
[subscr_date] => 15:51:33 Jan 19, 2015 PST
[payer_id] => YW66KXBKJRRES
[address_street] => 123 Test Ave
[mc_amount3] => 4.99
[charset] => windows-1252
[address_zip] => 64030
[first_name] => Tester
[reattempt] => 1
[address_country_code] => US
[address_name] => Testers, LLC
[notify_version] => 3.8
[subscr_id] => S-6YS75493RP123324L
[payer_status] => verified
[business] => sandbo_1215254764_biz@angelleye.com
[address_country] => United States
[address_city] => Grandview
[verify_sign] => AI7Wj0s667jdpY.UclGpjUpSpsZNAJzn.UcYbCVhXVG5fO05tyBo36EL
[payer_email] => drew@angelleye.com
[payer_business_name] => Testers, LLC
[last_name] => Testerson
[address_state] => MO
[receiver_email] => sandbo_1215254764_biz@angelleye.com
[recurring] => 1
[txn_type] => subscr_cancel
[item_name] => Test Subscription
[mc_currency] => USD
[item_number] => TEST-123
[residence_country] => US
[test_ipn] => 1
[period3] => 1 M
[ipn_track_id] => f0f2f2be88fd
)

关于php - Paypal IPN 取消成员(member)资格 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33307592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com