首页 > 解决方案 > 错误:根据印度法规,出口交易需要客户姓名和地址

问题描述

我正在由 Stephen Grider 开设关于 Full Stack React(React、Redux、MongoDB、Node)的 Udemy 课程。我在为付款处理添加 Stripe 结账时遇到了问题。

问题:点击“添加积分”按钮后,信用卡表格出现了。我输入详细信息并提交详细信息。Stripe 向我发送一个令牌,我将该令牌发送到 'api/stripe' 路由,在那里我完成了收费,向用户模型添加 5 个积分并将更新的用户文档返回到前端。但是,我无法让用户回来。有一个错误显示:错误:根据印度法规,出口交易需要客户姓名和地址。我附上了完整错误消息的图片。

如何修复错误?请注意,我在前端使用 react-stripe-checkout 包,在后端使用 stripe 包,并使用 Redux Toolkit 进行状态管理。所有必要的代码示例如下。

Payments.js
import React from "react";
import StripeCheckout from "react-stripe-checkout";
import { Button } from "react-bootstrap";
import { handleToken } from "./tokenSlice";
import { useDispatch } from "react-redux";

const Payments = () => {
  const dispatch = useDispatch();
  return (
    <StripeCheckout
      name="Emaily"
      description="$5 for 5 email credits"
      amount={500}
      token={(token) => dispatch(handleToken(token))}
      stripeKey={process.env.REACT_APP_STRIPE_KEY}
    >
      <Button variant="outline-warning">Add Credits</Button>
    </StripeCheckout>
  );
};

export default Payments;
billingRoutes.js
const express = require("express");
const keys = require("../config/keys");
const stripe = require("stripe")(keys.stripeSecretKey);

const router = express.Router();

router.post("/", async (req, res) => {
  const charge = await stripe.charges.create({
    amount: 500,
    currency: "usd",
    description: "$5 for 5 credits",
    source: req.body.id,
  });
  req.user.credits += 5;
  const user = await req.user.save();
  res.send(user);
});

module.exports = router;
tokenSlice.js
import { createSlice, createAsyncThunk } from "@reduxjs/toolkit";
import axios from "axios";

const initialState = {
  status: "idle",
};

export const handleToken = createAsyncThunk(
  "token/handleToken",
  async (token) => {
    const { data } = await axios.post("/api/stripe", token);
    return data;
  }
);

const tokenSlice = createSlice({
  name: "token",
  initialState,
  reducers: {},
  extraReducers: {
    [handleToken.pending]: (state, action) => {
      state.status = "loading";
    },
    [handleToken.fulfilled]: (state, action) => {
      state.status = "succeeded";
      state.userInfo = action.payload;
    },
  },
});

export default tokenSlice.reducer;

在此处输入图像描述

标签: stripe-paymentsreact-fullstack

解决方案


将货币更改为 inr。

非 inr 交易应以美元(美元)为单位,而 inr 交易应以 inr(印度卢比)为单位。


推荐阅读