上家公司想要拓展自己在新加坡的市场,打算做一个新加坡本地的生活服务应用,其中少不了的就是支付了。国外支付这块一直是个头疼的问题。想用Google Wallet吧,但它是采用NFC接触式交易,想要进行线上服务时没法进行,后来就去整个贝宝PayPal支付。在这里想吐槽一下,PayPal支付做起来真是头疼,文档阅读起来很吃力,官方也没什么好的demo,无奈,在度娘里不断地搜索,找到了别人做的一个demo,我自己拿来集成了一下,终于弄好了。好了是好了,不过后来老板又重新定了需求,因为嫌PayPal支付的手续费太贵,所以果断弃用,不断打听了解,找到了这个Stripe支付。又是第一次接触这个支付,我呢就把Stripe支付的流程用博客记录下来,以备不时之需,有想要在google play上架自己带支付的应用的小伙伴们也可以参考一下这篇文章。
Stripe Android开发文档地址: https://stripe.com/docs/mobile/android
第一步,在build.gradle
中配置sdk
:
compile ‘com.stripe:stripe-android:3.0.1’
要在Eclipse上安装Stripe引用,你需要 :
1. 首先下载 stripe-android
库.
2. 确保你的 Android SDK
最低在 Level 17
以上并且有android-support-v4
包.
3. 导入 stripe
文件夹 到 Eclipse.
4. 在你项目设置里, 在“Android”
类别下的“Stripe
”部分添加项目依赖库。
如果说没有找到jar包的下载地址,可以用as添加主module依赖:
compile ‘com.stripe:stripe-android:3.0.1’ ,然后在在这里拷贝出来:
第二步,收集信用卡信息
这里需要注意的是,Stripe并没有支付界面,收集信用卡信息的界面需要自己设计。
使用前先导入stripe支付应用的类:
import com.stripe.android.*;
这里会用到两大主类:Card
和Stripe
我们使用用户的输入信息来初始化一个Card
:
Card card = new Card(
cardNumber, //卡号
cardExpMonth, //卡片过期月份
cardExpYear, //卡片过期年份
cardCVC //CVC验证码
);
card.validateNumber(); //检测卡号是否有效
card.validateCVC(); //检测CVC验证码是否有效
第三步,构建Stripe
生成token
:
if (card.validateCard()) {
Stripe stripe = new Stripe();
//调用创建token方法
stripe.createToken(
card,//传入card对象
new TokenCallback() {
//这里的token打印出来是一串json数据,其中的 token需要用getId()来得到
public void onSuccess(Token token) {
// 这里生成得到了token,你需要将它发送到自己服务器,然后服务器利用这个token和支付金额去向 Stripe请求扣费
submitPaymentInfo(token.getId(),"12.20");//提交支付信息
}
public void onError(Exception error) {
// 显示本地错误信息
Toast.makeText(getContext(),
error.getLocalizedString(getContext()),
Toast.LENGTH_LONG
).show();
}
}
)
}else {
//卡号有误
MToast.shortToast("The card number that you entered is invalid");
} else if (!card.validateExpiryDate()) {
//过期时间有误
MToast.shortToast("The expiration date that you entered is invalid");
} else if (!card.validateCVC()) {
//CVC验证码有误
MToast.shortToast("The CVC code that you entered is invalid");
} else {
//卡片详情有误
MToast.shortToast("The card details that you entered are invalid");
}
}
至此,Stripe支付就接入完成了,具体的扣费则是需要自己服务器与stripe服务器交互,在提交完支付信息再得到支付结果过程中进行加载框的处理就看这里就不再多说了。
下面我把我这个类的完整代码放出来吧:
package com.anmu.wannasg.user.ui;
import android.content.Intent;
import android.graphics.drawable.BitmapDrawable;
import android.support.v4.app.DialogFragment;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.alibaba.fastjson.JSONObject;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.anmu.wannasg.R;
import com.anmu.wannasg.SwipeBack.SwipeBackLayout;
import com.anmu.wannasg.application.MyApplication;
import com.anmu.wannasg.autolayout.utils.AutoUtils;
import com.anmu.wannasg.commonactivity.BaseSwipeBackActivity;
import com.anmu.wannasg.net.Keys;
import com.anmu.wannasg.net.URLS;
import com.anmu.wannasg.utils.L;
import com.anmu.wannasg.utils.MToast;
import com.anmu.wannasg.utils.ScreenUtils;
import com.anmu.wannasg.widget.pickerview.NumberPickerView;
import com.ant.liao.GifView;
import com.stripe.android.Stripe;
import com.stripe.android.TokenCallback;
import com.stripe.android.model.Card;
import com.stripe.android.model.Token;
import java.util.HashMap;
import java.util