正确付款后,如何分别插入购物车中的商品-条纹?

Ott*_*tto 5 php mysqli payment-gateway stripe-payments

使用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++;
    }
?>
Run Code Online (Sandbox Code Playgroud)

及其值的返回:

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
)
Run Code Online (Sandbox Code Playgroud)

然后很容易地将产品分别插入您的付款状态为已完成或待处理的产品中

$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();
}
Run Code Online (Sandbox Code Playgroud)

获得以下注册结果: 图像描述入门

使用条纹支付网关如何获得这些相同的结果?

我已经有以下基础:

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!';
Run Code Online (Sandbox Code Playgroud)

获得以下注册结果: 图像描述入门

Luc*_*ren 0

你已经有了一个好的开始。如果您想尝试这种方法,您将需要添加至少一个额外的调用,以确保获得所需的所有数据。我还会在您的费用标题中添加一个额外的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!';
Run Code Online (Sandbox Code Playgroud)

该端点将为您提供记载的日期,根据快速查看,这是您似乎缺少的唯一其他数据。您已经拥有的客户信息,只需将其传递到客户对象中即可。

至于数量,您可以手动跟踪产品的数量并执行多次收费,并随时更新。执行一次大的充电并在描述中跟踪它并解析出值。或者,您可以设置单独的费用,但将它们链接在一起,这可能最适合您的情况。为此,您需要包含我在上面包含的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']);
Run Code Online (Sandbox Code Playgroud)

而不必为每个人都打电话。

此设置中的整体架构将让客户和每个人使用相同的transfer_group 进行收费,然后对上述 api 进行一次调用,这将返回您需要的所有数据的数组。