android 集成支付宝支付

本文介绍如何在Android应用中集成支付宝支付功能,包括导入支付宝SDK、注册Activity、调用支付接口及处理支付结果等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,导入jar包
2,manifest文件中注册activity
  <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,调起支付
联网获取符合支付宝参数规范的订单信息-->调起支付,获取同步结果-->联网通知后台同步结果
/**
     * 联网获取完整的符合支付宝参数规范的订单信息,并调用支付接口
     */
    private void testAlipay(String orderId, final Context context) {
        RequestParams rp=new RequestParams();
        rp.addBodyParameter("userid",""+((MyApplication)((Activity)context).getApplication()).getResign().getResultMap().getUserid());
        rp.addBodyParameter("orderid",""+orderId);
        new HttpUtils().send(HttpRequest.HttpMethod.POST, UrlUtils.getOrderPayUrl(), rp, new RequestCallBack<String>() {
            @Override
            public void onSuccess(ResponseInfo<String> responseInfo) {
                PayBean pb = new Gson().fromJson(responseInfo.result, PayBean.class);
                if (BuildConfig.DEBUG){
                    Log.e("tag", "getResultCode:" + pb.getResultCode());
                }
                switch (pb.getResultCode()) {
                    case "200":
                        try {
                            //仅需对sign 做URL编码
                            String sign = URLEncoder.encode(pb.getResultMap().getSign(), "UTF-8");
                            final String payInfo = pb.getResultMap().getSignContent() + "&sign=" + sign;
                            Runnable payRunnable = new Runnable() {
                                @Override
                                public void run() {
                                    // 构造PayTask对象
                                    PayTask alipay = new PayTask((Activity) context);
                                    // 调用支付接口,获取支付结果
                                    String result = alipay.pay(payInfo, true);
                                    Message msg = new Message();
                                    msg.what = SDK_PAY_FLAG;
                                    msg.obj = result;
                                    mHandler.sendMessage(msg);
                                }
                            };
                            // 必须异步调用
                            Thread payThread = new Thread(payRunnable);
                            payThread.start();
                        } catch (UnsupportedEncodingException e) {
                            e.printStackTrace();
                        }
                        break;
                    case "210":
                        Toast.makeText(context, "订单已完成", Toast.LENGTH_SHORT).show();
                        break;
                    case "211":
                        Toast.makeText(context,"订单已付款",Toast.LENGTH_SHORT).show();
                        break;
                    case "212":
                        Toast.makeText(context,"等待买家付款",Toast.LENGTH_SHORT).show();
                        break;
                }
            }
            @Override
            public void onFailure(HttpException e, String s) {
                Toast.makeText(context,"网络异常",Toast.LENGTH_SHORT).show();
            }
        });
    }
/**
     * 支付结果回调
     * */
    @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();
                    // 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档
                    if (TextUtils.equals(resultStatus, "9000")) {
                        RequestParams rp=new RequestParams();
                        rp.addBodyParameter("memo",payResult.getMemo());
                        rp.addBodyParameter("result",payResult.getResult());
                        rp.addBodyParameter("resultStatus",payResult.getResultStatus());
                        new HttpUtils().send(HttpRequest.HttpMethod.POST, UrlUtils.getNotifyPayUrl(), rp, new RequestCallBack<String>() {
                            @Override
                            public void onSuccess(ResponseInfo<String> responseInfo) {
                                PayBean pb = new Gson().fromJson(responseInfo.result, PayBean.class);
                                switch (pb.getResultCode()) {
                                    case "200":
                                        Toast.makeText(context, "支付成功", Toast.LENGTH_SHORT).show();
                                        //待刷新订单状态
                                        ((HaveOrderActivity)((MyApplication)((Activity)context).getApplication()).getActivities().get(0)).refreshList();
                                        break;
                                    default:
                                        Toast.makeText(context, pb.getResultCode(), Toast.LENGTH_SHORT).show();
                                }
                            }
                            @Override
                            public void onFailure(HttpException e, String s) {
                                Toast.makeText(context, "网络异常", Toast.LENGTH_SHORT).show();
                            }
                        });
                    } else {
                        // 判断resultStatus 为非"9000"则代表可能支付失败
                        // "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
                        if (TextUtils.equals(resultStatus, "8000")) {
                            Toast.makeText(context, "支付结果确认中", Toast.LENGTH_SHORT).show();
                        } else {
                            // 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误
                            Toast.makeText(context, "支付失败", Toast.LENGTH_SHORT).show();
                        }
                    }
                    break;
                }
                default:
                    break;
            }
        }
    };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值