Android中的Stripe集成,之后该怎么办?

Posted

技术标签:

【中文标题】Android中的Stripe集成,之后该怎么办?【英文标题】:Stripe Integration in Android, what to do after? 【发布时间】: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 安全性?

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

谢谢你,加埃塔诺

【问题讨论】:

【参考方案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,请也检查这个问题。 (***.com/questions/39911456/…) 如果您愿意,您也可以使用第三方工具示例 - zapier.com/zapbook/firebase/stripe

以上是关于Android中的Stripe集成,之后该怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 中的 Stripe 集成 - 您没有提供 API 密钥?

如何将 Stripe 支付网关与 Django Oscar 集成?

iOS App Stripe 在服务器端与 PHP 集成

反应原生问题中的条带集成

用于条带集成的 Firebase 计划付款

在集成 pod 文件之前放置在桥接头中的第 3 方代码该怎么办