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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556353.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot系列之Shiro、JWT、Redis 进行认证鉴权

Springboot系列之Shiro、JWT、Redis 进行认证鉴权 Shiro架构 Apache Shiro是一个轻量级的安全框架 Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境。 Shiro可以帮助我们完成:认证、授权、加密、会…

kettle 先删除后插入_Kettle:使用触发器和快照表进行增量数据同步

主库为Oracle 11g数据库,针对需要同步的表建立增量数据临时表以及反向并通过水壶定时同步到PostgreSQL数据库。1,主库创建快照表和快照注意:快照表结构和源表结构必须一致!--创建插入快照表 CREATE TABLE SPWUSER.WEB_CUSTOMER_IN…

SpringBoot中使用Shiro和JWT做认证和鉴权

最近新做的项目中使用了shiro和jwt来做简单的权限验证,在和springboot集成的过程中碰到了不少坑。做完之后对shiro的体系架构了解的也差不多了,现在把中间需要注意的点放出来,给大家做个参考。 相对于spring security来说,shiro出…

android 手机wifi重启,路由器要不要每天重启?多亏宽带师傅透露,难怪网速一天比一天慢!...

没WiFi,不成活!手机和WiFi之间,就像空调加棉被,谁也离不开谁。图片来源于网络如今WiFi已经填满了我们生活的每个角落,很难想象,如果哪天没了网,世界会变成什么样!可是家里的WiFi是越…

关于Apache Commons-Lang3的使用

关于Apache Commons-Lang3的使用 在日常工作中,我们经常要使用到一些开源工具包,比如String,Date等等。有时候我们并不清楚有这些工具类的存在,造成在开发过程中重新实现导致时间浪费,且开发的代码质量不佳。而apache…

linux 查看ip_如何在 Linux 中查看可用的网络接口 | Linux 中国

对于某些人来说,他们更偏爱在安装完系统后再进行网络的配置或者更改现存的设置。众所周知,为了在命令行中进行网络设定的配置,我们首先必须知道系统中有多少个可用的网络接口。-- Sk在我们安装完一个 Linux 系统后最为常见的任务便是网络配置…

实现springboot的starter

什么是 Spring Boot Spring Boot 基本上是 Spring 框架的扩展,它消除了设置 Spring 应用程序所需的复杂例行配置。我们在使用 Spring 框架的时候,我们接触得比较多的应该是 Spring MVC、 IOC 、 DI 、AOP 等等,而这些框架在使用的过程中会需…

android多点触摸手势,安卓手势学习笔记(三) 多点触控

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?跟踪多个触点当多个手指同时触碰屏幕时,系统产生如下的事件:ACTION_DOWN –第一个触点。它启动了手势,在MotionEvent中该触点的…

SpringBoot 自动配置实现流程

(1)SpringBoot启动的时候加载主配置类,开启了自动配置功能EnableAutoConfiguration。查看SpringBootApplication (2)查看EnableAutoConfiguration,其作用是利用AutoConfigurationImportSelector给容器中导入…

spring.factories 的妙用

现象 在阅读 Spring-Boot 相关源码时,常常见到 spring.factories 文件,里面写了自动配置(AutoConfiguration)相关的类名,因此产生了一个疑问:“明明自动配置的类已经打上了 Configuration 的注解&#xff0…

学习android 画板源代码,Android实现画画板案例

郑州app开发画画板案例。布局代码是三个button和一个imagesview下面是图片。布局代码就不展示了。下面是java代码。package cn.xhhkj.image;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;import android.graphics.Bitmap;import android.gr…

Spring Boot 之spring.factories

首先抛出一个问题:如果想要被Spring容器管理的Bean的路径不再Spring Boot 的包扫描路径下,怎么办呢?也就是如何去加载第三方的Bean 呢? 有两种方式可以解决: 这里我们使用Swagger的配置来做实验。 1:首先一…

dataearth可视域分析_谁不知道前期分析要用ARCGIS?我就是不会用啊

Q你有没有遇到这样的情况?身边的同事或同学经常说什么高程图、坡向图、坡度图、生态水文图、热力密度图、大数据算法,而自己却一无所知,心里感到特别的慌啊。文末附ArcGIS最新版及超强数据神器 很多人会说,“设计师是感性的&#…

@ImportResource()注解的使用

ImportResource注解用于导入Spring的配置文件,让配置文件里面的内容生效;(就是以前写的springmvc.xml、applicationContext.xml) Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别; 想让Sp…

mybatis3 没有生成example_网站图片尺寸自动生成

目录1. 背景2. 实现思路2.1. 尺寸动态变化2.2. 实时裁剪并静态化3. web或代理服务器插件实现方案1. 背景某天我的前同事给我打电话,说他们的负载很高,经查发现网站首页有20M,原因是首页直接引用高清图片,没有安装分辨率生成缩图。…

无法删除所有指定的值_AutoCAD所有系统变量大全

ACADLSPASDOC 0 仅将 acad.lsp 加载到 AutoCAD 任务打开的第一个图形中; 1 将 acad.lsp 加载到每一个打开的图形中ACADPREFIX 存储由 ACAD 环境变量指定的目录路径(如果有的话),如果需要则附加路径分隔符ACADVER 存储 AutoCAD 的版本号。这个变量与 DXF 文件标题变量…

简述HTML语言概念,HTML语言的基本概念和基本格式.doc

HTML语言的基本概念和基本格式HTML语言的基本概念和基本格式当使用Netscape Navigator 与 Interne Explorer 这些浏览器在Interent上尽情遨游的时候,肯定会被丰富多彩的屏幕内容所吸引,而这些丰富多彩的内容背后,只是用一种简单的超文本标志语…

为什么线程池里的方法会执行两次_新手一看就懂的线程池

作者:码农田小齐来源:https://www.cnblogs.com/nycsde/p/14003888.html那相信大家也能感受到,其实用多线程是很麻烦的,包括线程的创建、销毁和调度等等,而且我们平时工作时好像也并没有这样来 new 一个线程,其实是因为很多框架的底…

华为鸿蒙热水器,美的华为跨界联合!搭载鸿蒙OS的美的产品双11上市

【宅秘新闻】在前段时间的华为开发者大会上,华为正式发布了鸿蒙OS 2.0。华为消费者业务软件部总裁王成录当时表示,美的等家电品牌很快就会推出基于鸿蒙OS 2.0的家电产品。11月11日,美的集团官方宣布搭载鸿蒙OS的美的产品在双十一惊喜上市。宅…

Eclipse构建Maven分包分模块项目并构建服务端

首先说一下Maven 模块结构: 一个简单的Maven模块结构是这样的: ---- app-parent 一个父项目(app-parent)聚合很多子项目(app-util,app-dao,app-service,app-web) |---- pom.xml (pom) | |-------- app-util | |-------- pom.xml (jar) | |-------- app-…