2019-04-03 海外版Stripe接入Google Pay

实测通过,可正常支付,并在后台看到相关支付数据

1.Stripe地址:
https://github.com/stripe/stripe-android/tree/f1d932f55303d02b9116588de1a104d3e80be035
直接参考example这个项目就好,其他的直接忽略,视项目需求进行添加
2.Google Pay地址:
这里不放上来,是想强调如果要接入谷歌支付,最好是只参考一份文档就好,不要各种参考,很乱,真的乱
3.谷歌账号申请:
强调一点,很多文章各种描述要如何申请,如何添加各种七七八八的凭据等等。其实,只需要记住以下几点
-申请谷歌账户,FQ申请,自行百度
-申请后,在AS里面创建你的第一个demo,如上第一点Stripe里面的demo,记住把包名换成你自己的,然后进行上传到alpha内测版,或者Beta内测版,不要发布到正式环境。
-审核通过后(其实也可以尝试未通过后,跑下Demo,不建议)可以开始跑你的demo了,这个时候点击Google Pay 到相关类中。

        IsReadyToPayRequest request = IsReadyToPayRequest.newBuilder()
                .addAllowedPaymentMethod(WalletConstants.PAYMENT_METHOD_CARD)
                .addAllowedPaymentMethod(WalletConstants.PAYMENT_METHOD_TOKENIZED_CARD)
                .build();
        Task<Boolean> task = mPaymentsClient.isReadyToPay(request);
        task.addOnCompleteListener(
                task1 -> {
                    try {
                        boolean result =
                                task1.getResult(ApiException.class);
                        if(result == true) {
                            //show Google as payment option
                            ToastUtils.showShort("success");
                            mGooglePayButton.setEnabled(true);
                        } else {
                            mGooglePayButton.setEnabled(true);
                            ToastUtils.showShort("no success");
                        }
                    } catch (ApiException exception) {
                        ToastUtils.showShort("exception");
                    }
                });
    }

这个方法,根据官方文档描述,是检查当前手机是否支持Google Pay,我这里是换了几台手机result都是false。所以为了可以正常测试支付功能,这里直接绕过判断,默认都是支持支付功能。这点很重要,很多人卡在这一步,一直在排查为啥都是返回false,虽然我也不清楚,但是据说要支持NFC吧
4.假设以上都通过了,你点击mGooglePayButton支付动作的时候,会提示你,手机谷歌必须安装的组件,如Google Pay套件,或者提示手机未登录Google账号,所以继续走下一步。
5.FQ在手机上登录你的谷歌账号,如果没有账号,麻烦从第一步重新看
6.安装Google Pay---------------------------这一步很重要
7.安装后,如果你还没有登录,你要登录你的谷歌账户了,然后
===============================================
开始绑卡操作,要绑定啥卡呢?强烈建议VISA或者JCB的卡,不懂的可以百度下,绑卡后,会扣费,1美金吧。不清楚后面会不会退。
8.当你绑卡后,你很开心的,重新打开你的demo准备去测试支付了。然并卵,依然不能支付,点击后,在填写了各种资料后,会弹出提醒:
请求失败 交易遭拒:付款方式无效。了解详情[OR-CCSEH-05]
如果遇到这个问题,也不用百度了。你的付款方式出错了,我这里出现这个问题,是因为,我用Google pay绑定了同一张卡两次,导致生成了两个付款方式,其中一个还是错误的。所以,这个时候,请到Google Pay里面的常规设置里面,拉到最下面,有个更改默认设置的选项,切换一下,你的付款资料,点击保存。
9.泡杯茶,重新运行,okay,付款流程都很畅通了。
10.与服务端进行交互

 @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case LOAD_PAYMENT_DATA_REQUEST_CODE:
                switch (resultCode) {
                    case Activity.RESULT_OK:
                        PaymentData paymentData = PaymentData.getFromIntent(data);
                        // You can get some data on the user's card, such as the brand and last 4 digits
                        CardInfo info = paymentData.getCardInfo();
                        // You can also pull the user address from the PaymentData object.
                        UserAddress address = paymentData.getShippingAddress();
                        // This is the raw string version of your Stripe token.
                        String rawToken = paymentData.getPaymentMethodToken().getToken();

                        // Now that you have a Stripe token object, charge that by using the id
                        Token stripeToken = Token.fromString(rawToken);
                        if (stripeToken != null) {
                            // This chargeToken function is a call to your own server, which should then connect
                            // to Stripe's API to finish the charge.
                            // chargeToken(stripeToken.getId());
                            chargeToken("100",stripeToken.getId(),"usd");
                           }
                        break;
                    case Activity.RESULT_CANCELED:
                        ToastUtils.showShort("Cancel");

                        break;
                    case AutoResolveHelper.RESULT_ERROR:
                        Status status = AutoResolveHelper.getStatusFromIntent(data);
                        ToastUtils.showShort("Got error " + status.getStatusMessage());
                        // Log the status for debugging
                        // Generally there is no need to show an error to
                        // the user as the Google Payment API will do that
                        break;
                    default:
                        // Do nothing.
                }
                break; // Breaks the case LOAD_PAYMENT_DATA_REQUEST_CODE
            default:
                // Do nothing.
        }
    }

public void chargeToken(String amount,String tokenId,String currency){
        Map<String,String> header = new HashMap<>(2);
        header.put("Authorization","Bearer sk_test_RUHQk5aOliEJkJmyh02wI6Xp");
        header.put("Content-Type","application/x-www-form-urlencoded");
        RetrofitClient.getInstance().create(StripeService.class).charges(header,amount,currency,tokenId)
                .compose(RxUtils.schedulersTransformer()).subscribe(new Observer() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(Object o) {
                    ToastUtils.showShort( "支付成功");
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });
    }


public interface StripeService {


    /**
     * Desc:谷歌支付Stripe调用
     * <p>
     * 
     * Date: 2019-04-03
     *
     * @param amount 价格
     * @param currency 单位
     * @param source token数据
     * @return observable
     */
    @FormUrlEncoded
    @POST("/v1/charges")
    Observable<ResponseBody> charges(@HeaderMap Map<String, String> headers,@Field("amount") String amount, @Field("currency") String currency, @Field("source") String source);
}

11.如上,调用成功后,会执行chargeToken这个方法,这个方法需要 跟服务端进行交互,所以需要服务端接受付款的token信息以及付款信息。
12.交互的接口可先使用Stripe的,不需要服务端介入,但是这个方式只适合测试,正式版本,最好不要使用这种方式。
13.写的不会很乱,也不会很详细。基本满足当前需求吧

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • Google Pay 是2018年1月9日,谷歌发布的新的支付平台。Google Pay品牌将在移动应用、网站、和...
    moralok阅读 12,260评论 13 4
  • 移动支付的现状 今年二月份,苹果在中国大陆隆重推出了其手机支付工具,Apple Pay。该功能是苹果携手中国银联,...
    苦食轩主人阅读 1,058评论 2 2
  • 支付宝简介文档 (适用于ydm-java接口与后台,如有误入,但愿也能给您带来帮助) 此文档写于2017年3月,只...
    隔壁付叔叔阅读 17,046评论 3 19
  • 对待走路这件事,我是很严肃的。 打从有了爱美意识就没美过。初中开始长胖,满脸小雀斑,胸部的发育让我充满羞耻感,整天...
    打渔阅读 343评论 0 2
  • 我了解我的自卑与怯懦, 觉得与你不是一个世界。 会在一个你看不见的地方, 说着一个人的重重心事。 可我又知道 我们...
    鱼盖阅读 270评论 0 2