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

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

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yechaoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值