美文网首页
Android实现支付宝支付功能

Android实现支付宝支付功能

作者: XiaoXred | 来源:发表于2020-06-28 17:06 被阅读0次


1.导入SDK

App支付客户端 DEMO&SDK

2.创建AliPayUtil工具类

代码:

public class AliPayUtil {

    private static AliPayUtil instance;

    //支付结果回调接口

    private PayStateCallback payStateCallback;

    private Activity activity;

    /**

    * 设置支付结果监听

    */

    public AliPayUtil setPayStateCallback(PayStateCallback payStateCallback) {

        this.payStateCallback = payStateCallback;

        return this;

    }

    private AliPayUtil() {

    }

    public static AliPayUtil getInstance(Activity activity, PayStateCallback payStateCallback) {

        if (instance == null) {

            instance = new AliPayUtil();

        }

        instance.setActivity(activity);

        instance.setPayStateCallback(payStateCallback);

        return instance;

    }

    private void setActivity(Activity activity) {

        this.activity = activity;

    }

    /**

    * 调用支付宝SDK支付

    *

    * @param orderstr 编码后的订单信息

    */

    public void startPay(String orderstr) {

        //if (CommonUtils.isFastDoubleClick()){return;}

        new PayThread(orderstr).start();

    }

    class PayThread extends Thread {

        String orderstr;

        public PayThread(String orderstr) {

            this.orderstr = orderstr;

        }

        @Override

        public void run() {

            // 构造PayTask 对象

            PayTask alipay = new PayTask(activity);

            String result = alipay.pay(orderstr, true);

            // 调用支付接口,获取支付结果

            payStateCallBack(result);

        }

    }

    private void payStateCallBack(String result) {

        PayResult aliPayResult = new PayResult(result);

        /**

        * 同步返回的结果必须放置到服务端进行验证(验证的规则请看

        * https://doc.open.alipay.com/doc2/detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665&docType=1

        * ) 建议商户依赖异步通知

        *  服务端验证安全

        */

        //        String resultInfo = aliPayResult.getResult();// 同步返回需要验证的信息

        String resultStatus = aliPayResult.getResultStatus();

        // 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档

        if (TextUtils.equals(resultStatus, "9000")) {

            //ToastUtil.showToast("支付成功");

3.在单独创建一个类payStateCallback

public interface PayStateCallback {

    /**

    * 支付成功

    */

    void onPaySuccess(String describe);

    /**

    * 支付结果确认中

    */

    void onPayWatting(String describe);

    /**

    * 支付失败

    */

    void onPayFailed(String describe);

}

4.还需要一个PayResult

public class PayResult {

    private String resultStatus;

    private String result;

    private String memo;

    public PayResult(String rawResult) {

        if (TextUtils.isEmpty(rawResult))

            return;

        String[] resultParams = rawResult.split(";");

        for (String resultParam : resultParams) {

            if (resultParam.startsWith("resultStatus")) {

                resultStatus = gatValue(resultParam, "resultStatus");

            }

            if (resultParam.startsWith("result")) {

                result = gatValue(resultParam, "result");

            }

            if (resultParam.startsWith("memo")) {

                memo = gatValue(resultParam, "memo");

            }

        }

    }

    @Override

    public String toString() {

        return "resultStatus={" + resultStatus + "};memo={" + memo

                + "};result={" + result + "}";

    }

    private String gatValue(String content, String key) {

        String prefix = key + "={";

        return content.substring(content.indexOf(prefix) + prefix.length(),

                content.lastIndexOf("}"));

    }

    /**

    * @return the resultStatus

    */

    public String getResultStatus() {

        return resultStatus;

    }

    /**

    * @return the memo

    */

    public String getMemo() {

        return memo;

    }

    /**

    * @return the result

    */

    public String getResult() {

        return result;

    }

}

5.然后请求下单数据,并调用支付宝进行支付:

AliPayUtil.getInstance(this, orderCallback).startPay(placeString);

private PayStateCallback orderCallback = new PayStateCallback() {

    @Override

    public void onPaySuccess(String describe) {

        //支付成功的处理

        showToast("支付成功");

    }

    @Override

    public void onPayWatting(String describe) {

    }

    @Override

    public void onPayFailed(String describe) {

        //支付失败的处理

        showToast("支付失败");

    }

};

6.如果在支付成功或失败返回的市口出现闪白退出异常<Can't toast on a thread that has not called Looper.prepare()>,是因为子线程不能更新ui,做一下操作

rivate PayStateCallback orderCallback = new PayStateCallback() {

    @Override

    public void onPaySuccess(String describe) {

        //支付成功的处理

        runOnUiThread(new Runnable() {

            @Override

            public void run() {

                showToast("支付成功");

            }

        });

    }

    @Override

    public void onPayWatting(String describe) {

    }

    @Override

    public void onPayFailed(String describe) {

        //支付失败的处理

        runOnUiThread(new Runnable() {

            @Override

            public void run() {

                showToast("支付失败");

            }

        });

    }

};

相关文章

网友评论

      本文标题:Android实现支付宝支付功能

      本文链接:https://www.haomeiwen.com/subject/ffpwfktx.html