您好,欢迎来到知库网。
搜索
您的当前位置:首页Android 调用支付宝

Android 调用支付宝

来源:知库网

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);
        }
    
            
            .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;
    }
}

Copyright © 2019- zicool.com 版权所有 湘ICP备2023022495号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务