美文网首页
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 调用支付宝

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