php - 用于 wordpress 的简单 php paypal ipn

标签 php wordpress paypal

这是我第一次尝试将 paypal 集成到 wordpress 网站中 - 所以我可能需要一些帮助。我正在为客户构建一个自定义插件,管理员可以在其中为事件创建预订表格并将其分配给用户。然后用户可以登录并查看分配给他们的预订表格并填写。填写完成后,用户即可支付预订费用。

假设用户已经填写了他们的预订表格,现在准备为他们的预订付款,他们点击“付款”并被带到付款页面 (www.yoursite.com/deposit/?booking-id= xxx) 本质上只是一条消息、一个支付按钮和隐藏的 paypal 表单字段。这是该页面的 php:

<?php

$paypal_url='https://www.sandbox.paypal.com/cgi-bin'; // 
$paypal_id='malik@thedistractionsband.co.uk'; // Business email ID
$booking_form_id = get_query_var( 'booking-id' );
$current_user = wp_get_current_user();
?>

<?php
// The Query
$bookings_query = new WP_Query( 
array( 
    'post_type' => 'bookings',
    'p' => $booking_form_id
) 
);

// The Loop
if ( $bookings_query->have_posts() ) {
while ( $bookings_query->have_posts() ) {
    $bookings_query->the_post();

    ?>
<h2>Pay Deposit</h2>
<p>Hello <?php echo $current_user->display_name; ?> blah blah blah</p>      

// Paypal form
<form action="<?php echo $paypal_url; ?>" method="post" name="frmPayPal1">

<?php
    $total_amount = get_post_meta( $bookings_query->post->ID, 'wedding_price', true );
    $deposit_amount = $total_amount*0.2;
?>

<input type="hidden" name="business" value="<?php echo $paypal_id; ?>">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="item_name" value="<?php echo get_post_meta( $bookings_query->post->ID, 'wedding_name', true ); ?> - 20% Deposit">
<input type="hidden" name="item_number" value="DISTR<?php echo $booking_form_id; ?>">
<input type="hidden" name="credits" value="510">
<input type="hidden" name="userid" value="<?php echo $current_user->ID; ?>">
<input type="hidden" name="amount" value="<?php echo $deposit_amount; ?>">
<input type="hidden" name="cpp_header_image" value="http://www.thedistractionsband.co.uk/files/2015/08/LOGO-1.1-1024x304.png">
<input type="hidden" name="no_shipping" value="1">
<input type="hidden" name="currency_code" value="GBP">
<input type="hidden" name="handling" value="0">
<input type="hidden" name="cancel_return" value="<?php echo get_site_url()."/payment-cancel/"; ?>">
<input type="hidden" name="return" value="<?php echo get_site_url()."/my-bookings/"; ?>"> 
<input name="notify_url" value="<?php echo DISTRACTIONS_LOGIN_PLUGIN_URL ?>includes/payments/paypal-ipn.php" type="hidden">

<input type="submit" border="0" name="submit" value="Pay Now" alt="PayPal - The safer, easier way to pay online!">

<div class="cards"><i class="fa fa-cc-amex"></i> <i class="fa fa-cc-mastercard"></i> <i class="fa fa-cc-visa"></i> <i class="fa fa-credit-card"></i> <i class="fa fa-cc-paypal"></i></div>
</form>


<?php    
}
/* Restore original Post Data */
wp_reset_postdata();
} else {
echo '<p>No bookings found</p>';
}
?>

这一切都很好,实际上付款也很顺利。我现在正在尝试处理 paypal-ipn.php 文件,我想在该文件中创建与 paypal 的通信,并在付款成功时向 post_meta 数据库表添加一个条目。

到目前为止我没有太多,但这是我的 paypal-ipn.php

<?php
global $wpdb;
update_post_meta(52, 'deposit_paid', 1);
?>

我希望这会将 deposit_paid 更新为“1”(对于 post_id 52 - 我将动态更改为已支付的预订......一旦我开始工作)。

目前它什么都不做,我是不是做错了什么?

最佳答案

这里有几个选项 - 最简单的(因为它只是一个 php 页面)是添加以下内容:

// Make wordpress functions available - so we can write to the db etc
require_once realpath('/wp-load.php');

wp-load.php 文件的正确相对路径(它在 WordPress 的根目录中)。

您需要它来启用功能并获取 update_post_meta();工作等...

开发时你应该:

define('WP_DEBUG', true);

在您的 wp-config.php 中设置,因为这会提醒您出现问题。

选项 #2 是创建一个函数,并在用户提交表单时将其挂接到 WordPress Hook 中。这更复杂,我觉得不是你想要的。

关于php - 用于 wordpress 的简单 php paypal ipn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34020911/

相关文章:

php - 我的语法有什么问题? (PHP/HTML)

php - 调整图像大小而不保存

php - 在默认 Mac OS X Leopard 捆绑 PHP 配置上安装/启用 PHP Pecl Intl 扩展

html - 更改为 block 并添加 &nbsp 后 Wordpress 跨度宽度不变

php - WooCommerce 预订 : Echo booking time and date in confirmation email

facebook - 来自 Facebook 的网站 Paypal 按钮

php - 查询中的Mysql查询

html - 创建与现有网站不同的移动外观?

html - 将下拉菜单与 'A3' 参数的 PayPal 订阅一起使用

ruby-on-rails - PayPal-Ruby-SDK 模型名称冲突