Как индивидуально вставить товары в корзину после правильного совершения платежа - Stripe? - PullRequest
5 голосов
/ 20 июня 2019

Использование PayPal платежного шлюза, где все продукты, добавленные в корзину, выпускаются посредством его формы и генерации с помощью PHP

<?php
    while ($stmt->fetch()) {
        $key = array_search($id_product, $items);
        $total = $total + $price * $qty[$key];
?>
<input name="item_number_<?php echo $num;?>" type="hidden" value="<?php echo $id_product; ?>">
<input name="item_name_<?php echo $num;?>" type="hidden" value="<?php echo $product; ?>">
<input name="amount_<?php echo $num;?>" type="hidden" value="<?php echo number_format($price,2);?>">
<input name="quantity_<?php echo $num;?>" type="hidden" value="<?php echo $qty[$key];?>">
<?php
    $num++;
    }
?>

И его возвращаемые значения:

Array
(
    [payer_email] => testing-instructor@site.com
    [payer_id] => J95XSJRX4WXVS
    [payer_status] => VERIFIED
    [first_name] => Milck
    [last_name] => Jmkc
    [address_name] => Milck Jmkc
    [address_street] => calle Vilamar� 76993- 17469
    [address_city] => Albacete
    [address_state] => Albacete
    [address_country_code] => ES
    [address_zip] => 02001
    [residence_country] => ES
    [txn_id] => 71U73747YB4505702
    [mc_currency] => EUR
    [mc_gross] => 524.00
    [protection_eligibility] => INELIGIBLE
    [payment_gross] => 524.00
    [payment_status] => Pending
    [pending_reason] => unilateral
    [payment_type] => instant
    [item_name1] => iPhone X
    [item_number1] => 1
    [quantity1] => 1
    [mc_gross_1] => 100.00
    [item_name2] => HP Notebook
    [item_number2] => 2
    [quantity2] => 1
    [mc_gross_2] => 299.00
    [item_name3] => Laptop Bag
    [item_number3] => 3
    [quantity3] => 1
    [mc_gross_3] => 125.00
    [num_cart_items] => 3
    [txn_type] => cart
    [payment_date] => 2019-06-20T12:39:01Z
    [business] => nuestrocorreo@gmail.com
    [notify_version] => UNVERSIONED
    [verify_sign] => AafExQbaKRVsBflEXz3fG2x2IuLiAsrid.bh8IJziQRbs.cEOXQNrEFI
)

И затем вставка продуктов индивидуально с вашим статусом платежа, либо завершенным, либо ожидающим, очень проста

$stmt = $mysqli->prepare("INSERT INTO orden (id_user, id_product, product, quantity, price, payment_method) VALUES (?,?,?,?,?,?)");

for($i = 1;$i <= $_POST['num_cart_items']; $i++) {
    $stmt->bind_param("iisiss",
        $id_users,
        $_POST['item_number' . $i],
        $_POST['item_name' . $i],
        $_POST['quantity' . $i],
        $_POST['mc_gross_' . $i],
        $transaccionPayPal['payment_status']
    );

    $stmt->execute();
}

Получение следующего зарегистрированного результата: introducir la descripción de la imagen aquí

Как я могу получить те же результаты, используя шлюз оплаты через полосу?

У меня уже есть следующая база:

try {
    $customer = \Stripe\Customer::create(array(
        'email' => 'customer2@example.com',
        'card'  => $token
    ));

    $charge = \Stripe\Charge::create(array(
        'customer' => $customer->id,
        'amount'   => 500,
        'description' => 'Event charge',
        'currency' => 'usd'
    ));

    $transactionData = [
        'id' => $charge->id,
        'id_customer' => $charge->customer,
        'product' => $charge->description,
        'amount' => $charge->amount,
        'currency' => $charge->currency,
        'status' => $charge->status
    ];

    $stmt = $con->prepare("INSERT INTO stripe (token_stripe, id_transaction, id_customer, product, currency, amount, status) VALUES (?,?,?,?,?,?,?)");
    $stmt->bind_param("sssssss", $token,$transactionData['id'],$transactionData['id_customer'],$transactionData['product'],$transactionData['currency'],$transactionData['amount'],$transactionData['status']);
    $stmt->execute();

    echo 'Successful transaction!';

Получение следующего зарегистрированного результата: introducir la descripción de la imagen aquí

1 Ответ

0 голосов
/ 02 июля 2019

У вас уже есть хорошее начало. Вы захотите добавить хотя бы один дополнительный вызов, чтобы убедиться, что вы получите все необходимые данные, если хотите попробовать этот подход. Я также добавил бы дополнительную Transfer_group к вашим заголовкам, о которых я расскажу позже.

try {
    $customer = \Stripe\Customer::create(array(
        'email' => 'customer2@example.com',
        'card'  => $token
    ));

    $charge = \Stripe\Charge::create(array(
        'customer' => $customer->id,
        'amount'   => 500,
        'description' => 'Event charge',
        'currency' => 'usd',
        'transfer_group' => 'Group Name'
    ));


    $transactionCall = \Stripe\BalanceTransaction::retrieve($charge-> balance_transaction);


    $transactionData = [
        'id' => $charge->id,
        'id_customer' => $charge->customer,
        'product' => $charge->description,
        'amount' => $charge->amount,
        'currency' => $charge->currency,
        'status' => $charge->status
    ];

    $stmt = $con->prepare("INSERT INTO stripe (token_stripe, id_transaction, id_customer, product, currency, amount, status, inscribedDate,) VALUES (?,?,?,?,?,?,?)");
    $stmt->bind_param("sssssss", $token,$transactionData['id'],$transactionData['id_customer'],$transactionData['product'],$transactionData['currency'],$transactionData['amount'],$transactionData['status'],  $transactionCall['created'], );
    $stmt->execute();

    echo 'Successful transaction!';

Эта конечная точка выдаст вам вписанную дату, единственную другую часть данных, которая, по-видимому, вам не хватает, на основании быстрого обзора. Информация о клиенте у вас уже есть, вам просто нужно передать ее в объект клиента.

Что касается количества, вы можете вручную отслеживать количество продукта и выполнять несколько начислений, обновляя их по мере продвижения. Выполните одну большую зарядку, отследите ее в описании и проанализируйте значение. Или вы можете установить отдельные платежи, но связать их вместе, что может быть лучше для вашего случая. Для этого вам нужно будет включить поле Transfer_group, которое я включил выше. Я коснусь этого в нижней части.

https://stripe.com/docs/api/

В целом, если вы хотите сохранить ту же настройку, вы можете просто выполнить это действие для каждого отдельного клиента и затем передать данные, как вы делаете.

Однако я бы посоветовал взглянуть на этот справочник о том, как настроить Stripe различными способами, прежде чем идти дальше.

https://stripe.com/docs/connect/charges#choosing-approach

Я бы предложил использовать метод раздельных начислений и переводов, поскольку он ориентирован на тележки для покупок, как в вашем примере. В целом, этот метод позволяет вам сделать несколько транзакций / сборов и связать их вместе с разделом Transfer_group. Если вы воспользуетесь этим подходом, вы сможете лучше отслеживать количество товаров, так как вы можете делать отдельные сборы, а также иметь возможность сделать один звонок, чтобы собрать все товары, которые в настоящее время находятся в корзине, с помощью следующего звоните

\Stripe\Charge::all(["transfer_group" => 'group_name']);

вместо того, чтобы звонить каждому.

Ваша общая архитектура в этой настройке будет заключаться в том, что вы будете платить клиенту и каждому отдельному абоненту одну и ту же группу Transfer_group, а затем сделаете один вызов вышеуказанному API, который вернет вам массив всех необходимых вам данных.

Дайте мне знать, если вам понадобится дополнительная информация, для этого был очень короткий срок, и я хотел убедиться, что сделал это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...