android接入原生的支付宝支付(真的灰常简单,工具类)

首先把官方demo的payResult拷进代码工具中,然后添加官方jar包

public class AliPayUtils {

    private static final int SDK_PAY_FLAG = 1;

    private static Context ctx;

    private static String order_id;

    @SuppressLint("HandlerLeak")
    private static 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);
                    /**
                     * 同步返回的结果必须放置到服务端进行验证(验证的规则请看https://doc.open.alipay.com/doc2/
                     * detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665&
                     * docType=1) 建议商户依赖异步通知
                     */
                    String resultInfo = payResult.getResult();// 同步返回需要验证的信息
                    String resultStatus = payResult.getResultStatus();
                    // 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档
                    if (TextUtils.equals(resultStatus, "9000")) {
                        Toast.makeText(ctx, "支付成功", Toast.LENGTH_SHORT).show();

                    } else {
                        // 判断resultStatus 为非"9000"则代表可能支付失败
                        // "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
                        if (TextUtils.equals(resultStatus, "8000")) {
                            Toast.makeText(ctx, "支付结果确认中", Toast.LENGTH_SHORT)
                                    .show();

                        } else {
                            // 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误
                            Toast.makeText(ctx, "支付失败", Toast.LENGTH_SHORT).show();

                        }
                    }
                    break;
                }
                default:
                    break;
            }
        }

    };

    //这个是 我们做项目的时候要上传服务器的数据,如果是你们用的话,可以把这些参数直接掠过
    public static void pay(final Context context, String user_id, String user_phone, String design_name, final int font_id, float price,
                           int is_flash, String demeand, int pay_id, String target_data, String phone_type, int update_number) {
        ctx = context;
        OkHttpUtils.post().url(HttpUrl.submitOrder)
                .addParams("user_id", user_id)
                .addParams("user_phone", user_phone).
                addParams("design_name", design_name)
                .addParams("font_id", font_id + "")
                .addParams("price", price + "")
                .addParams("is_flash", is_flash + "")
                .addParams("demeand", demeand)
                .addParams("pay_id", pay_id + "")
                .addParams("phone_type", phone_type)
                .addParams("target_date", target_data)
                .addParams("update_number", update_number + "")
                .build()
                .execute(new StringCallback() {

                    @Override
                    public void onResponse(String response) {
                        parseJson(response);
                        Log.i("xys", response);


                    }

                    @Override
                    public void onError(Request request, Exception e) {
                        Toast.makeText(ctx, "网络连接超时", Toast.LENGTH_SHORT)
                                .show();
                    }
                });

    }


    protected static void parseJson(String response) {
        Gson gson = new Gson();
        AliPayBean json = gson.fromJson(response, AliPayBean.class);
        alipay(json.info);


    }

    public static void alipay(String sign_order) {
        Log.e("wch", sign_order);
        final String payInfo = sign_order;
        Runnable payRunnable = new Runnable() {
            @Override
            public void run() {
                // 构造PayTask 对象
                PayTask alipay = new PayTask((Activity) ctx);

                // 调用支付接口,获取支付结果
                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();

    }
}

最后直接在需要调用的接口使用就可以,很简单




展开阅读全文

没有更多推荐了,返回首页