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月前
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
129 0
|
3月前
|
API 开发工具 C#
神策SDK不支持Windows客户端全埋点,怎么实现用户统计分析?
本文将介绍,ClkLog针对神策不支持全埋点的客户端实现用户访问基础统计分析 1。
神策SDK不支持Windows客户端全埋点,怎么实现用户统计分析?
|
2月前
|
Java Linux API
Android SDK
【10月更文挑战第21天】
91 1
|
3月前
|
程序员 开发工具 Android开发
Android|使用阿里云推流 SDK 实现双路推流不同画面
本文记录了一种使用没有原生支持多路推流的阿里云推流 Android SDK,实现同时推送两路不同画面的流的方法。
70 7
|
5月前
|
开发工具 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
198 4
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
|
5月前
|
小程序 Serverless 开发工具
小程序开发问题之在小程序中安装并初始化小程序Serverless客户端SDK如何解决
小程序开发问题之在小程序中安装并初始化小程序Serverless客户端SDK如何解决
|
5月前
|
Dart 开发工具 Android开发
Android Studio导入Flutter项目提示Dart SDK is not configured
Android Studio导入Flutter项目提示Dart SDK is not configured
436 4
|
5月前
|
开发工具 图形学 Android开发
Unity与安卓丨unity报错:SDK Tools version 0.0 < 26.1.1
Unity与安卓丨unity报错:SDK Tools version 0.0 < 26.1.1
|
5月前
|
开发工具 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
170 2
|
5月前
|
开发工具 Android开发
Android项目架构设计问题之SDK内部减少每次回调时的冗余判断逻辑如何解决
Android项目架构设计问题之SDK内部减少每次回调时的冗余判断逻辑如何解决
47 0

热门文章

最新文章