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 密钥?