Не могу сказать, работает ли IPN, потому что не пишет в sqlDatabase - PullRequest
0 голосов
/ 10 апреля 2019

Я не могу сказать, работает ли он, поскольку у них нет журнала или способа увидеть ошибку, поскольку сервер обрабатывает все это, и я очень плохо знаком с этими языками. Насколько я могу сказать, песочница PayPal отправляет IPN, но я не уверен, что работает после этого, все, что я знаю, это то, что он не отображается в базе данных. Я знаю пароль, и все настроено правильно и база данных настроена. Я также следую этому уроку здесь, если это поможет https://www.evoluted.net/thinktank/web-development/paypal-php-integration Я просто noob к php, чтобы следовать ему правильно.

вот сценарий, который отправляет и получает ipn

<?php
// For test payments we want to enable the sandbox mode. If you want to put live
// payments through then this setting needs changing to `false`.
$enableSandbox = true;
// Database settings. Change these for your database configuration.

$dbConfig = [
    'host' => 'sql106.epizy.com',
    'username' => 'hidden',
    'password' => 'hidden',
    'name' => 'epiz_23648301_rod'
];
// PayPal settings. Change these to your account details and the relevant URLs
// for your site.
$paypalConfig = [
    'email' => 'hidden@gmail.com',
    'return_url' => 'http://rod.rf.gd/payment-successful.php',
    'cancel_url' => 'http://rod.rf.gd/payment-cancelled.php',
    'notify_url' => 'http://rod.rf.gd/payments.php'
];
$paypalUrl = $enableSandbox ? 'https://www.sandbox.paypal.com/cgi-bin/webscr' : 'https://www.paypal.com/cgi-bin/webscr';
// Product being purchased.
$itemName = 'Token';
$itemAmount = 1;
// Include Functions
require 'functions.php';
// Check if paypal request or response
if (!isset($_POST["txn_id"]) && !isset($_POST["txn_type"])) {
    // Grab the post data so that we can set up the query string for PayPal.
    // Ideally we'd use a whitelist here to check nothing is being injected into
    // our post data.
    $data = [];
    foreach ($_POST as $key => $value) {
        $data[$key] = stripslashes($value);
    }
    // Set the PayPal account.
    $data['business'] = $paypalConfig['email'];
    // Set the PayPal return addresses.
    $data['return'] = stripslashes($paypalConfig['return_url']);
    $data['cancel_return'] = stripslashes($paypalConfig['cancel_url']);
    $data['notify_url'] = stripslashes($paypalConfig['notify_url']);
    // Set the details about the product being purchased, including the amount
    // and currency so that these aren't overridden by the form data.
    $data['item_name'] = $itemName;
    $data['amount'] = $itemAmount;
    $data['currency_code'] = 'USD';
    // Add any custom fields for the query string.
    //$data['custom'] = USERID;
    // Build the query string from the data.
    $queryString = http_build_query($data);
    // Redirect to paypal IPN
    header('location:' . $paypalUrl . '?' . $queryString);
    exit();
} else {



    // Handle the PayPal response.
    // Create a connection to the database.
    $db = new mysqli($dbConfig['host'], $dbConfig['username'], $dbConfig['password'], $dbConfig['name']);
    // Assign posted variables to local data array.
    $data = [
        'item_name' => $_POST['item_name'],
        'item_number' => $_POST['item_number'],
        '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'],
        'custom' => $_POST['custom'],
    ];
    // We need to verify the transaction comes from PayPal and check we've not
    // already processed the transaction before adding the payment to our
    // database.
    if (verifyTransaction($_POST) && checkTxnid($data['txn_id'])) {
        if (addPayment($data) !== false) {
            // Payment successfully added.
        }
    }
}

вот функция addPayment

function addPayment($data) {
    global $db;
    if (is_array($data)) {
        $stmt = $db->prepare('INSERT INTO `payments` (txnid, payment_amount, payment_status, itemid, createdtime) VALUES(?, ?, ?, ?, ?)');
        $stmt->bind_param(
            'sdsss',
            $data['txn_id'],
            $data['payment_amount'],
            $data['payment_status'],
            $data['item_number'],
            date('Y-m-d H:i:s')
        );
        $stmt->execute();
        $stmt->close();
        return $db->insert_id;
    }
    return false;
}
...