【Android】Stripe支付

【Android】Stripe支付,第1张

概述提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档目录前言一、Stripe是什么?二、使用步骤1.引入库2.配置publishablekey 来和Stripe通讯3.创建订单,从服务端获取clientsecret4.获取yhk信息5.开始支付6.支付结果回调 总结 前言最近公司做

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、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支付所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1034539.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存