出口交易需要客户姓名和地址 - Stripe Issue

问题描述 投票:0回答:1

我正在将 stripe 与带有订单控制器的 NodeJs 集成,当在前端调用此 API 时,我可以进入 stripe 结帐页面,但得到

错误:根据印度法规,出口交易需要客户名称和地址。更多信息在这里:https://stripe.com/docs/india-exports

const STRIPE = new Stripe(process.env.STRIPE_API_KEY as string);

type CheckoutSessionRequest = {
  cartItems: {
    menuItemId: string;
    name: string;
    quantity: string;
  }[];
  deliveryDetails: {
    email: string;
    name: string;
    address: string;
    city: string;
  };
  restaurantId: string;
};

const createCheckoutSession = async (req: Request, res: Response) => {
  try {
    const checkoutSessionRequest: CheckoutSessionRequest = req.body;

    const restaurant = await Restaurant.findById(checkoutSessionRequest.restaurantId);
    if (!restaurant) {
      throw new Error("Restaurant not found");
    }

    const lineItem = createLineItem(
      checkoutSessionRequest,
      restaurant.menuItems
    );

    const session = await createSession(
      lineItem,
      "TEST_ORDER_ID",
      restaurant.deliveryPrice,
      restaurant._id.toString()
    );

    if (!session.url) {
      return res.status(500).json({ message: "Error creating stripe session" });
    }

    return res.json({ url: session.url }); // Return the session URL

  } catch (error: any) {
    console.log(error);
    res.status(500).json({ message: error.raw.message });
  }
};

const createLineItem = (
  checkoutSessionRequest: CheckoutSessionRequest,
  menuItems: menuItemTypes[]
) => {
  const lineItem = checkoutSessionRequest.cartItems.map((cartItem) => {
    const menuItem = menuItems.find(
      (item) => item._id.toString() === cartItem.menuItemId.toString()
    );

    if (!menuItem) {
      throw new Error(`Menu item not found: ${cartItem.menuItemId}`);
    }

    const line_item: Stripe.Checkout.SessionCreateParams.LineItem = {
      price_data: {
        currency: "inr",
        unit_amount: menuItem.price,
        product_data: {
          name: menuItem.name,
        },
      },
      quantity: parseInt(cartItem.quantity),
    };

    return line_item;
  });
  return lineItem;
};

const createSession = async (
  lineItem: Stripe.Checkout.SessionCreateParams.LineItem[],
  orderId: string,
  deliveryPrice: number,
  restaurantId: string
) => {
  const sessionData = await STRIPE.checkout.sessions.create({
    line_items: lineItem,
    shipping_options: [
      {
        shipping_rate_data: {
          display_name: "Delivery",
          type: "fixed_amount",
          fixed_amount: {
            amount: deliveryPrice,
            currency: "inr",
          },
        },
      },
    ],
    mode: "payment",
    metadata: {
      orderId,
      restaurantId,
    },
    success_url: `${FRONTEND_URL}/order-status?success=true`,
    cancel_url: `${FRONTEND_URL}/restaurant/${restaurantId}?cancelled=true`,
  });
  return sessionData;
};

OnCheckout 函数(我传递所有数据的地方):

const onCheckout = async (userFormData: UserFormData) => {
    if (!restaurant) {
      return;
    }

    const checkoutData = {
      cartItems: cartItems.map((cartItem) => ({
        menuItemId: cartItem._id,
        name: cartItem.name,
        quantity: cartItem.quantity.toString(),
      })),
      restaurantId: restaurant._id,
      deliveryDetails: {
        name: userFormData.name,
        addressLine1: userFormData.address,
        city: userFormData.city,
        country: userFormData.country,
        email: userFormData.email as string,
      },
    };

    const data = await createCheckoutSession(checkoutData);
    window.location.href = data.url;
  };

我需要帮助,如何解决此错误。

reactjs node.js deployment stripe-payments mern
1个回答
0
投票

我的问题已解决,我的出口需要姓名和地址错误,因为我使用了错误的测试卡号(美国),当我使用印度卡号时,付款很容易完成。

如果您遇到此类问题,请检查您所在国家/地区的测试卡号:https://docs.stripe.com/testing#international-cards

© www.soinside.com 2019 - 2024. All rights reserved.