Android集成支付----支付宝支付总结与封装

前言

类似于Android集成支付----微信支付总结与封装(可以查看本人另外一篇文章),本文对支付宝支付进行一个总结与封装。相比于微信支付,支付宝支付没有那么多坑。

集成支付宝支付SDK

这里只是简要介绍,重点解说有坑的地方,具体参考官方文档,官方文档百度一下就有了。
1.导入SDK
支付宝支付导入SDK只需要导入一个jar包,相信这个对于懂Android开发的同学不成问题。
2.修改Manifest、混淆等
这些内容照着官方文档复制粘贴即可

支付宝整体来说还是很人性化的,并没有很多坑。不像微信支付文档里有一些歧义。

支付宝支付开发步骤

相信大家通过官方文档可以很轻松的集成支付宝支付SDK,下面我们就直接进入正题。
1.OrderInfo的获取(签名过程)
orderInfo的获取,用官方的话来说是签名过程。支付宝官方明确建议,这个过程要放在服务端来做,只需要返回给客户端一个orderInfo字符串即可。


V}VE}{S6K5ME9PQ`{($ZMG7.png

如果是放在服务端,那么我们就不用过多关心,只作为一个从服务端请求的字符串即可。
然而在实际开发中,OrderInfo也有可能放在客户端来做,比如我们的服务端就是这样的,让先请求一个接口,返回给我这么点信息,然后让我自己组装OrderInfo,也就是自己签名,日了狗了。


Paste_Image.png

具体的签名过程可以参考官方文档、官方demo,当然还可以看我自己封装的代码。github在下面。

2.调起支付宝APP
这个地方非常简单,直接复制官方文档提供的代码即可:

 Runnable payRunnable = new Runnable() {//要在子线程
            @Override
            public void run() {
                PayTask alipay = new PayTask(RechargeActivity.this);
                Map<String, String> result = alipay.payV2
                        (orderInfo, true);//这里的orderInfo就是上面说的orderInfo
                Message msg = new Message();
                msg.what = SDK_PAY_FLAG;
                msg.obj = result;
                mHandler.sendMessage(msg);
            }
        };
        Thread payThread = new Thread(payRunnable);
        payThread.start();

3.支付结果的处理
这里也同样简单,只需要在mHandler中处理即可

private Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            AliPayResult payResult = new AliPayResult((Map<String, String>) msg.obj);
            switch (payResult.getResultStatus()) {
                case "9000":
                    GMToastUtil.showToast("支付成功");
                    break;
                case "8000":
                    GMToastUtil.showToast("正在处理中");
                    break;
                case "4000":
                    GMToastUtil.showToast("订单支付失败");
                    break;
                case "5000":
                    GMToastUtil.showToast("重复请求");
                    break;
                case "6001":
                    GMToastUtil.showToast("已取消支付");
                    break;
                case "6002":
                    GMToastUtil.showToast("网络连接出错");
                    break;
                case "6004":
                    GMToastUtil.showToast("正在处理中");
                    break;
                default:
                    GMToastUtil.showToast("支付失败");
                    break;
            }
        }
    };

签名问题

这里有一个问题还是有必要说一下的。
支付宝支付签名有两种,如下图RSA2与RSA,这里支付宝官方推荐RSA2,但也不排除有人会用RSA。比如我们的服务端开发人员,非要用RSA,很不理解。


Paste_Image.png

支付宝提供了签名工具,自己操作生成一个公钥和一个私钥,这里的公钥全名是”应用公钥“如上图。私钥自己留着在获取orderInfo(签名过程)处使用。公钥上传到上图位置,要用RSA2就上传到RSA2位置,反之你懂的。
公钥上传后,支付宝开放平台会自动生成一个支付宝公钥,注意区分”应用公钥“和”支付宝公钥“。这里的支付宝公钥是给服务端用的,服务端在异步回调时验签。

支付宝支付的封装

支付宝同样不涉及很多业务逻辑,完全可以封装成工具类以便下次使用。封装后的使用非常简单,如下代码,详细代码可以看我的github,地址在文末。

        //签名在客户端
        findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //假设已经从服务端获取必要数据
                MyALipayUtils.ALiPayBuilder builder = new MyALipayUtils.ALiPayBuilder();
                builder.setAppid("123")
                        .setRsa("456")//根据情况设置Rsa2与Rsa
                        .setMoney("0.01")//单位时分
                        .setTitle("支付测试")
                        .setOrderTradeId("487456")//从服务端获取
                        .setNotifyUrl("fdsfasdf")//从服务端获取
                        .build()
                        .toALiPay(MainActivity.this);
            }
        });
        //签名在服务端
        findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //假设已从服务端获取orderInfo
                String orderInfo = "";
                MyALipayUtils.ALiPayBuilder builder = new MyALipayUtils.ALiPayBuilder();
                builder.build().toALiPay(MainActivity.this, orderInfo);

            }
        });

该文章到此告一段落,希望对大家有所帮助,详细封装代码github地址:https://github.com/chaohengxing/ALiPayUtils

补充

直接运行demo,点击签名在客户端,会出现以下错误。碰到这个错误不要惊慌。
image.png
只需要将setRsa("私钥")这里的私钥换成正确的私钥就OK了。也就是下图这里
image.png
私钥分两种,两种有什么区别?私钥怎么获取?私钥生后怎么配置?等这些问题都可以在官方文档中找到。

官方文档:https://docs.open.alipay.com/291/105971/

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

推荐阅读更多精彩内容