利用Android Studio在App中集成第三方支付

简介: 利用Android Studio在App中集成第三方支付

觉得自己好久没有写博客了,看了一下时间,果然好久没写了。吓得我赶紧写篇博客压压惊。

第三方支付的选择

 目前主流的第三方支付平台,有以下几种:

  • 支付宝
  • 微信支付
  • 百度钱包
  • 网银支付
  • 第三方聚合支付

以上几种支付平台,除了第三方聚合支付以外,其他几个在使用时,都是需要公司信息的,这对一些个人开发者以及初学者就造成了一些困难,还好,有第三方聚合支付,它可以提供测试的接口给开发者,这里我们就用第三方聚合支付的测试接口进行付款。

 我知道的第三方聚合支付主要有:

  1. Ping++:https://pingxx.com
  2. Bmob : http://www.bmob.cn

这里,我用的是Ping++,至于Bmob大家可以自己研究,不过料想原理应该差不多。

使用前的准备工作

 在使用之前,我们需要到Ping++的官网完成注册,注册之后,就有了一个用于测试的Test Secret Key ,可以在使用者的企业设置下面发现Test Secret Key,如下图

20170625070938118.png

 我们可以在官网的首页,开发者中心下载集成的SDK。

开始集成

文件介绍

 下载SDK后,可以在~/pingpp-android/路径下发现一个lib文件夹,打开后还有三个文件夹,分别为一下三个文件夹

20170625072210530.png

这里我们只需要用到前两就行了,第一个文件夹是集成百度钱包需要用到的,第二个是集成其他的支付方式需要用到的。

集成方式

 在Android Studio集成第三方SDK有两种方式,第一种就是直接在自己的app所在的文件中进行集成,第二种则是新建一个性质为Library的Module,将第三方的SDK放在新建的Module中,然后在自己的app中引入。

 为了不让自己的App过于臃肿以及以后修改方便,这里采用第二种集成方式。我们可以按一下步骤在Android Studio新建一个Module

20170625074814979.png

20170625075004670.png

这样我们就建立了一个性质为Library的Module。

 下面我们需要做的工作就是把pingpp文件家中的东西搬运过来。

注意:这里要把文件结构试图改为Project视图,不然看不见libs文件夹。切换方式如下

20170625080959995.png

我们把 pingpp/libs下的jar包放进libs目录下,放进去后应该是这种结构

20170625081145615.png

这里我们需要在Android Studio中新建一个jniLibs文件夹,新建jniLibs文件夹步骤如下图

20170625081647746.png

这种方式新建以后是一个名为cpp的文件夹,我们只要把它的名字改为jniLibs即可,然后把/pingpp/libs/文件夹中除了jar文件,其他的文件夹放进jniLibs文件夹即可就行了,放进后的文件结构应该如下图所示

20170625082206578.png

这里我们只要将以下四个文件夹中的内容搬运进来就行了,必要时再替换一下清单文件。

20170625082750380.png

添加依赖

 我们只要把刚才新建的module引入到自己的app中就行了,在自己的app上右键选中下图的选项

20170625083305273.png

打开一下界面选中如下选项(红框内的),把新建的Module添加进去就行了。

20170625083733754.png

最好,我们把新建的Module中Gradle中引用的以下两个依赖删除,因为在自己的app已经引入了。

compile ‘com.android.support:appcompat-v7:26.+’

testCompile ‘junit:junit:4.12’

添加bdwallet_pay_sdk也按以上方式进行即可。

在清单文件中添加权限及Activity

添加权限及Activity可按官方指导文件进行操作。

开始使用

 以下代码是调用第三方支付

class PaymentTask extends AsyncTask<PaymentRequest, Void, String> {
        @Override
        protected void onPreExecute() {
            //按键点击之后的禁用,防止重复点击
            mCreateOrder.setEnabled(false);
        }
        @Override
        protected String doInBackground(PaymentRequest... pr) {
            PaymentRequest paymentRequest = pr[0];
            String data = null;
            try {
                JSONObject object = new JSONObject();
                object.put("channel", paymentRequest.channel);
                object.put("amount", paymentRequest.amount);
                String json = object.toString();
                //向Your Ping++ Server SDK请求数据
                data = postJson(CHARGE_URL, json);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return data;
        }
        /**
         * 获取charge
         *
         * @param urlStr charge_url
         * @param json   获取charge的传参
         * @return charge
         * @throws IOException
         */
        private String postJson(String urlStr, String json) throws IOException {
            URL url = new URL(urlStr);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(8000);
            conn.setReadTimeout(8000);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.getOutputStream().write(json.getBytes());
            if (conn.getResponseCode() == 200) {
                BufferedReader
                        reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
                StringBuilder response = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    response.append(line);
                }
                return response.toString();
            }
            return null;
        }
        /**
         * 获得服务端的charge,调用ping++ sdk。
         */
        @Override
        protected void onPostExecute(String data) {
            if (null == data) {
                showMsg("请求出错", "请检查URL", "URL无法获取charge");
                return;
            }
            Log.d("charge", data);
            //除QQ钱包外,其他渠道调起支付方式:
            //参数一:Activity  当前调起支付的Activity
            //参数二:data  获取到的charge或order的JSON字符串
            Pingpp.createPayment(MainActivity.this, data);
            //QQ钱包调用方式
            //参数一:Activity  当前调起支付的Activity
            //参数二:data  获取到的charge或order的JSON字符串
            //参数三:“qwalletXXXXXXX”需与AndroidManifest.xml中的scheme值一致
            //Pingpp.createPayment(ClientSDKActivity.this, data, "qwalletXXXXXXX");
        }
    }

参考代码请点击这里

结束语


相关文章
|
22天前
|
Java 数据库 Android开发
一个Android App最少有几个线程?实现多线程的方式有哪些?
本文介绍了Android多线程编程的重要性及其实现方法,涵盖了基本概念、常见线程类型(如主线程、工作线程)以及多种多线程实现方式(如`Thread`、`HandlerThread`、`Executors`、Kotlin协程等)。通过合理的多线程管理,可大幅提升应用性能和用户体验。
38 15
一个Android App最少有几个线程?实现多线程的方式有哪些?
|
9天前
|
存储 开发工具 Android开发
使用.NET MAUI开发第一个安卓APP
【9月更文挑战第24天】使用.NET MAUI开发首个安卓APP需完成以下步骤:首先,安装Visual Studio 2022并勾选“.NET Multi-platform App UI development”工作负载;接着,安装Android SDK。然后,创建新项目时选择“.NET Multi-platform App (MAUI)”模板,并仅针对Android平台进行配置。了解项目结构,包括`.csproj`配置文件、`Properties`配置文件夹、平台特定代码及共享代码等。
|
13天前
|
XML Android开发 数据格式
🌐Android国际化与本地化全攻略!让你的App走遍全球无障碍!🌍
在全球化背景下,实现Android应用的国际化与本地化至关重要。本文以一款旅游指南App为例,详细介绍如何通过资源文件拆分与命名、适配布局与方向、处理日期时间及货币格式、考虑文化习俗等步骤,完成多语言支持和本地化调整。通过邀请用户测试并收集反馈,确保应用能无缝融入不同市场,提升用户体验与满意度。
35 3
|
24天前
|
Java 数据库 Android开发
一个Android App最少有几个线程?实现多线程的方式有哪些?
本文介绍了Android应用开发中的多线程编程,涵盖基本概念、常见实现方式及最佳实践。主要内容包括主线程与工作线程的作用、多线程的多种实现方法(如 `Thread`、`HandlerThread`、`Executors` 和 Kotlin 协程),以及如何避免内存泄漏和合理使用线程池。通过有效的多线程管理,可以显著提升应用性能和用户体验。
38 10
|
24天前
|
XML IDE 开发工具
🔧Android Studio高级技巧大公开!效率翻倍,编码不再枯燥无味!🛠️
【9月更文挑战第11天】在软件开发领域,Android Studio凭借其强大的功能成为Android开发者的首选IDE。本文将揭示一些提升开发效率的高级技巧,包括自定义代码模板、重构工具、高级调试技巧及多模块架构。通过对比传统方法,这些技巧不仅能简化编码流程,还能显著提高生产力。例如,自定义模板可一键插入常用代码块;重构工具能智能分析并安全执行代码更改;高级调试技巧如条件断点有助于快速定位问题;多模块架构则提升了大型项目的可维护性和团队协作效率。掌握这些技巧,将使你的开发之旅更加高效与愉悦。
47 5
|
8天前
|
XML 数据库 Android开发
10分钟手把手教你用Android手撸一个简易的个人记账App
该文章提供了使用Android Studio从零开始创建一个简单的个人记账应用的详细步骤,包括项目搭建、界面设计、数据库处理及各功能模块的实现方法。
|
1月前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
111 0
|
2月前
|
Android开发 iOS开发 C#
Xamarin:用C#打造跨平台移动应用的终极利器——从零开始构建你的第一个iOS与Android通用App,体验前所未有的高效与便捷开发之旅
【8月更文挑战第31天】Xamarin 是一个强大的框架,允许开发者使用单一的 C# 代码库构建高性能的原生移动应用,支持 iOS、Android 和 Windows 平台。作为微软的一部分,Xamarin 充分利用了 .NET 框架的强大功能,提供了丰富的 API 和工具集,简化了跨平台移动应用开发。本文通过一个简单的示例应用介绍了如何使用 Xamarin.Forms 快速创建跨平台应用,包括设置开发环境、定义用户界面和实现按钮点击事件处理逻辑。这个示例展示了 Xamarin.Forms 的基本功能,帮助开发者提高开发效率并实现一致的用户体验。
78 0
|
2月前
|
开发者 算法 虚拟化
惊爆!Uno Platform 调试与性能分析终极攻略,从工具运用到代码优化,带你攻克开发难题成就完美应用
【8月更文挑战第31天】在 Uno Platform 中,调试可通过 Visual Studio 设置断点和逐步执行代码实现,同时浏览器开发者工具有助于 Web 版本调试。性能分析则利用 Visual Studio 的性能分析器检查 CPU 和内存使用情况,还可通过记录时间戳进行简单分析。优化性能涉及代码逻辑优化、资源管理和用户界面简化,综合利用平台提供的工具和技术,确保应用高效稳定运行。
40 0
|
2月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
全面解析TensorFlow Lite:从模型转换到Android应用集成,教你如何在移动设备上轻松部署轻量级机器学习模型,实现高效本地推理
【8月更文挑战第31天】本文通过技术综述介绍了如何使用TensorFlow Lite将机器学习模型部署至移动设备。从创建、训练模型开始,详细演示了模型向TensorFlow Lite格式的转换过程,并指导如何在Android应用中集成该模型以实现预测功能,突显了TensorFlow Lite在资源受限环境中的优势及灵活性。
69 0
下一篇
无影云桌面