Sami
Sami

Reputation: 181

Must provide source or customer stripe live mode

this is my first time using stripe and I am getting an error Must provide source or customer. once I went live. In the test mode I used "tok_mastercard" as my source but clearly when I went live it isn't valid. What am I missing here please help.

This is my POST request in the backend

  stripe.charges
    .create({
      amount: req.renter.rent * 100,
      currency: "usd",
      source: req.body.token,
      application_fee_amount: req.renter.rent * 0.05 * 100,
      transfer_data: {
        //the destination needs to not be hard coded it needs to
        //come from what property the renter is in
        destination: req.renter.stripeConnectId,
        // destination: "acct_1GOCMqDfw1BzXvj0",
      },
    })
    .then((charge) => {
      console.log(req.renter);
      res.send(charge);
    })
    .catch((err) => {
      console.log(err);
    });
});

this is my two functions in the frontend using react-native and node

  handleCardPayPress = async () => {
    try {
      this.setState({ loading: true, token: null });
      const token = await stripe.paymentRequestWithCardForm({
        // Only iOS support this options
        smsAutofillDisabled: true,
        requiredBillingAddressFields: "full",
        prefilledInformation: {
          billingAddress: {
            name: "",
            line1: "",
            line2: "",
            city: "",
            state: "",
            country: "US",
            postalCode: "",
            email: "",
          },
        },
      });

      this.setState({ loading: false, token });
    } catch (error) {
      this.setState({ loading: false });
    }
  };

  makePayment = async () => {
    try {
      //Mate the payment
      const response = await unitApi.post("/payments", {
        data: {
          amount: this.state.renter.rent,
          currency: "usd",
          token: this.state.token,
        },
      });
      Alert.alert("Success!", `Confirmation ID: ${response.data.id}`, [
        { text: "Done" },
      ]);
      console.log(response.data);
      // navigate("Home");
    } catch (err) {
      //failiur and showing the error message
      console.log(err);
      Alert.alert("Failed!", "Card declined.", [{ text: "Declined" }]);
    }
  };

Upvotes: 0

Views: 146

Answers (1)

floatingLomas
floatingLomas

Reputation: 8727

Odds are pretty good that this.state.token doesn't contain what you think it does in the unitApi.post() function call; I'd recommend logging that and seeing if that helps, and also logging req.body.token server-side.

Upvotes: 1

Related Questions