Android客户端三步完成支付宝支付SDK接入

简介: Android客户端三步完成支付宝支付SDK接入

1.下载SDK

下载地址:https://doc.open.alipay.com/doc2/detail.htm?treeId=54&articleId=104509&docType=1


解压并导入jar包,并Add As Library.


2.添加声明

AndroidManifest.xml文件里面添加声明(支付宝客户端调用和H5页面调用)


  <activity
            android:name="com.alipay.sdk.app.H5PayActivity"
            android:configChanges="orientation|keyboardHidden|navigation"
            android:exported="false"
            android:screenOrientation="behind"/>
        <activity
            android:name="com.alipay.sdk.auth.AuthActivity"
            android:configChanges="orientation|keyboardHidden|navigation"
            android:exported="false"
            android:screenOrientation="behind"/>


3.调用处理

在去支付的按钮点击事件里面加入下面代码

Runnable payRunnable = new Runnable() {
            @Override
            public void run() {
                //调用支付宝
                PayTask payTask = new PayTask(这里是上下文);
                String result = payTask.pay(orderBean.payUrl, true);
                Message msg = new Message();
                msg.what = SDK_PAY_FLAG;
                msg.obj = result;
                mHandler.sendMessage(msg);
            }
        };
        // 必须异步调用
        Thread payThread = new Thread(payRunnable);
        payThread.start();


payTask.pay(orderBean.payUrl, true)中的orderBean.payUrl是服务器返回给我的数据,也就是支付宝需要的参数(后台封装好的,支付宝也不建议前台去搞),都在里面了,只需要拿数据去请求就行了。


第二个参数true,表示在请求支付的时候是否加入Loading的dialog


返回结果在Handler中处理

@SuppressLint("HandlerLeak")
    private Handler mHandler = new Handler() {
        @SuppressWarnings("unused")
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case SDK_PAY_FLAG: {
                    PayResult payResult = new PayResult((String) msg.obj);
                    String resultInfo = payResult.getResult();// 同步返回需要验证的信息
                    String resultStatus = payResult.getResultStatus();
                    if (TextUtils.equals(resultStatus, "9000")) {
                        MyUtil.showToast("支付成功");
                    } else {
                        // "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准
                        if (TextUtils.equals(resultStatus, "8000")) {
                            MyUtil.showToast("支付结果确认中");
                        }
                        else if (TextUtils.equals(resultStatus, "6001")) {
                            MyUtil.showToast("支付取消");
                        }
                        else if (TextUtils.equals(resultStatus, "6002")) {
                            MyUtil.showToast("网络异常");
                        }
                        else if (TextUtils.equals(resultStatus, "5000")) {
                            MyUtil.showToast("重复请求");
                        }
                        else {
                            // 其他值就可以判断为支付失败
                            MyUtil.showToast("支付失败");
                        }
                    }
                    break;
                }
            }
        }
    };

 

加入上面的代码就需要一个PayResult 类去接收返回结果了(直接copy下载的sdk中的demo里面的就行)



PayResult payResult = new PayResult((String) msg.obj);如果这句报错,就是类型转换的问题,有的是String,有的是Map的,去实体类中改就好了,在类型转换的时候改也行。



所以接入支付宝SDK只需要3个步骤:


添加jar包

manifest中添加声明

加入上面两段代码和一个实体类


以上皆为Android客户端的接入




接入中遇到支付失败,code 4000,报错ALI59


按照官网的解决方案去检查了一遍,最后发现是参数格式的问题


支付宝请求参数中的订单总金额单位为元,精确到小数点后两位,如果是10.0000这样的就会报错ALI59,正确10.00


而微信支付的请求参数中的总金额单位为分,对账单中的交易金额单位是为元的。

目录
相关文章
|
5月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
680 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
820 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
516 0
|
程序员 开发工具 Android开发
Android|使用阿里云推流 SDK 实现双路推流不同画面
本文记录了一种使用没有原生支持多路推流的阿里云推流 Android SDK,实现同时推送两路不同画面的流的方法。
331 7
|
Java Linux API
Android SDK
【10月更文挑战第21天】
448 1
|
移动开发 安全 API
微信H5支付--微信JS-SDK支付--点金计划
本文详细介绍了微信H5支付和JS-SDK支付的原理、配置和开发流程,涵盖了H5支付在移动端浏览器外唤起微信支付的细节,以及JS-SDK支付在微信内置浏览器中完成支付的相关注意事项。文章还针对微信支付常见问题,提供了解决方案和代码示例。最后,文章深入解析了微信支付点金计划,包括商家小票的自定义开发、API接口以及支付成功后的页面展示逻辑,为开发者提供了完整的开发参考。
1109 0
微信H5支付--微信JS-SDK支付--点金计划
|
JavaScript Java Maven
云效产品使用常见问题之android sdk 构建出aar后,上传到私有maven仓库失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
开发工具 Android开发
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
1438 4
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
|
Dart 开发工具 Android开发
Android Studio导入Flutter项目提示Dart SDK is not configured
Android Studio导入Flutter项目提示Dart SDK is not configured
1957 4
|
开发工具 Android开发
Flutter: Android SDK not found at this location,Android Studio not found at xxx
Flutter: Android SDK not found at this location,Android Studio not found at xxx
762 2