我正在学习 Stephen Grider 教授的关于全栈 React(React、Redux、MongoDB、Node)的 Udemy 课程。我在添加 Stripe checkout 进行付款处理时遇到了问题。
问题:单击“添加积分”按钮后,会显示信用卡表格。我输入详细信息并提交详细信息。 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;
将货币更改为印度卢比。
非inr交易应以美元(美元)为单位,inr交易应以inr(印度卢比)为单位。
您没有将所有必需的信息传递给 Stripe。目前,您传递给 Stripe 的费用对象包括金额、货币和描述,但您还需要根据 Stripe 对印度出口费用的要求提供客户的姓名和账单地址,详细信息请参见:
找到解决方案:使用印度测试卡
我意识到问题中提供的代码没有问题。主要问题在于用于测试目的的卡。
为了以印度卢比进行测试,建议使用以下印度测试签证卡:
印度测试签证卡:4000 0035 6000 0008
我有类似的问题并且正在使用 django。使用信用卡号=4000 0035 6000 0008。(请勿使用信用卡号= 4242 4242 4242 4242)。