android 集成支付宝支付

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;
            }
        }
    };
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android集成支付宝支付可以通过以下步骤完成。 首先,注册支付宝开发者账号并创建应用,获得必要的应用ID和密钥。 其次,将支付宝SDK导入到项目中。可以通过Gradle或手动导入方式进行。 接下来,在需要使用支付宝支付Activity中,添加支付宝支付的逻辑。 首先,创建支付宝支付的请求参数,包括订单号、订单金额、商品名称等必要信息。然后使用支付宝提供的接口将请求参数进行签名,生成最终的支付参数。 接着,调用支付宝提供的支付接口,将支付参数传入,并设置支付结果的回调监听。用户触发支付时,将会跳转到支付宝支付页面。 最后,在回调监听中处理支付结果。支付宝支付完成后,会通过回调返回支付结果。根据返回的支付结果,可以进行相应的操作,如更新订单状态、跳转到支付成功页面等。 需要注意的是,为了保障支付安全,建议在服务器端进行订单的签名和验签操作,避免将密钥等敏感信息暴露在客户端。 以上就是Android集成支付宝支付的基本流程,开发者可以根据具体需求进行相应的参数设置和结果处理。 ### 回答2: 在Android平台上集成支付宝支付是较为常见的一种支付方式,下面我会用300字回答这个问题。 首先,为了集成支付宝支付,我们需要在支付宝开放平台上注册一个开发者账号,并创建一个应用。然后,我们需要下载支付宝提供的SDK,并将其引入到我们的Android工程中。在引入SDK后,我们可以根据支付宝提供的文档和示例代码进行具体的集成操作。 集成支付宝支付的过程主要包括以下几个步骤: 1. 在AndroidManifest.xml文件中配置支付宝支付所需的权限、服务以及activity。 2. 在应用的代码中,我们需要创建一个支付宝客户端实例,并配置相应的支付参数,如商户ID、订单号、金额等。 3. 调用支付宝客户端实例的支付接口,将支付参数传递给支付宝服务器。 4. 支付宝服务器会返回一个支付结果,我们可以在回调方法中处理这个支付结果,并根据支付结果的状态进行相应的操作,如更新订单状态、跳转到支付成功页面等。 除了以上基本的支付流程外,我们还可以根据需求添加一些附加功能,如查询订单状态、退款等。 在集成支付宝支付时,我们还需要注意一些细节问题。例如,支付宝要求我们的应用必须使用HTTPS协议与其服务器进行通信,因此我们需要确保我们的应用开启了相应的网络权限,并在网络请求时使用HTTPS协议。 另外,为了保证支付安全,我们还需要在支付宝开放平台上生成一个RSA密钥,并将其配置到我们的应用中。 总的来说,集成支付宝支付相对来说并不复杂,只需要按照支付宝的文档和示例代码进行操作,就可以使我们的应用支持支付宝支付功能了。而支付宝支付作为一种简单、安全、方便的支付方式,可以为我们的应用提供更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值