当前位置: 首页 > 知识库问答 >
问题:

将paypal捕获和自定义订单保存到数据库

梁烨
2023-03-14

Im试图用支付属性payment._id保存订单,但无法在创建路由中获取捕获id。是否有一种方法通过贝宝传递一些id然后在捕获中获取该id?并且这是一个好主意,以节省订单和支付在捕获路线?

支付模型存储paypal捕获

js prettyprint-override">
router.post("/order/create", async (req, res) => {
  const { items, payment_method, price } = req.body;

  try {
    //Document just for validation that doesn't save
    const newOrder = new Order({
      items,
      payment_method,
      price,
    });

    const validationError = await newOrder.validate();
    if (validationError !== undefined) throw Error("Validation Failed");

    let request = new paypalSDK.orders.OrdersCreateRequest();

    const body = {
      intent: "CAPTURE",
      purchase_units: [
        {
          items: paypalItems(newOrder.items),
          amount: {
            currency_code: "USD",
            value: newOrder.price,
            breakdown: {
              item_total: {
                currency_code: "USD",
                value: newOrder.price,
              },
            },
          },
        },
      ]
    };

    request.prefer("return=representation");
    request.requestBody(body);

    const order = await client.execute(request);

    res.status(200).json({
      orderID: order.result.id,
    });
  } catch (e) {
    console.error(e);
    res.status(500);
  }
});

router.post("/order/capture", async (req, res) => {
  const { items, payment_method, price } = req.body;

  const orderID = req.body.orderID;

  const request = new paypalSDK.orders.OrdersCaptureRequest(orderID);
  request.requestBody({});

  try {
    const capture = await client.execute(request);
    const captureID = capture.result.purchase_units[0].payments.captures[0].id;

    const newPayment = new Payment(capture.result);
    const savedPayment = await newPayment.save();

    const newOrder = new Order({
      items,
      payment_method,
      price,
      payment: savedPayment._id,
    });
    await newOrder.save();
  } catch (err) {
    console.error(err);
    return res.sendStatus(500);
  }
  res.status(200).json({});
});

共有1个答案

满俊楠
2023-03-14

在订单创建请求体的purchase_units[0]中,可以包含唯一的*invoice_id(对付款方可见)或任意的custom_id(仅对接收方可见)。

*发票ID以前不应用于成功捕获的付款,否则这将导致默认配置中的重复发票ID错误(以防止意外重复支付同一件物品)

当您成功捕获订单时,PayPal交易ID将位于purchase_units[0].payments.captures[0].ID。将此存储在数据库中以备将来参考。

 类似资料:
  • 我遵循以下示例(https://developer.PayPal.com/docs/checkout/reference/server-integration/set-up-transaction/#on-the-server),以使PayPal在服务器上工作。 我的问题是,有可能同时创建秩序、授权和捕获吗? 谢谢

  • 是否有可能自动捕获一个订单,而不需要任何额外的捕获请求?因为当我使用贝宝按钮,它自动工作,我想有相同的结果使用REST API。

  • 我们在这里按照Remi Corson的指南为变体产品设置了一个自定义域 此时,当用户选择变体时,我们能够在单个产品页面中显示自定义文本字段,但这在购买过程中是不够的,因为我们需要: A)在购物车和结帐中显示此文本 B)保存此信息,以便在“感谢”页面、“电子邮件”和“管理订单编辑”页面中显示此信息 类似于在WooCommerce订单和电子邮件上保存和显示产品自定义元,但使用的是产品变体而不是简单的产

  • 在Woocommerce 3应答代码中使用将自定义产品元数据传递到订单,当从后端手动创建订单时,从后端手动添加产品时,是否可以保存和显示自定义元数据? 这是我的代码(略有改动): 当客户机从前端创建订单时,这种方法可以正常工作。但是,当管理员从后端手动创建订单并添加产品时,自定义元数据不可见。 对于手动创建的订单,如何解决此问题,允许添加产品自定义字段作为自定义订单项目数据?

  • 我试图捕获一个贝宝交易,已经授权使用贝宝按钮。我正在尝试使用CyberSource Simple Order API来做这件事。我只有3条信息似乎是从PayPal按钮返回的:、和。我尝试了几种方法来将其传递给简单的Order API,但总是得到一个102代码,在响应中包含消息。CyberSource的日志系统指出这是因为。 我是否需要通过CyberSource进行整个交易-授权和捕获?或者是什么方

  • 在该商业商店订购特定产品时,将向订单添加两个元值。 存储元值的两个字段位于 元键是: 我希望在下新订单时以编程方式创建一个新的自定义字段,并将此新字段的值设置为,前提是已订购的产品存在元键assemblycost。 经过一些研究,我发现是一个钩子,在订单保存到数据库并更新元数据后执行。所以这似乎是我应该使用的钩子。 参考:为Woocommerce中的订单添加额外的元数据: 我尝试在函数中添加以下代