keziah
keziah

Reputation: 574

PHP Stripe get the transaction id after successful purchase

I'm trying to get the transaction ID after the purchase, but it returns empty on thankyou page

order.php

<?php
\Stripe\Stripe::setApiKey('<test token>');

$amount = 100;
$card = $_POST['stripeToken'];

// Create a Customer
$customer = \Stripe\Customer::create(array(
    "source" => $card,
    "email" => $email,
    "description" => "Example description")
);

// Charge the Customer instead of the card
$charge = \Stripe\Charge::create(array(
    "amount" => 100,
    "currency" => "usd",
    "customer" => $customer->id)
);

// Save the billing info
set_billing([
    'customer_id' => $customer->id,
    'address' => $address,
    'address2' => $address2,
    'city' => $city,
    'state' => $state,
    'country' => $country,
    'postal' => $postal,
    'trans_id' => $charge->id // Save the transaction id
]);

function set_billing($fields = array())
{
    $bdate = time();

    $query = "INSERT INTO billings (
        customer_id, address, address2, city,
        state, postal, country, billing_date, trans_id
    ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";

    $stmt = $GLOBALS['sqlConnection']->prepare($query);
    $stmt->bind_param(
        'sssssssis', $fields['customer_id'], $fields['address'], $fields['address2'], $fields['city'], $fields['state'], $fields['postal'], $fields['country'], $bdate, $fields['trans_id']);
    $stmt->execute();
}

// If successful, redirect to thank you page
header('Location: /thankyou.php?id=' . $user_id);
exit;

thankyou.php

<?php
$s = $sql->prepare('SELECT trans_id FROM billings WHERE user_id = ?');
$s->bind_param('i', $_GET['id']);
$s->execute();
$s->bind_result($trans_id);
$s->fetch();
?>

<ul>
    <li>Transaction id: <?php echo $trans_id ?></li>
</ul>

Is there any problem with my code?

Upvotes: 3

Views: 13610

Answers (2)

Nehal
Nehal

Reputation: 1523

When you are charging the customer using this

$charge = \Stripe\Charge::create(array(
    "amount" => 100,
    "currency" => "usd",
    "customer" => $customer->id)
);

Also try print_r($charge); // to check the output variables

You'll get its response as $charge->id this is nothing but the transaction id, insert this transaction id in your database for future use. And then apply your further code.

And then in thankyou.php fetch the value that you have inserted

Upvotes: 9

Amit Kumar
Amit Kumar

Reputation: 477

You can directly use $charge->id

Update your line in order.php

// If successful, redirect to thank you page
header('Location: /thankyou.php?id=' . $charge->id );

Update your code in thankyou.php

<ul>
    <li>Transaction id: <?php echo $_GET['id'] ?></li>
</ul>

Upvotes: 2

Related Questions