安卓手机app添加支付宝支付开发教程

之前讲了一篇博客关与支付宝集成获取支付宝公钥与商户私钥的博客。这一片讲的是如何在项目中集成支付宝。首先要运行我们的Demo.就是配置好公钥与私钥的Demo。只要Demo 运行起来了,那么接下来,就是如何移植代码的问题了。

第一步:

将Demo中libs 文件夹下面的支付宝jar 包拷贝到 所需要引入的项目中的libs 文件下,如果没有此文件,可以自己在项目中新建libs 文件,并将sdk的jar包引入其中。

第二步:

配置AndroidManifest.xml文件。此文件大都是配置信息的。集成支付宝,当然也不例外。下面的代码也是从Demo中拷贝过来的,信息如下:

<!-- alipay sdk begin -->
     <activity
         android:name="com.alipay.sdk.app.H5PayActivity"
         android:configChanges="orientation|keyboardHidden|navigation"
         android:exported="false"
         android:screenOrientation="behind"
         android:windowSoftInputMode="adjustResize|stateHidden" >
     </activity>
     <!-- alipay sdk end -->
可以看到的是这是一个Activity.配置文件。就如平常的注册Activity 一样,放在application节点之中即可。下面是权限的配置:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

这是必要的权限,如果添加过的,就不需要重新添加了。没有的,则需要添加到里面。
第三步:

拷贝java文件,同样是Demo 文件中,在你需要引入支付宝的项目中新建一个包,来存放必须要的java 文件。分别是下面几个文件: Base64.java,PayResult.java与SignUtils.java 文件,我下载的是alipaySDK-20150610.jar 的jar 包。只需要引入这些文件即可。
第四步:
下面就是主要Activity的代码的引入了。主要代码如下:
 public static final String PARTNER = "注册账户的PID";
// 商户收款账号
public static final String SELLER = "支付宝收款账户";
// 商户私钥,pkcs8格式
public static final String RSA_PRIVATE = "商户私钥";
// 支付宝公钥
public static final String RSA_PUBLIC = "支付宝公钥";
 
private static final int SDK_PAY_FLAG = 1;
 
private static final int SDK_CHECK_FLAG = 2;
 
private Handler mHandler = new Handler() {
    public void handleMessage(Message msg) {
        switch (msg.what) {
        case SDK_PAY_FLAG: {
            PayResult payResult = new PayResult((String) msg.obj);
 
            // 支付宝返回此次支付结果及加签,建议对支付宝签名信息拿签约时支付宝提供的公钥做验签
            String resultInfo = payResult.getResult();
 
            String resultStatus = payResult.getResultStatus();
 
            // 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档
            if (TextUtils.equals(resultStatus, "9000")) {
                Toast.makeText(PayDemoActivity.this, "支付成功",
                        Toast.LENGTH_SHORT).show();
            } else {
                // 判断resultStatus 为非“9000”则代表可能支付失败
                // “8000”代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
                if (TextUtils.equals(resultStatus, "8000")) {
                    Toast.makeText(PayDemoActivity.this, "支付结果确认中",
                            Toast.LENGTH_SHORT).show();
 
                } else {
                    // 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误
                    Toast.makeText(PayDemoActivity.this, "支付失败",
                            Toast.LENGTH_SHORT).show();
 
                }
            }
            break;
        }
        case SDK_CHECK_FLAG: {
            Toast.makeText(PayDemoActivity.this, "检查结果为:" + msg.obj,
                    Toast.LENGTH_SHORT).show();
            break;
        }
        default:
            break;
        }
    };
};

这段代码,是一个Handler,放在Java 文件的顶部。

 * call alipay sdk pay. 调用SDK支付
     *
     */
    public void pay() {
        // 订单
        String orderInfo = getOrderInfo("测试的商品", "该测试商品的详细描述", "0.01");
 
        // 对订单做RSA 签名
        String sign = sign(orderInfo);
        try {
            // 仅需对sign 做URL编码
            sign = URLEncoder.encode(sign, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
 
        // 完整的符合支付宝参数规范的订单信息
        final String payInfo = orderInfo + "&sign=\"" + sign + "\"&"
                + getSignType();
 
        Runnable payRunnable = new Runnable() {
 
            @Override
            public void run() {
                // 构造PayTask 对象
                PayTask alipay = new PayTask(PayDemoActivity.this);
                // 调用支付接口,获取支付结果
                String result = alipay.pay(payInfo);
 
                Message msg = new Message();
                msg.what = SDK_PAY_FLAG;
                msg.obj = result;
                mHandler.sendMessage(msg);
            }
        };
 
        // 必须异步调用
        Thread payThread = new Thread(payRunnable);
        payThread.start();
    }
 
    /**
     * check whether the device has authentication alipay account.
     * 查询终端设备是否存在支付宝认证账户
     *
     */
    public void check(View v) {
        Runnable checkRunnable = new Runnable() {
 
            @Override
            public void run() {
                // 构造PayTask 对象
                PayTask payTask = new PayTask(PayDemoActivity.this);
                // 调用查询接口,获取查询结果
                boolean isExist = payTask.checkAccountIfExist();
 
                Message msg = new Message();
                msg.what = SDK_CHECK_FLAG;
                msg.obj = isExist;
                mHandler.sendMessage(msg);
            }
        };
 
        Thread checkThread = new Thread(checkRunnable);
        checkThread.start();
 
    }
 
    /**
     * get the sdk version. 获取SDK版本号
     *
     */
    public void getSDKVersion() {
        PayTask payTask = new PayTask(this);
        String version = payTask.getVersion();
        Toast.makeText(this, version, Toast.LENGTH_SHORT).show();
    }
 
    /**
     * create the order info. 创建订单信息
     *
     */
    public String getOrderInfo(String subject, String body, String price) {
        // 签约合作者身份ID
        String orderInfo = "partner=" + "\"" + PARTNER + "\"";
 
        // 签约卖家支付宝账号
        orderInfo += "&seller_id=" + "\"" + SELLER + "\"";
 
        // 商户网站唯一订单号
        orderInfo += "&out_trade_no=" + "\"" + getOutTradeNo() + "\"";
 
        // 商品名称
        orderInfo += "&subject=" + "\"" + subject + "\"";
 
        // 商品详情
        orderInfo += "&body=" + "\"" + body + "\"";
 
        // 商品金额
        orderInfo += "&total_fee=" + "\"" + price + "\"";
 
        // 服务器异步通知页面路径
        orderInfo += "&notify_url=" + "\"" + "http://notify.msp.hk/notify.htm"
                + "\"";
 
        // 服务接口名称, 固定值
        orderInfo += "&service=\"mobile.securitypay.pay\"";
 
        // 支付类型, 固定值
        orderInfo += "&payment_type=\"1\"";
 
        // 参数编码, 固定值
        orderInfo += "&_input_charset=\"utf-8\"";
 
        // 设置未付款交易的超时时间
        // 默认30分钟,一旦超时,该笔交易就会自动被关闭。
        // 取值范围:1m~15d。
        // m-分钟,h-小时,d-天,1c-当天(无论交易何时创建,都在0点关闭)。
        // 该参数数值不接受小数点,如1.5h,可转换为90m。
        orderInfo += "&it_b_pay=\"30m\"";
 
        // extern_token为经过快登授权获取到的alipay_open_id,带上此参数用户将使用授权的账户进行支付
        // orderInfo += "&extern_token=" + "\"" + extern_token + "\"";
 
        // 支付宝处理完请求后,当前页面跳转到商户指定页面的路径,可空
        orderInfo += "&return_url=\"m.alipay.com\"";
 
        // 调用银行卡支付,需配置此参数,参与签名, 固定值 (需要签约《无线银行卡快捷支付》才能使用)
        // orderInfo += "&paymethod=\"expressGateway\"";
 
        return orderInfo;
    }
 
    /**
     * get the out_trade_no for an order. 生成商户订单号,该值在商户端应保持唯一(可自定义格式规范)
     *
     */
    public String getOutTradeNo() {
        SimpleDateFormat format = new SimpleDateFormat("MMddHHmmss",
                Locale.getDefault());
        Date date = new Date();
        String key = format.format(date);
 
        Random r = new Random();
        key = key + r.nextInt();
        key = key.substring(0, 15);
        return key;
    }
 
    /**
     * sign the order info. 对订单信息进行签名
     *
     * @param content
     *            待签名订单信息
     */
    public String sign(String content) {
        return SignUtils.sign(content, RSA_PRIVATE);
    }
 
    /**
     * get the sign type we use. 获取签名方式
     *
     */
    public String getSignType() {
        return "sign_type=\"RSA\"";
    }
 
}
这一段代码要和上一段代码放在一个Java 文件中,需要注意的一个方法是。 pay() 方法和getOrderInfo(); 需要注意的是,在我们选择支付宝支付的按钮中调用的 是 pay() 方法。而放在pay()方法中则需要调用getOrderInfo(),仔细发现,getOrderInfo()方法里面的三个参数。其中price 参数就是我们要消费的金额,当我们调用pay()方法的时候,就需要传入一个price 的参数,就是我们需要支付的金额。具体的金额怎么传入,计算,要根据项目需要来自己获取了,这样项目集成支付宝就圆满结束了。

时间: 2024-12-19 18:19:15

安卓手机app添加支付宝支付开发教程的相关文章

Android app第三方支付宝支付接入教程

支付宝的接入相对比较简单,看看支付宝官网的文档基本都能搞定,但是切记一点让你们的后台也要搞清楚支付宝的流程,重中之重. 1.注意事项 开发前一定要阅读支付宝官方文档 强烈建议签名等处理在后台处理,我这个是测试是在自己本地写的,不要吐槽 想获取支付宝合作商户ID,及支付宝公钥请点击支付宝链接,生成密钥及PKCS8转码工具在文档中 添加Android.permission.INTERNET权限和android.permission.ACCESS_NETWORK_STATE权限 要导入支付宝的包 2.

如何用H5来开发安卓手机App软件?用哪个开发软件?想做一下混合开发。求大神回复。

问题描述 如何用H5来开发安卓手机App软件?用哪个开发软件?想做一下混合开发.求大神回复. 如何用H5来开发安卓手机App软件?用哪个开发软件?想做一下混合开发.求大神回复. 解决方案 phonegap居于phonegap的cordova可以将html页面编译的兼容ios,Android及其他平台的安装包

支付宝支付开发——当面付条码支付和扫码支付

关键字:支付宝 当面付 条码支付 扫码支付 二维码支付 订单查询 退款作者:方倍工作室原文: http://www.cnblogs.com/txw1958/p/alipay-f2fpay.html    本文介绍支付宝中当面付下属的条码支付.扫码支付.订单查询.退款申请的集成开发过程.   本文分为以下五个部分: 条码支付和扫码支付介绍 申请应用 密钥生成及配置 API及SDK集成 条码支付.扫码支付.订单查询.退款申请   注: 支付宝支付开发有一定的门槛,如果您愿意为知识付费来节省您宝贵的时

微信支付开发教程

  本文介绍微信支付v2和v3版的微信支付开发教程,来源于微信公众平台官方网站. 原文:http://www.cnblogs.com/txw1958/p/wxpay-development-document.html   前言 微信支付现在分为v2版和v3版,2014年9月10号之前申请的为v2版,之后申请的为v3版.V3版的微信支付没有paySignKey参数.   一.微信支付v2  1. 使用网页授权接口 使用网页授权接口获取用户的基本信息. [微信公众号]OAuth2.0授权.pdf点击

接入支付宝安全问题-app使用支付宝支付安全问题

问题描述 app使用支付宝支付安全问题 想在app中接入支付宝sdk,但是有一个问题,如果用支付宝支付完毕,用户的钱充到app账户中,还没有来得及到服务器登记充值金额,就断网了.或者使用sdk发出支付命令后就电池没电关机了,大家是怎样保证这个支付的一致性的? 解决方案 有一个事物回滚的处理机制,如果有任何一个地方出了问题.他会把数据回滚回去 解决方案二: 支付宝考虑到这个问题的,你看看它的api,在它的api里应该有体现的 解决方案三: 你app应该是从服务器获取重置金额的吧,直接客户端存储?.

优酷发布安卓手机App最新版本 加强与PC的多屏互动

4月17日,优酷发布安卓手机App的http://www.aliyun.com/zixun/aggregation/29707.html">最新版本,此次新版全面提升稳定性,并加强了与PC的多屏互动. 在优酷站内6186.html">播放器下方有一个"用手机看"的功能,点开可以得到现在正在看的视频的二维码,而通过最新版的优酷App便可以直接扫描该二维码并转移到手机或平板上接着观看,真正实现从网页把优酷视频带走看. 新版本对于鼓励用户登录并加强了用户习惯分

怎么去除安卓手机app软件广告

怎么去除安卓手机app软件广告 我们在手机中安装xposed框架了,这个安装只要网上搜索下载并安装即可了. 1.之后再在手机中打开xposed框架 然后我们在xposed框架中搜索 MinMinGuard 如下图所示 2.找到 MinMinGuard,然后我们安装之后点击 重启手机 3.由于MinMinGuard 没有广告检测机制,我们就只能对于那些已知存在广告的软件进行去除. 下面看个例子 <1>打开MinMinGuard 找到有道词典(也可以直接搜索),可以看到程序名下面已经有红字了. &

支付宝支付开发——当面付条码支付和扫码支付实例_php实例

本文介绍支付宝中当面付下属的条码支付.扫码支付.订单查询.退款申请的集成开发过程.  本文分为以下五个部分: 条码支付和扫码支付介绍 申请应用 密钥生成及配置 API及SDK集成 条码支付.扫码支付.订单查询.退款申请  一.条码支付及二维码支付介绍 1. 条码支付 条码支付是支付宝给到线下传统行业的一种收款方式.商家使用扫码枪等条码识别设备扫描用户支付宝钱包上的条码/二维码,完成收款.用户仅需出示付款码,所有收款操作由商家端完成.其使用场景如下: 业务流程: 使用步骤: 用户登陆支付宝钱包,点

【支付宝支付】手机网页内 支付宝支付实现过程

支付宝支付,相比较微信支付,封装了提供给开发者使用的接口,开发者可以在蚂蚁金服开放平台先把开发DEMO下载下来 手机网站内支付    下载地址:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.tFuJYY&treeId=54&articleId=106682&docType=1   在下载的DEMO中,可以找到需要调用的支付宝封装的架包 请自行引入到自己的项目中.   ------------------