提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
一、Stripe是什么?
二、使用步骤
1.引入库
2.配置publishable key 来和Stripe通讯
3.创建订单,从服务端获取client secret
4.获取yhk信息
5. 开始支付
6.支付结果回调
总结
前言
最近公司做海外项目用到了Stripe支付,这里就安卓端集成Stripe支付流程记录一下。总体来说接入集成Stripe还是比较简单的。
一、Stripe是什么?
Stripe是由20多岁的两兄弟Patrick Collison和John Collison创办的Stripe为公司提供网上支付的解决方案。Stripe向服务的公司收取每笔交易的2.9%加上30美分的手续费。
Stripe官网: https://stripe.com/
二、使用步骤1.引入库在app模块build.gradle里加入。最新版本:https://github.com/stripe/stripe-android/releases
implementation 'com.stripe:stripe-androID:16.3.0'
2.配置publishable key 来和Stripe通讯在你的Application里配置
import com.stripe.androID.PaymentConfiguration;public class MyApp extends Application { @OverrIDe public voID onCreate() { super.onCreate(); PaymentConfiguration.init( getApplicationContext(), "pk_test_TYooMQauvdEDq54NiTphI7jx" ); }}
publishable key需要在Stripe官网里面申请。
3.创建订单,从服务端获取clIEnt secret客户端创建订单,从服务器返回临时的clIEnt secret。这个是用来和yhk信息绑定在一起进行支付。
服务端获取clIEnt secret的方法
// Set your secret key. Remember to switch to your live secret key in production!// See your keys here: https://dashboard.stripe.com/account/APIkeysStripe.APIKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc";PaymentIntentCreateParams params = PaymentIntentCreateParams.builder() .setAmount(1099L) .setCurrency("usd") .build();PaymentIntent intent = PaymentIntent.create(params);String clIEntSecret = intent.getClIEntSecret();// Pass the clIEnt secret to the clIEnt
4.获取yhk信息
创建界面获取用户输入的yhk信息,包含卡号,日期,CVV码。
可以使用Stripe定义好的控件CardinputWidget来轻松获取。CardinputWidget控件会对输入的内容进行校验。如果是自己的布局实现的,需要调用API来校验。
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:orIEntation="vertical" androID:padding="20dp" tools:showIn="@layout/activity_checkout"> <TextVIEw androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="请输入yhk信息" androID:textSize="16sp" /> <com.stripe.androID.vIEw.CardinputWidget androID:ID="@+ID/cardinputWidget" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:layout_margintop="@dimen/dp_10" /> <button androID:ID="@+ID/paybutton" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:layout_margintop="20dp" androID:backgroundTint="@androID:color/holo_green_light" androID:text="@string/pay" /></linearLayout>
5. 开始支付CardinputWidget控件获取到参数,然后和ClIEnt Secret绑定在一起。创建Stripe对象来确认支付。
button paybutton = findVIEwByID(R.ID.paybutton); paybutton.setonClickListener((VIEw vIEw) -> { CardinputWidget cardinputWidget = findVIEwByID(R.ID.cardinputWidget); PaymentMethodCreateParams params = cardinputWidget.getPaymentMethodCreateParams(); if (params != null) { if (paymentIntentClIEntSecret == null) { return; } ConfirmPaymentIntentParams confirmParams = ConfirmPaymentIntentParams .createWithPaymentMethodCreateParams(params, paymentIntentClIEntSecret); String stripePublishableKey = PaymentConfiguration.getInstance(this).getPublishableKey(); LogUtils.d("stripePublishableKey==" + stripePublishableKey); // Configure the SDK with your Stripe publishable key so that it can make requests to the Stripe API stripe = new Stripe( getApplicationContext(), Objects.requireNonNull(stripePublishableKey) ); stripe.confirmPayment(this, confirmParams); } });
6.支付结果回调在onActivityResult里获取支付的结果回调。
@OverrIDe protected voID onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Handle the result of stripe.confirmPayment stripe.onPaymentResult(requestCode, data, new PaymentResultCallback(this)); } private static final class PaymentResultCallback implements APIResultCallback<PaymentIntentResult> { @NonNull private final WeakReference<StripPaymentActivity> activityRef; PaymentResultCallback(@NonNull StripPaymentActivity activity) { activityRef = new WeakReference<>(activity); } @OverrIDe public voID onSuccess(@NonNull PaymentIntentResult result) { final StripPaymentActivity activity = activityRef.get(); if (activity == null) { return; } PaymentIntent paymentIntent = result.getIntent(); PaymentIntent.Status status = paymentIntent.getStatus(); if (status == PaymentIntent.Status.Succeeded) { // Payment completed successfully /* Gson gson = new GsonBuilder().setPrettyPrinting().create(); String toJson = gson.toJson(paymentIntent); activity.displayAlert( activity.getString(R.string.payment_successful), "", true );*/ activity.showDialogPaySuccess(); } else if (status == PaymentIntent.Status.RequiresPaymentMethod) { // Payment Failed – allow retrying using a different payment method activity.displayAlert( activity.getString(R.string.payment_Failed), Objects.requireNonNull(paymentIntent.getLastPaymentError()).getMessage(), false ); } } @OverrIDe public voID one rror(@NonNull Exception e) { final StripPaymentActivity activity = activityRef.get(); if (activity == null) { return; } // Payment request Failed – allow retrying using the same payment method activity.displayAlert(activity.getString(R.string.payment_Failed), e.getMessage(), false); } }
总结Stripe的支付流程就是这样。具体的使用可以查看官方文档。文档里面还有保存yhk的功能。这个实现起来会比较富足,可以根据具体业务来添加。
总结以上是内存溢出为你收集整理的【Android】Stripe支付全部内容,希望文章能够帮你解决【Android】Stripe支付所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)