当前位置: 代码迷 >> Android >> Android中的Stripe Integration,后续怎么办?
  详细解决方案

Android中的Stripe Integration,后续怎么办?

热度:44   发布时间:2023-08-04 11:45:12.0

我正在使用Stripe开发信用卡付款。 在创建令牌(我已经完成)后,我不知道如何继续。

官方文件说:

使用令牌

然而,使用支付令牌获取它需要使用您的秘密API密钥从您的服务器进行API调用。 (出于安全考虑,切勿在应用程序中嵌入秘密API密钥。)在服务器上设置可以接收令牌的HTTP POST调用的端点。 在onActivityResult方法(用于Android Pay)或onSuccess回调(使用自己的表单时)中,您需要将提供的令牌POST到您的服务器。 确保与服务器的任何通信都是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安全性?

对不起我的问题,但我从来没有这样做过。

谢谢你,加埃塔诺

您需要将该令牌发送到onActivityResult函数中的服务器: : onActivityResult

您肯定需要服务器端应用程序 - 或第三方集成 - 来创建费用; 据我所知,你不能用Firebase做到这一点。

你需要一个中间服务器。 我用node.js用$ 7 / mo完成了与Heroku的Stripe集成

您不能在客户端进行条带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
    });
  相关解决方案