为了账号安全,请及时绑定邮箱和手机立即绑定

一旦商品缺货,如何使用 PayPal 智能按钮显示售完消息

一旦商品缺货,如何使用 PayPal 智能按钮显示售完消息

PHP
隔江千里 2023-08-11 16:01:42
我目前正在为我的网站开发商店。我使用 PayPal Smart 按钮进行付款。我想知道如何添加库存数量,以便当库存数量为 0 时,无法购买。我在互联网上到处搜索,但找不到我的问题的任何答案。这是我当前的代码:    paypal.Buttons({    style: {        shape: 'rect',        color: 'blue',        layout: 'vertical',        label: 'paypal',        locale: 'en_CY'    },    createOrder: function(data, actions) {        return actions.order.create({            purchase_units: [{                amount: {                    value: ". $row['paypal_price'] .",                    currency: 'EUR'                }            }]        });    },    onApprove: function(data, actions) {        return actions.order.capture().then(function(details) {            localStorage.clear();            window.location.href = 'http://localhost/website/thankyou.php';            //alert('Transaction completed by ' + details.payer.name.given_name + '!');            $stock = 0;        });    }}).render('#paypal-button-container');先感谢您!
查看完整描述

2 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

您的问题更多是关于“如何更新当前库存”和“如何获取当前库存”


Javascript 在客户端运行,由于您在客户端没有当前的库存编号,因此您需要使 Javascript 与您的服务器进行通信。


一种方法是通过 ajax。您可以使用fetch-api来完成此操作。


这是你必须做的:


在显示按钮之前(php 代码):


<?php

    // your code ...

    // check stock before you echo. Only echo when $stock is > 0

    

    $stock = /* get current stock-amount */;


    if ($stock > 0) {

        echo "paypal.Buttons([...";

    }

确认付款后更新您的库存:


// your current code

localStorage.clear();

window.location.href = 'http://localhost/website/thankyou.php';

// alert('Transaction completed by ' + details.payer.name.given_name + '!');

// $stock = 0;


// add something like this

const formData = new FormData();

formData.append('amountOrdered', /* number as string */);


// maybe use await to block further processing until stock has been updated

fetch('update_stock.php', {

     method: 'POST',

     body: formData

});

在你的新update_stock.php:


<?php

    // update your stock-source by reducing it by $_POST['amountOrdered']

您需要的最后一步是在创建订单 (JS) 之前检查您的库存:


// async here needed so you can use await

createOrder: async function(data, actions) {

    // check stock here

    let stock = (await fetch('get_current_stock.php')).json();

    let currentStock = stock['current'];


    // you may want to check for amoutTryingToOrder instead of 1

    if (currentStock < 1) {

        alert('Out of stock, sorry :(');

        return false;

    }


    return actions.order.create({

在你的get_current_stock.php:


<?php

    header('Content-Type: application/json');


    $currentStock = /* get current stock */;

    

    echo json_encode([

        'current' => $currentStock

    ]);


查看完整回答
反对 回复 2023-08-11
?
catspeake

TA贡献1111条经验 获得超0个赞

当没有库存时,您的 createOrder 函数可能会返回 false,而不是继续执行 actions.order.create



查看完整回答
反对 回复 2023-08-11
  • 2 回答
  • 0 关注
  • 124 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号