android客户端调用支付宝,主要是获取订单信息后,唤起对应支付平台进行支付业务

操作流程,小白表示对整体的流程不是很清楚,这里只是大致说下测通支付流程

第一步:仿照文档上写,

地址:支付宝集成流程

android 支付宝支付demo android调用支付宝支付_支付宝


导入jar包,配置写进去,混淆一般都要写的,写好之后

回去看看支付宝的demo,看看PayDemoActivity

android 支付宝支付demo android调用支付宝支付_支付宝_02

我标记了orderInfo ,这个是订单,这个很重要,

不需要支付宝登录的话里面的授权就无视他就好了,还有的就是那个H5pay也可以无视,demo里面只是为了展示,sdk里面有所以项目中就不用在写了,

在看下面这句话

android 支付宝支付demo android调用支付宝支付_支付宝_03

是启动的方法,请求数据的时候用到,

准备好了之后就开始写了

假如你有一个按钮 你写了一个方法

android 支付宝支付demo android调用支付宝支付_ide_04

flag是判断方法,请无视呢,

先定义订单:String orderInfo= "";

把demo的全部复制过来吧,一行一行写估计很多人不明白

我要说几点NetUtils 是项目中封装的请求数据的类,CardPay是一个bean,自己写的,

我这个是购卡,请求后台一个用户id和卡的编号,这些都是自己项目的需求写的。

主要是拿到数据后发送请求,

Thread payThread = new Thread( payRunnable );
            payThread.start();

那个PayResult直接从demo复制过来就行,

这样就能吊起支付宝了

String orderInfo = "";
private void zhifubaopay() {
    setProgressContent("请求中");
    showProgressDialog();
    Pay z = new Pay();
    z.setAccount_Id(mUser.getAccount_Id());
    z.setMerName(merName);
    z.setMerCode(merCode);
    z.setSerCode(serCode);
    z.setPayMethod(2);
    NetUtils.getInstance().post(Constant.ServicePayment, z, new NetUtils.NetDataBack() {
        @Override
        public void onback(String s, Call call, Response response) {
            Gson gson = new Gson();
            PayWeixin p = gson.fromJson( s, PayWeixin.class );
            if (p.getResultCode().equals( Login.RIGHT_CODE )) {
                orderInfo =  p.getJsonData().getOrdercode();//从Ordercode中拿到数据
                Thread payThread = new Thread( payRunnable );
                payThread.start();
                dissmissProgressDialog();
            } else {
                showToast( "支付失败" );
            }


        }

        @Override
        public void onError(String error) {

        }
    } );
}

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<String, String>) msg.obj );
                /**
                 对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
                 */
                String resultInfo = payResult.getResult();// 同步返回需要验证的信息
                String resultStatus = payResult.getResultStatus();
                // 判断resultStatus 为9000则代表支付成功
                if (TextUtils.equals( resultStatus, "9000" )) {
                    // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
                    Toast.makeText(PayActivity.this, "支付成功", Toast.LENGTH_SHORT ).show();
                } else {
                    // 该笔订单真实的支付结果,需要依赖服务端的异步通知。
                    Toast.makeText(PayActivity.this, "支付失败", Toast.LENGTH_SHORT ).show();
                }
                break;
            }

        }
    }
};

Runnable payRunnable = new Runnable() {
    @Override
    public void run() {
        PayTask alipay = new PayTask(PayActivity.this );
        Map<String, String> result = alipay.payV2( orderInfo, true );
        Log.i( "msp", result.toString() );
        Message msg = new Message();
        msg.what = SDK_PAY_FLAG;
        msg.obj = result;
        mHandler.sendMessage( msg );
    }
};