【问题标题】:Stripe Integration in Android, what to do after?Android中的Stripe集成,之后该怎么办?
【发布时间】:2017-07-04 09:13:34
【问题描述】:

我正在使用 Stripe 开发一种信用卡支付方式。创建 Token 后(我已经完成了),我不知道如何继续。

官方文档说:

使用令牌

使用支付令牌,无论它是如何获得的,都需要使用您的 API 密钥从您的服务器调用 API。 (为了安全起见,你永远不应该在你的应用程序中嵌入你的秘密 API 密钥。) 在您的服务器上设置一个可以接收令牌的 HTTP POST 调用的端点。在 onActivityResult 方法(适用于 Android Pay)或 onSuccess 回调(使用您自己的表单时)中,您需要将提供的令牌发布到您的服务器。确保与您的服务器的任何通信都是 SSL 安全的,以防止窃听。 查看完整的示例应用程序以了解所有内容。

我的代码是:

public class FragmentThree extends Fragment {

    private static final String TAG = "FragmentThree";
    //Stripe
    private Card card;

    private TextView mResponse;
    private Button mPaymentBtn;
    private ProgressBar mProgressBar;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_three, container, false);

        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        setRetainInstance(true);

        mResponse = (TextView) getActivity().findViewById(R.id.response);
        mPaymentBtn = (Button) getActivity().findViewById(R.id.paymentBtn);
        mProgressBar = (ProgressBar)getActivity().findViewById(R.id.progressBar);

        mPaymentBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                mProgressBar.setVisibility(View.VISIBLE);
                if(isNetworkAvailable()){

                    String cardNumber = "4242-4242-4242-4242";
                    int cardExpMonth = 12;
                    int cardExpYear = 2018;
                    String cardCVC = "123";

                    card = new Card( //We create a new Card
                            cardNumber,
                            cardExpMonth,
                            cardExpYear,
                            cardCVC
                    );

                    if (!card.validateCard()){ //The card is not a valid one

                        mProgressBar.setVisibility(View.GONE);
                        Toast.makeText(getActivity(), R.string.Not_Valid_Card, Toast.LENGTH_SHORT).show();
                    }else{

                        Stripe stripe = null;

                        try {

                            //TODO Change with LIVE KEY
                            stripe = new Stripe("pk_test_wt0efdvgYxds7CywHYKCqnhX");

                        } catch (AuthenticationException e) {

                            mProgressBar.setVisibility(View.GONE);
                            Toast.makeText(getActivity(),
                                    R.string.Merchant_Does_Not_Exist, Toast.LENGTH_SHORT).show();

                        }

                        if(stripe != null){

                            stripe.createToken(
                                    card,
                                    new TokenCallback() {
                                        public void onSuccess(Token token) {
                                            // Send token to your server

                                            Log.d(TAG, "The token number is: " + token.getId());
                                            mProgressBar.setVisibility(View.GONE);
                                        }
                                        public void onError(Exception error) {
                                            // Show localized error message
                                            Toast.makeText(getActivity(),
                                                    error.getLocalizedMessage(), Toast.LENGTH_LONG).show();

                                            mProgressBar.setVisibility(View.GONE);
                                        }
                                    }
                            );
                        }


                    }
                }else{

                    mProgressBar.setVisibility(View.GONE);
                    Toast.makeText(getActivity(),
                            R.string.No_Internet_Connection, Toast.LENGTH_SHORT).show();
                }
            }
        });


    }

    private boolean isNetworkAvailable() {
        ConnectivityManager connectivityManager
                = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }
}

如何让服务器(我不拥有)知道我的令牌?之后该怎么办?如何从服务器或 Firebase 进行 API 调用? 我可以使用 Firebase:我必须使用它吗?我必须在那里实施什么?

服务器端,对我来说是个问题。

有人可以给我写一个逐步实现的方法,以便我知道如何处理令牌以及接下来我可以做什么?

以及如何确定 SSL 安全性?

很抱歉我的问题,但我以前从未这样做过。

谢谢你,加埃塔诺

【问题讨论】:

    标签: android firebase stripe-payments credit-card


    【解决方案1】:

    您需要在onActivityResult 函数中将该令牌发布到服务器:https://stripe.com/docs/mobile/android#using-tokens

    您肯定需要一个服务器端应用程序(或第三方集成)来创建费用;据我所知,你不能用 Firebase 做到这一点。 https://stripe.com/docs/charges

    【讨论】:

      【解决方案2】:

      您需要一个中间服务器。我已经用 node.js 以 7 美元/月的价格完成了与 Heroku 的 Stripe 集成

      【讨论】:

        【解决方案3】:

        您不能在客户端进行条带 api 支付。您需要使用一种方法创建一个服务来处理条带支付。然后将您从令牌创建中获得的令牌传递给该服务。

        您的客户端代码 -

        stripe.createToken(
           card,
           new TokenCallback() {
           public void onSuccess(Token token) {
           // Send token to your server
        

        示例(节点js服务方法):-

        // Set your secret key: remember to change this to your live secret key in production
            // See your keys here: https://dashboard.stripe.com/account/apikeys
            var stripe = require("stripe")("your private key");
        
            // Token is created using Stripe.js or Checkout!
            // Get the payment token submitted by the form:
            var token = request.body.stripeToken; // Using Express
        
            // Charge the user's card:
            var charge = stripe.charges.create({
              amount: 1000,
              currency: "usd",
              description: "Example charge",
              source: token,
            }, function(err, charge) {
              // asynchronously called
            });
        

        【讨论】:

        • 是否可以使用 node.js 以某种方式向 Firebase 发送令牌?真的很感谢你的回答
        • 根据您的代码,您将收到“TokenCallback()”方法的条带令牌。然后向您的服务发出 curl 请求以进行付款。如果是 Firebase,请也检查这个问题。 (stackoverflow.com/questions/39911456/…)
        • 如果您愿意,您也可以使用第三方工具示例 - zapier.com/zapbook/firebase/stripe
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-30
        • 1970-01-01
        • 2017-03-03
        • 1970-01-01
        • 1970-01-01
        • 2017-05-20
        • 2011-06-01
        相关资源
        最近更新 更多