Android 集成支付宝sdk 支付

Android App支付系列(二):支付宝SDK接入详细指南(附官方支付demo) 一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统对于资源有限的公司来说显然不太明智,国内已经有多家成熟的移动支付提供商,阿里就是其中之一。 本文分享支付宝app支付sdk的接入。 阅读详情
AI摘要

本文详细介绍了如何在Android应用中集成支付宝SDK,包括添加依赖、配置Activity、创建支付结果处理类以及实现支付接口,重点展示了支付成功和失败时的回调处理。,

集成支付宝sdk
链接:官方文档
1、导入依赖

dependencies {
    // 添加下方的内容
    api 'com.alipay.sdk:alipaysdk-android:+@aar'
    // ... 其它依赖项
}

2、依赖导入后在AndroidManifest.xml文件里添加 下面两个类

		<activity
            android:name="com.alipay.sdk.app.H5PayActivity"
            android:configChanges="orientation|keyboardHidden|navigation|screenSize"
            android:exported="false"
            android:screenOrientation="behind"
            android:windowSoftInputMode="adjustResize|stateHidden"
            tools:replace="android:configChanges" />
        <activity
            android:name="com.alipay.sdk.app.H5AuthActivity"
            android:configChanges="orientation|keyboardHidden|navigation"
            android:exported="false"
            android:screenOrientation="behind"
            android:windowSoftInputMode="adjustResize|stateHidden"
            tools:replace="android:configChanges" />

3、创建支付返回的接口回调 success/error

public class PayResult {
	private String resultStatus;
	private String result;
	private String memo;

	public PayResult(Map<String, String> rawResult) {
		if (rawResult == null) {
			return;
		}

		for (String key : rawResult.keySet()) {
			if (TextUtils.equals(key, "resultStatus")) {
				resultStatus = rawResult.get(key);
			} else if (TextUtils.equals(key, "result")) {
				result = rawResult.get(key);
			} else if (TextUtils.equals(key, "memo")) {
				memo = rawResult.get(key);
			}
		}
	}

	@Override
	public String toString() {
		return "resultStatus={" + resultStatus + "};memo={" + memo
				+ "};result={" + result + "}";
	}

	/**
	 * @return the resultStatus
	 */
	public String getResultStatus() {
		return resultStatus;
	}

	/**
	 * @return the memo
	 */
	public String getMemo() {
		return memo;
	}

	/**
	 * @return the result
	 */
	public String getResult() {
		return result;
	}
}

4、创建自己应用的支付的类
例如:这里包含了微信支付忽略掉就好

public class PayActivity extends BaseActivity<ActivityPayBinding>  implements IWXAPIEventHandler {

    private static final int SDK_PAY_FLAG = 1;
    private String orderInfo; // 订单Id
    private String accessToken;
    private IWXAPI api;
    private boolean paySuccess = false;
    private Handler mHandler = new Handler() {
        @SuppressLint("HandlerLeak")
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(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则代表支付成功
                    // 9000为支付成功
                    // 4000为支付失败
                    // 6001为取消支付
                    // 8000为支付结果确认中
                    if (TextUtils.equals(resultStatus, "9000")) {
                        // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
                        showToast("支付成功");
                        mViewBinding.paySuccessLayout.payRoot.setVisibility(View.VISIBLE);
                        mViewBinding.payPriceLayout.setVisibility(View.GONE);
                        mViewBinding.titleBar.textTitle.setVisibility(View.GONE);
                        mViewBinding.surePay.setVisibility(View.GONE);
                        paySuccess = true;
                    } else {
                        // 该笔订单真实的支付结果,需要依赖服务端的异步通知。
                        showToast("取消支付");
                    }
                    break;
                }

            }
        }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 初始化支付宝SDK
        PayTask payTask = new PayTask(this);

        // 初始化微信支付API
        api = WXAPIFactory.createWXAPI(PayActivity.this, Contents.APP_ID);

    }

    @Override
    protected void initView() {
        mViewBinding.titleBar.textTitle.setText("安全收银台");
        String price = getIntent().getExtras().getString("price");
        orderInfo = getIntent().getExtras().getString("orderCode");
        accessToken = getSharedPreferences("UserInformation", Context.MODE_PRIVATE).getString("access_token", "");
        mViewBinding.payPrice.setText(price);
        mViewBinding.paySuccessLayout.payPrice.setText(price);

    }

    @Override
    protected void initData() {
        mViewBinding.titleBar.backHomePage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (paySuccess) {
                    finish();
                    return;
                }
                showCancelPayDialog();
            }
        });

        mViewBinding.selectAliPay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mViewBinding.selectWechatPay.setChecked(false);
                mViewBinding.selectAliPay.setChecked(true);
            }
        });

        mViewBinding.selectWechatPay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mViewBinding.selectWechatPay.setChecked(true);
                mViewBinding.selectAliPay.setChecked(false);
            }
        });

        // 确认付款
        mViewBinding.surePay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!mViewBinding.selectWechatPay.isChecked() && !mViewBinding.selectAliPay.isChecked()) {
                    showToast("请选择支付方式");
                    return;
                }

                // 支付宝支付
                if (mViewBinding.selectAliPay.isChecked()) {
                    getRequestAlipayPayIdOrWechatPrepayId(Api.GET_ALIPAY_PAYID, "2");
                }

                // 微信支付
                if (mViewBinding.selectWechatPay.isChecked()) {
                    getRequestAlipayPayIdOrWechatPrepayId(Api.GET_WECHAT_PREPAYID, "1");
                }

            }
        });

    }

    private void getRequestAlipayPayIdOrWechatPrepayId(String url, String payWay) {
        HashMap<String, String> params = new HashMap<>();
        params.put("order_code", orderInfo);
        OkHttpUtils.get()
                .get(this
                        , url
                        , accessToken
                        , params
                        , new JsonResponseHandler() {
                            @Override
                            public void onFailure(int statusCode, String error_msg) {
                                super.onFailure(statusCode, error_msg);
                            }

                            @Override
                            public void onSuccess(int code, JSONObject jsonBody) {
                                super.onSuccess(code, jsonBody);

                                try {
                                    JSONObject jsonObject = new JSONObject(String.valueOf(jsonBody));
                                    int code1 = jsonObject.getInt("code");
                                    if (code1 != Contents.SUCCESS) {
                                        showToast(jsonObject.getString("msg"));
                                        return;
                                    }

                                } catch (JSONException e) {
                                    throw new RuntimeException(e);
                                }

                                Gson gson = new Gson();
                                if (payWay.equals("2")) { // 支付宝
                                    DataGetAlipayPayId response = gson.fromJson(String.valueOf(jsonBody), DataGetAlipayPayId.class);
                                    if (response.getCode() == Contents.SUCCESS) {
                                        String data = response.getData();
                                        Runnable payRunnable = new Runnable() {
                                            @Override
                                            public void run() {
                                                PayTask alipay = new PayTask(PayActivity.this);
                                                Map <String,String> result = alipay.payV2(data ,true);
                                                Message msg = new Message();
                                                msg.what = SDK_PAY_FLAG;
                                                msg.obj = result;
                                                // 支付后返回的结果
                                                mHandler.sendMessage(msg);
                                            }
                                        };
                                        // 必须异步调用
                                        Thread payThread = new Thread(payRunnable);
                                        payThread.start();
                                    }
                                } else if (payWay.equals("1")) { // 微信
                                    DataGetWechatPrepayId response = gson.fromJson(String.valueOf(jsonBody), DataGetWechatPrepayId.class);
                                    if (response.getCode() == Contents.SUCCESS) {
                                        String prepayId = response.getData().getPrepayId();
                                        getRequestWechatSign(prepayId); // 微信支付获取签名
                                    }
                                }
                            }
                        });

    }

    // 微信支付获取签名
    private void getRequestWechatSign(String prepayId) {
        HashMap<String, String> params = new HashMap<>();
        params.put("prepay_id", prepayId);

        OkHttpUtils.get()
                .get(this
                        , Api.GET_WECHAT_SIGN
                        , accessToken
                        , params
                        , new JsonResponseHandler() {
                            @Override
                            public void onFailure(int statusCode, String error_msg) {
                                super.onFailure(statusCode, error_msg);

                            }

                            @Override
                            public void onSuccess(int code, JSONObject jsonBody) {
                                super.onSuccess(code, jsonBody);
                                Gson gson = new Gson();
                                DataGetWechatSign response = gson.fromJson(String.valueOf(jsonBody), DataGetWechatSign.class);
                                if (response.getCode() == Contents.SUCCESS) {
                                    PayReq request = new PayReq();
                                    request.appId = Contents.APP_ID;
                                    request.partnerId = Contents.PARTNER_ID;
                                    request.prepayId= prepayId;
                                    request.packageValue = "Sign=WXPay";
                                    request.nonceStr= response.getData().getNonceStr();
                                    request.timeStamp= response.getData().getTimeStamp();
                                    request.sign= response.getData().getSign();
                                    api.sendReq(request);
                                }
                            }
                        });


    }


    private void showCancelPayDialog() {
        View view = LayoutInflater.from(this).inflate(R.layout.dialog_sure_cancel_pay, null, false);
        TextView sureLeave = view.findViewById(R.id.sure_leave);
        TextView continuePay = view.findViewById(R.id.continue_payment);

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setView(view);
        AlertDialog alertDialog = builder.create();
        alertDialog.show();
        sureLeave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alertDialog.dismiss();
                Intent intent = new Intent(PayActivity.this, OrderActivity.class);
                Bundle bundle = new Bundle();
                bundle.putInt("position", 0);
                intent.putExtras(bundle);
                startActivity(intent);
                finish();
            }
        });
        continuePay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alertDialog.dismiss();

                if (!mViewBinding.selectWechatPay.isChecked() && !mViewBinding.selectAliPay.isChecked()) {
                    showToast("请选择支付方式");
                    return;
                }

                // 支付宝支付
                if (mViewBinding.selectAliPay.isChecked()) {
                    getRequestAlipayPayIdOrWechatPrepayId(Api.GET_ALIPAY_PAYID, "2");
                }

                // 微信支付
                if (mViewBinding.selectWechatPay.isChecked()) {
                    getRequestAlipayPayIdOrWechatPrepayId(Api.GET_WECHAT_PREPAYID, "1");
                }

            }
        });
        alertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
            @Override
            public void onDismiss(DialogInterface dialog) {
                mViewBinding.popShowBgLayout.popShowBg.setVisibility(View.GONE);
            }
        });
    }

    @Override
    public void onReq(BaseReq baseReq) {

    }

    @Override
    public void onResp(BaseResp baseResp) {

    }
}
支付宝SDK接入详细指南(附官方支付demo) 前言   一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统对于资源有限的公司来说显然不太明智,国内已经有多家成熟的移动支付提供商,阿里就是其中之一。  继《 Android App支付系列(一):微信支付接入详细指南》之后,有部分来自郭霖大神公众号:guolin_blog 的读者,和博客读者反馈,希望写一篇支付宝app支付sdk的接入博文。  笔者在此总结了下阿里旗下支付... 阅读详情

相关推荐

Spring Boot集成支付宝(最新版SDK)—— 手机支付

前言 前些日子写了一篇关于H5网页集成支付宝的文章: Spring Boot集成支付宝(最新版SDK)—— H5/网页支付 当时写了好久,往那一坐就是俩小时,写完直接就发布了,发布之后才感觉少点啥——只写了网页支付,忘了写移动端APP支付! APP集成支付宝,还是很简单的(当然建立在上一篇文章的基础上),本文应该写在上一篇文章的,但是上一篇文章的篇幅已经很长了,读起来会很累。 所以此文将作为上一篇文章的下集,请先看我的上一篇文章再回来读此文,再次贴出链接: Spring Boot集成支付宝(最新

wzy18210825916的博客 2359

接入alipay-sdk

沙箱环境申请地址:https://open.alipay.com/platform/appDaily.htm?tab=info 所需参数: //支付宝网关地址:https://openapi.alipay.com/gateway.do //支付宝申请的APPID //商户应用私钥(与支付宝数据交互时,保证数据安全,防止数据被篡改) //支付宝公钥(与支付宝数据交互时,保证数据安全,防止数据被篡改) //签名算法类型(RSA2或者RSA,支付宝推荐使用RSA2) //编码格式(utf-8,gb231

张钰杰杰杰杰杰的博客 6827

Android 集成支付宝SDK实现快捷支付--详解

公司最近要在项目中加入购物车功能,提到购物车那就自然少不了支付宝的身影啦。下面我们就来探讨一下如何在Android快速集成支付宝SDK。 支付宝的SDK目前已经更新到了2.0版本,这次的SDK相比上个版本的SDK来说,代码更佳简洁了,集成起来更加的方便快捷。 摘要:准备工作 如果是在公司开发,可以让相关部门和支付宝签约,申请一个卖家支付宝账号,可能要审核3-5个工作日,审核通过后支付宝会以邮

u014084504的专栏 1万+

Android 支付宝支付SDK接入

Android对接SDK不需要任何参数,只需要依赖官方aar即可 导入支付宝 SDK 在主项目的 build.gradle 中,添加下面的内容: allprojects { repositories { // 添加下面的内容 mavenCentral() // ... jcenter() 等其他仓库 } } 在您 App Module 的 build.gradle 中,添加下面的内容,将支付宝 SDK 作为项目依赖: depend.

github_38163856的博客 7419

Android移动支付(支付宝支付2017最新接入详解)

接入流程 一:公司开通支付宝商户号  二:注册登录蚂蚁金服开放平台创建应用  三:项目集成支付宝SDK 一:公司开通支付宝商户号 1 注册商户号:https://mobiless.alipay.com/ 可以把链接发给人事,让她弄一下,需要提交的资料也只能由人事来弄。      二:注册登录蚂蚁金服开放平台创建应用 蚂蚁金服开放平台:https://ope

一名屌丝程序员的秘密花园 1万+

Android平台以WebView方式集成H5+SDK和支付宝登录授权插件开发思路总结

首先附上Demo地址,大家可以去GitHub上面下载https://github.com/GitLGH/AlipayDemo 一:思路总结     蚂蚁金融开发平台上面对于支付宝登录授权部分使用的原生android方式进行配置的,而当前项目采用Hbuilder mui的方式,mui框架没有集成支付宝登录授权功能,这就需要我们使用H5+sdk的第二个用途,即通过原生代码扩展HTML5+ runt...

m0_37747750的博客 2850

Android集成支付宝支付SDK,实现支付功能

官方集成文档地址:https://docs.open.alipay.com/204/105296/ 一、导入支付宝SDK 1.将 alipaySdk-15.6.5-20190718211159.aar 包放在您的应用工程的 libs 目录下(图片中文件名仅做示例,请以实际 SDK 文件名为准):arr文件下载地址:https://download.csdn.net/download/githu...

Super Monster的博客 7468

支付宝Android SDK集成教程与实战

支付宝SDK的用户界面(UI)集成和自定义是提供给用户交互的关键一环,它直接影响着用户体验。开发者通过集成支付宝SDK来简化支付流程,同时需要对界面进行适当的自定义,以确保应用的UI风格一致性。自定义支付宝SDK的UI主要是为了符合应用的整体风格和用户体验。实现自定义的方法主要有:设置主题颜色:可以通过修改SDK的全局样式,改变主题颜色来适应应用的主题。定制布局:根据需要定制SDK的布局文件,可以在不改变业务逻辑的基础上调整界面元素。

weixin_35752645的博客 1043

Android 集成支付宝SDK实现快捷支付--填坑

Android 集成支付宝SDK实现快捷支付 sdkdemo java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0D07207B:asn1 encoding routines:ASN1_get_object:header too long

微凉一季的专栏 1万+

支付宝安卓支付SDK源码深度解析

支付宝安卓支付SDK作为一款广泛使用的支付工具,为开发者提供了简洁方便的接入方案。本章节将为大家揭开支付宝安卓支付SDK的神秘面纱,从源码级别进行浅入深的解读。我们首先从基础的框架结构开始,逐步过渡到核心功能的实现,再到异常处理与优化,为读者提供一个全面的了解支付宝安卓支付SDK的机会。概述支付宝SDK的安装和配置流程。解析SDK中关键模块的作用以及与之交互的核心类和方法。深入介绍支付宝支付流程的源码实现,包括客户端和服务器端的数据交互过程。

weixin_32389853的博客 640

低代码Agent开发框架使用指南(二)—Coze平台核心功能概览

本篇分享系统介绍了字节跳动推出的低代码智能体开发平台Coze。Coze以免费易用、多模型支持和便捷的跨平台发布为核心优势,显著降低了智能体开发门槛。文章详细解析了平台的六大核心功能:扩展能力边界的插件系统、增强认知的知识库、结构化数据管理的数据库、可视化图像处理的图像流、实现复杂逻辑编排的工作流,以及处理复杂任务的多智能体协作机制,全面展现了Coze平台的强大能力。

weixin_42782643的博客 1358

android 集成支付宝快捷支付 问题 rsa,Android 集成支付宝SDK实现快捷支付--填坑

刚给app集成了支付宝的android客户端快捷支付SDK,集成很简单,但是由于是涉及钱的问题,大家都会持谨慎态度,所以有很多小坑,粗心的话集成之路会很坎坷,对于集成步骤,我不想写了,没有必要,就看官方的SDK集成文档就好,内容也不多,对于集成步骤这个不推荐看博客,sdk本来就很精简了,真没有必要舍本逐末看别人写的博客,非常简单,仿照demo基本不许要用脑筋写代码,^_^。就记录一下遇到的坑吧,为...

weixin_35796207的博客 503

四足机械臂避坑指南:从URDF配置到逆运动学控制的完整流程

本文为四足机械臂(Loco-Manipulation)系统开发提供了一份详实的实战避坑指南。文章深入剖析了从URDF模型配置、核心控制循环设计到逆运动学(IK)求解与奖励函数构建的完整流程,重点讲解了如何避免关节命名错误、惯性参数设置不当、IK求解不稳定等常见陷阱,并强调了利用collision_bbox等可视化工具进行高效调试的方法,旨在帮助工程师构建稳定、高效的四足机械臂控制系统。

weixin_42509507的博客 192

android开发如何集成支付宝sdk

android开发如何集成支付宝sdkandroid集成支付宝其实是一件很简单的事情。后台的事情咱们不考虑。

qq_36162336的博客 763

R语言影像组学实战:从医学图像到预测模型的完整流程(附代码)

本文详细介绍了使用R语言进行影像组学分析的完整实战流程。从环境搭建、数据准备,到医学图像的特征提取与筛选,再到利用机器学习构建预测模型并进行评估,提供了清晰的步骤和可运行的R代码示例,帮助研究者和数据分析师掌握从医学图像到临床预测模型的核心技术。

qsc901234的博客 732

中兴交换机配置SSH登录

SSH是在传统的Telnet协议基础上发展起来的一种安全的远程登录协议。发送和接收数据时, SSH会自动对数据进行加密及解密。相比于Telnet,SSH能防止“中间人”攻击、DNS欺骗、IP 欺骗等,无论是在认证方式或者数据传输的安全性上都有很大的提高。SSH用户认证方式有3种,分别为本地(Local)认证、RADIUS认证和TACACS+认证。以表规划数据为例,说明配置SSH登录的步骤。

才怪的博客 7922

android集成支付宝sdk

因为由于公司项目接触到了集成支付宝,所以也就简单讲解一下android如何集成支付宝,这个没有大家想像 难 ,甚至可以说简单不可在简单了.  为什么呢?看到最后会知道了   第一步:运行demo 先获取支付宝的测试帐号,想必看到这个文章时大家也都已经有支付宝的测试帐号了,也是就公钥,私钥之类的 ,没有的话移步 https://open.alipay.com/platform/home....

a347563186的博客 264

OpenOCD入门到精通:第20章 Target 子系统源码分析

摘要:本章深入分析OpenOCD Target子系统的核心实现机制。重点包括:1) 通过target_type虚函数表实现多架构抽象,支持ARM、RISC-V等30+种目标;2) ARM ADIv5协议栈实现,包含DAP/AP核心数据结构和访问机制;3) 分层架构设计,从调试接口层到传输层的完整调用链路。系统采用面向对象思想,统一管理目标状态、寄存器缓存、断点/观察点等调试要素,为上层提供标准化的调试操作接口。

从事嵌入式linux android驱动开发,拥有全栈能力 178

alipay--- Android 集成支付宝SDK实现快捷支付--详解

Android 开发之Android 应用程序如何调用支付宝接口:https://software.intel.com/zh-cn/blogs/2015/03/05/android-android 公司最近要在项目中加入购物车功能,提到购物车那就自然少不了支付宝的身影啦。下面我们就来探讨一下如何在Android快速集成支付宝SDK。 支付宝的SDK目前已经更新到了2.0版本,这次的SD

jyw935478490的博客 3282

置顶必读(2) | 《YOLOv11实战:从入门到深度优化》目录导航篇(持续更新中)

🏆 本文收录于 《YOLOv11实战:从入门到深度优化》 专栏。 本专栏系统梳理并持续复现全网各类 YOLOv11 / YOLO系列改进方案与实战案例,目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。 内容坚持 持续更新 + 深度拆解 + 工程落地导向,不仅讲“怎么改”,更讲“为什么这样改、如何真正落地到项目中”。

**My Coding Family** 11万+

最近腾讯手机管家a.gray.Bulimia.a病毒提示决解方案

仅供参考(个人问题已解决 未申诉) 用户反馈app提示病毒图如下 然后下载生产包去https://www.virustotal.com/gui/这个网站去检测 果真提示病毒 重新加版本 打了个包 未加固 检测没问有问题 同一个包用360加固之后再检测有问题 ,但是没有a.gray.Bulimia.a报病毒 然后再用应用宝加固检测也没问题,个人以前都是用360加固的,很尴尬啊 最重要的一点的是,更新一个版本号,其余的啥都没改,更新替换手机的原来版本app,腾讯手机.

村头那抠脚大叔的专栏 3万+
上一篇: 在String字符串里选择指定的文字改变颜色并且添加点击事件
FuBing Simply
博客等级 码龄6年 22粉丝 10原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值