美文网首页
Android 支付宝支付

Android 支付宝支付

作者: 孤影暗刃 | 来源:发表于2020-05-08 19:01 被阅读0次

    现在支付已经是非常的普遍的需求了,所以今天来做一个简单的支付

    废话不多说,开始搭建环境

    首先肯定是jar包

    implementation(name: ‘alipaySdk-15.7.4-20200228192259’, ext: ‘aar’)

    这是在grade(:app)里面的方法,也可以去支付宝的官网下载jar包。

    然后在lib下添加aar的包

    下载地址

    解压后就可以找到啦

    然后是最重要的一步,因为As无法识别AAR的包,所以要手动配置

    在project的allprojects配置

    flatDir {

    dirs ‘libs’

    }

    然后打开刚刚下载的Android的SDK中,有一个demo,找到里面的payResult

    然后将它放在自己的项目中

    现在准备工作完成了,接下来就是正菜了。

    开始支付代码

    此代码是demo里的支付方法

    /**

    * 支付宝支付业务示例

    */

    public void payV2(View v) {

        String info;

        JSONObject jsonObject;

        OkGo.<String>post(API.BASE_SERVER_IP + "order/exhibitionOrderPay").execute(new StringCallback() {

            @Override

            public void onSuccess(Response<String> response) {

                Log.e("测试", response.body());

                try {

                    data = new JSONObject(response.body()).optString("Data");

                } catch (JSONException e) {

                    e.printStackTrace();

                }

                final Runnable payRunnable = new Runnable() {

                    @Override

                    public void run() {

                        PayTask alipay = new PayTask(PayTest.this);

                        Map<String, String> result = alipay.payV2(data, true);

                        Log.i("msp", result.toString());

                        Message msg = new Message();

                        msg.what = SDK_PAY_FLAG;

                        msg.obj = result;

                        mHandler.sendMessage(msg);

                    }

                };

                // 必须异步调用

                Thread payThread = new Thread(payRunnable);

                payThread.start();

            }

        });

    }

    但是呢 这里面的info就是服务器返回的订单信息,这个info也可以自己生成(详情请见demo),但是非常不建议这样做,这样做的话很不安全。

    所以还是建议去连一次网,向服务器请求数据info。

    然后这边的发送请求完成了,接下来就是结果的校验了,

    这部分也是支付宝的示例,可以直接使用。{

    private static final int SDK_PAY_FLAG = 1;

    @SuppressLint(“HandlerLeak”)

    private Handler mHandler = new Handler() {

    @SuppressWarnings(“unused”)

    public void handleMessage(Message msg) {

    switch (msg.what) {

    case SDK_PAY_FLAG: {

    @SuppressWarnings(“unchecked”)

    PayResult payResult = new PayResult((Map) msg.obj);

    /**

    * 对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。

    /

    String resultInfo = payResult.getResult();// 同步返回需要验证的信息

    String resultStatus = payResult.getResultStatus();

    // 判断resultStatus 为9000则代表支付成功

    if (TextUtils.equals(resultStatus, “9000”)) {

    // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。

    /

    *

    * 需要在此处向服务器发送一个校验请求,检测是否真的支付成功

    */

    Toast.makeText(PayTest.this, “支付成功”, Toast.LENGTH_SHORT).show();

    } else {

    // 该笔订单真实的支付结果,需要依赖服务端的异步通知。

    Toast.makeText(PayTest.this, “支付失败”, Toast.LENGTH_SHORT).show();

    }

    break;

    }

    但是要注意支付成功之后的9000不代表真的成功,因为某些特殊原因,钱是付出去了。然后支付宝会退款,所以钱到没到账户上才是,真的标准。

    因此建议成功以后向服务器发送一次请求校验。

    这是用progressDialog显示测试是否成功

    void showProgress() {

    String test = SpUtils.getString(this, “test”);

    progressDialog = new ProgressDialog(this);

    progressDialog.setTitle(“支付结果”);

    progressDialog.setMessage(“正在确认支付结果,请稍后”);

    progressDialog.setCanceledOnTouchOutside(false);

    progressDialog.setCancelable(false);

    progressDialog.show();

    new Handler().postDelayed(new Runnable() {

    @Override

    public void run() {

    OkGo.post(API.BASE_SERVER_IP + “test”)

    .headers(“test”, test)

    .params(“test”, test)

    .params(“test”, test)

    .execute(new StringCallback() {

    @Override

    public void onSuccess(com.lzy.okgo.model.Response response) {

    progressDialog.dismiss();

    JSONObject jsonObject = null;

    try {

    jsonObject = new JSONObject(response.body());

    } catch (JSONException e) {

    e.printStackTrace();

    }

    if (jsonObject.optInt(“Code”) == 0) {

    initToast();

    } else {

    ShowDialog(“支付结果待确认,请稍后确认”);

    }

    }

    });

    }

    }, 2000);

    }

    好了,支付就分享到这里。

    相关文章

      网友评论

          本文标题:Android 支付宝支付

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