android 支付模块封装,Android集成支付----支付宝支付总结与封装

前言

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

集成支付宝支付SDK

这里只是简要介绍,重点解说有坑的地方,具体参考官方文档,官方文档百度一下就有了。

1.导入SDK

支付宝支付导入SDK只需要导入一个jar包,相信这个对于懂Android开发的同学不成问题。

2.修改Manifest、混淆等

这些内容照着官方文档复制粘贴即可

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

支付宝支付开发步骤

相信大家通过官方文档可以很轻松的集成支付宝支付SDK,下面我们就直接进入正题。

1.OrderInfo的获取(签名过程)

orderInfo的获取,用官方的话来说是签名过程。支付宝官方明确建议,这个过程要放在服务端来做,只需要返回给客户端一个orderInfo字符串即可。

31ee33545a18?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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

如果是放在服务端,那么我们就不用过多关心,只作为一个从服务端请求的字符串即可。

然而在实际开发中,OrderInfo也有可能放在客户端来做,比如我们的服务端就是这样的,让先请求一个接口,返回给我这么点信息,然后让我自己组装OrderInfo,也就是自己签名,日了狗了。

31ee33545a18?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Paste_Image.png

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

2.调起支付宝APP

这个地方非常简单,直接复制官方文档提供的代码即可:

Runnable payRunnable = new Runnable() {//要在子线程

@Override

public void run() {

PayTask alipay = new PayTask(RechargeActivity.this);

Map 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) 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,很不理解。

31ee33545a18?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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);

}

});

补充

直接运行demo,点击签名在客户端,会出现以下错误。碰到这个错误不要惊慌。

31ee33545a18?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

只需要将setRsa("私钥")这里的私钥换成正确的私钥就OK了。也就是下图这里

31ee33545a18?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

私钥分两种,两种有什么区别?私钥怎么获取?私钥生后怎么配置?等这些问题都可以在官方文档中找到。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值