【发布时间】: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