美文网首页
Android 调用支付宝

Android 调用支付宝

作者: YuGoal | 来源:发表于2017-09-19 14:37 被阅读45次

1.接入支付宝

接入前准备

  • 商户需要进行审核签约
  • 密钥管理(生成公私钥)

正式接入

服务端
私钥必须放在服务端,签名过程必须放在服务端。

客户端(Android)

  1. 根据用户选择商品请求服务端获取订单和签名,
  2. 根据服务端返回订单和签名调起支付宝App支付,并对支付返回结果做处理。

2.Android 集成并调用支付宝

  • . 添加jar包
  • . gradle中添加依赖

    PayTask payTask = new PayTask(AboutUsActivity.this);
    Map<String, String> result = payTask.payV2(orderInfo, true);
orderInfo :服务端返回的订单信息。

3.返回结果处理(全部代码)

/**
 * 支付宝
 * @param strURL
 */
private void aliPay(String strURL) {
    Observable.create(new ObservableOnSubscribe<Object>() {
        @Override
        public void subscribe(@NonNull ObservableEmitter<Object> e) throws Exception {
            String orderInfo = OkClient.get(strURL, new JSONObject());//获取订单信息
            orderInfo = orderInfo.replace("amp;", "");//后台PHP,返回的所有&参数都变成&amp,所有需要替换。
            PayTask payTask = new PayTask(AboutUsActivity.this);
            Map<String, String> result = payTask.payV2(orderInfo, true);
            e.onNext(result);
        }
    }).compose(RxUtil.activityLifecycle(this))
            .compose(RxUtil.io())
            .subscribe(new Consumer<Object>() {
                @Override
                public void accept(@NonNull Object o) throws Exception {
                    closeProgressDialog();
                    PayResult payResult = new PayResult((Map<String, String>) o);
                    /**
                     对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
                     */
                    String resultInfo = payResult.getResult();// 同步返回需要验证的信息
                    String resultStatus = payResult.getResultStatus();
                    // 判断resultStatus 为9000则代表支付成功
                    if (TextUtils.equals(resultStatus, AliPay.PAY_OK)) {//--------->支付成功
                        finish();
                    } else if (TextUtils.equals(resultStatus, AliPay.PAY_FAIL)) {//--------->支付失败
                        // 该笔订单真实的支付结果,需要依赖服务端的异步通知。
                        ToastUtils.showToast(payResult.getMemo());
                    } else if (TextUtils.equals(resultStatus, AliPay.PAY_CANCEL)) {//--------->交易取消
                        ToastUtils.showToast(payResult.getMemo());
                    } else if (TextUtils.equals(resultStatus, AliPay.PAY_NET_ERROR)) {//---------->网络出现错误
                        ToastUtils.showToast(payResult.getMemo());
                    } else if (TextUtils.equals(resultStatus, AliPay.PAY_REPEAT)) {//------>交易重复
                    }
                }
            });
}

4.回调类

/**
* 支付宝回调code值
*/

public class AliPay {

    public static final String PAY_OK = "9000";//支付宝支付成功
    public static final String PAY_PROCESSING_UNKNOWN = "8000";//正在处理中,支付结果未知(有可能已经支付成功),请查询商户订单列表中订单的支付状态
    public static final String PAY_FAIL = "4000";//支付宝支付失败
    public static final String PAY_REPEAT = "5000";//支付宝支付重复请求
    public static final String PAY_CANCEL = "6001";//用户中途取消
    public static final String PAY_NET_ERROR = "6002";//网络连接出错
    public static final String PAY_UNKNOWN = "6004";//支付结果未知(有可能已经支付成功),请查询商户订单列表中订单的支付状态
}


/**
* 支付宝回调
*/

public class PayResult {
    private String resultStatus;
    private String result;
    private String memo;

    public PayResult(Map<String, String> rawResult) {
        if (rawResult == null) {
            return;
        }

        for (String key : rawResult.keySet()) {
            if (TextUtils.equals(key, "resultStatus")) {
                resultStatus = rawResult.get(key);
            } else if (TextUtils.equals(key, "result")) {
                result = rawResult.get(key);
            } else if (TextUtils.equals(key, "memo")) {
                memo = rawResult.get(key);
            }
        }
    }

    @Override
    public String toString() {
        return "resultStatus={" + resultStatus + "};memo={" + memo
            + "};result={" + result + "}";
    }

    /**
     * @return the resultStatus
     */
    public String getResultStatus() {
        return resultStatus;
    }

    /**
     * @return the memo
     */
    public String getMemo() {
        return memo;
    }

    /**
     * @return the result
     */
    public String getResult() {
        return result;
    }
}

个人博客地址

相关文章

  • Android 调用支付宝

    1.接入支付宝 接入前准备 商户需要进行审核签约 密钥管理(生成公私钥) 正式接入 服务端私钥必须放在服务端,签名...

  • iOS和android唤起支付宝一直显示系统繁忙

    不管是iOS还是android在接入支付宝时,都要先从后台获取一个payOrder,然后调用唤起支付宝的接口 但是...

  • Android支付宝支付集成

    Android支付宝支付 标签: android Android支付宝支付使用的流程介绍 支付宝流程介绍 支付宝流...

  • Android 常用方法摘记

    调用系统方法,分享文本图片等(2016-12-06 19:16:43) Android调用微信扫一扫和支付宝扫一扫...

  • 远程服务(aidl)

    概述:在Android中,一个应用程序可以调用另一个程序的服务:如支付宝支付 这种被调用的服务称之为远程服。使用远...

  • Android与js互调

    一、Javascript调用Android代码 二、Android调用Javascript代码

  • Android 开发在webview中打开微信支付、支付宝、QQ

    在Android实际开发中往往会遇到不在项目中添加微信,支付宝,QQ钱包支付的SDK,但是还是要调用本地App进行...

  • 支付宝sdk使用

    支付宝app调用 1 支付宝调用遇到的问题:(私钥和公钥) 公钥: 是交给你的服务端和支付宝开放平台上面的 私钥:...

  • 支付宝APP支付集成文档

    一、开发前提 适用于商家在App应用中集成支付宝支付功能。商家APP调用支付宝提供的SDK调用支付宝客户端内的支付...

  • WebView与js的交互

    Android与js相互调用的桥梁是WebView 1:Android通过WebView调用js 调用js代码实用...

网友评论

      本文标题:Android 调用支付宝

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