支付宝支付(Android篇)

支付宝Android客户端集成流程

https://opendocs.alipay.com/open/204/105296

SDK&DEMO

https://opendocs.alipay.com/open/54/104509

1. 第一步:导入支付宝SDK

libs
alipaySdk-15.7.4-20200228192259.aar

2. 第二步:项目build.gradle中将libs目录作为依赖仓库

allprojects{
    repositories{
        // 支付宝 SDK AAR 包所需的配置
        flatDir{
            dirs'libs'
        }
}

3. 第三步:

build.gradle(:app)

dependencies{
        //...
        // 支付宝 SDK AAR 包所需的配置
        implementation(name:'alipaySdk-15.7.4-20200228192259',ext:'aar')
}

4. 第四步:添加权限

android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE

5. 接口调用

主要代码片段

final String orderInfo = pay.getJsonStr();//本地接口返回支付宝订单信息json字符串

final Runnable payRunnable = () -> {
PayTask alipay =new PayTask(OrderPayActivity.this);
    Map result = alipay.payV2(orderInfo, true);
    LogUtil.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();

private static final int SDK_PAY_FLAG =1;
private static final int SDK_AUTH_FLAG =2;

private HandlermHandler =new Handler() {
	@SuppressWarnings("unused")
	public void handleMessage(Message msg) {
	switch (msg.what) {
	case SDK_PAY_FLAG: {
		PayResult payResult =new PayResult((Map) msg.obj);
	    /**
	    * 对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
	    */                
	    String resultInfo = payResult.getResult();// 同步返回需要验证的信息
	     String resultStatus = payResult.getResultStatus();
	     // 判断resultStatus 为9000则代表支付成功
	     if (TextUtils.equals(resultStatus, "9000")) {
		// 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
		//                        			
		showAlert(OrderPayActivity.this, "Payment success:" + payResult);
	    	payResult(true);
	     }else if (TextUtils.equals(resultStatus, "6001")) {
		//取消支付
	           doBack();
	     }else {
		// 该笔订单真实的支付结果,需要依赖服务端的异步通知。
		//                        
		showAlert(OrderPayActivity.this, "Payment failed:" + payResult);
	    payResult(false);
	    }
		break;
	}
	
	case SDK_AUTH_FLAG: {
		AuthResult authResult =new AuthResult((Map) msg.obj, true);
	   	String resultStatus = authResult.getResultStatus();
		// 判断resultStatus 为“9000”且result_code
		// 为“200”则代表授权成功,具体状态码代表含义可参考授权接口文档
		if (TextUtils.equals(resultStatus, "9000") && 	TextUtils.equals(authResult.getResultCode(), "200")) {
			// 获取alipay_open_id,调支付时作为参数extern_token 的value
			// 传入,则支付账户为该授权账户
			showAlert(OrderPayActivity.this, "Authentication success:" + authResult);
	    }else {
	// 其他状态值则为授权失败
			showAlert(OrderPayActivity.this, "Authentication failed:" + authResult);
	    }
		break;
	    }
	default:
	break;
	}
	};
};
private void payResult(boolean success) {
	DialogUtils.showMsg(this, "提示", "订单支付" + (success ?"成功" :"失败,重新支付"),
	 (context, builder, dialog, dialogId, which, editText) -> {
		EventBus.getDefault().post(new EventBean(Constant.Event_Msg.PAY_SUCCESS));
		finish();
	    }, 
	    (context, builder, dialog, dialogId, which, editText) -> {
	if (success) {
		EventBus.getDefault().post(new EventBean(Constant.Event_Msg.PAY_SUCCESS));
		finish();
	        }
	}, !success, "取消", "确定", false);
}
private void doBack() {
	DialogUtils.showMsg(this, "提示", "您的订单还未支付完成,请尽快完成支付。", 
	(context, builder, dialog, dialogId, which, editText) -> {
	EventBus.getDefault().post(new EventBean(Constant.Event_Msg.PAY_SUCCESS));
	        finish();
	    }, (context, builder, dialog, dialogId, which, editText) -> {
	}, true, "确认离开", "继续支付", false);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值