Android 第三方支付

1.从官方下载demo及sdk

2.将demo导入eclipse 或者studio

3.要实现真正的支付,需要用到APPID、PID、RSA_PRIVATE或者RSA2_PRIVATE

PayDemoActivity类页面

package com.alipay.sdk.pay.demo;

import java.util.Map;

import com.alipay.sdk.app.AuthTask;
import com.alipay.sdk.app.PayTask;
import com.alipay.sdk.pay.demo.util.OrderInfoUtil2_0;

import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.FragmentActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

/**
 *  重要说明:
 *  
 *  这里只是为了方便直接向商户展示支付宝的整个支付流程;所以Demo中加签过程直接放在客户端完成;
 *  真实App里,privateKey等数据严禁放在客户端,加签过程务必要放在服务端完成;
 *  防止商户私密数据泄露,造成不必要的资金损失,及面临各种安全风险;
 */
public class PayDemoActivity extends FragmentActivity {
    
    /** 支付宝支付业务:入参app_id */
    public static final String APPID = "";//填写


    
    /** 支付宝账户登录授权业务:入参pid值 */
    public static final String PID = "";//填写

/** 支付宝账户登录授权业务:入参target_id值 */
    public static final String TARGET_ID = "";

/** 商户私钥,pkcs8格式 */
    /** 如下私钥,RSA2_PRIVATE 或者 RSA_PRIVATE 只需要填入一个 */
    /** 如果商户两个都设置了,优先使用 RSA2_PRIVATE */
    /** RSA2_PRIVATE 可以保证商户交易在更加安全的环境下进行,建议使用 RSA2_PRIVATE */
    /** 获取 RSA2_PRIVATE,建议使用支付宝提供的公私钥生成工具生成, */
    /** 工具地址 */
    public static final String RSA2_PRIVATE = "";//填写,用秘钥生成工具生成
    private static final int SDK_PAY_FLAG = 1;
    private static final int SDK_AUTH_FLAG = 2;

@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();// 同步返回需要验证的信息
                Log.e("resultInfo", resultInfo);
                String resultStatus = payResult.getResultStatus();
                Log.e("resultStatus", resultStatus);
                // 判断resultStatus 为9000则代表支付成功
                if (TextUtils.equals(resultStatus, "9000")) {
                    // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
                    Toast.makeText(PayDemoActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
                } else {
                    // 该笔订单真实的支付结果,需要依赖服务端的异步通知。
                    Toast.makeText(PayDemoActivity.this, "支付失败", Toast.LENGTH_SHORT).show();
                }
                break;
            }
            case SDK_AUTH_FLAG: {
                @SuppressWarnings("unchecked")
                AuthResult authResult = new AuthResult((Map<String, String>) 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
                    // 传入,则支付账户为该授权账户
                    Toast.makeText(PayDemoActivity.this,
                            "授权成功\n" + String.format("authCode:%s", authResult.getAuthCode()), Toast.LENGTH_SHORT)
                            .show();
                } else {
                    // 其他状态值则为授权失败
                    Toast.makeText(PayDemoActivity.this,
                            "授权失败" + String.format("authCode:%s", authResult.getAuthCode()), Toast.LENGTH_SHORT).show();

}
                break;
            }
            default:
                break;
            }
        };
    };

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pay_main);
    }
    
    /**
     * 支付宝支付业务
     * payV2
     * @param v
     */
    public void payV2(View v) {
        if (TextUtils.isEmpty(APPID) || (TextUtils.isEmpty(RSA2_PRIVATE) && TextUtils.isEmpty(RSA_PRIVATE))) {
            new AlertDialog.Builder(this).setTitle("警告").setMessage("需要配置APPID | RSA_PRIVATE")
                    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialoginterface, int i) {
                            //
                            finish();
                        }
                    }).show();
            return;
        }
    
        /**
         * 这里只是为了方便直接向商户展示支付宝的整个支付流程;所以Demo中加签过程直接放在客户端完成;
         * 真实App里,privateKey等数据严禁放在客户端,加签过程务必要放在服务端完成;
         * 防止商户私密数据泄露,造成不必要的资金损失,及面临各种安全风险;
         *
         * orderInfo的获取必须来自服务端;
         */
        boolean rsa2 = (RSA2_PRIVATE.length() > 0);
        Map<String, String> params = OrderInfoUtil2_0.buildOrderParamMap(APPID, rsa2);
        String orderParam = OrderInfoUtil2_0.buildOrderParam(params);
        Log.e("orderParam", orderParam);
        String privateKey = rsa2 ? RSA2_PRIVATE : RSA_PRIVATE;
        Log.e("privateKey", privateKey);
        String sign = OrderInfoUtil2_0.getSign(params, privateKey, rsa2);
        Log.e("sign", sign);
        final String orderInfo = orderParam + "&" + sign;
        Log.e("orderInfo", orderInfo);
        Runnable payRunnable = new Runnable() {

@Override
            public void run() {
                PayTask alipay = new PayTask(PayDemoActivity.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);
            }
        };

Thread payThread = new Thread(payRunnable);
        payThread.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();
    }

/**
     * 原生的H5(手机网页版支付切natvie支付) 【对应页面网页支付按钮】
     *
     * @param v
     */
    public void h5Pay(View v) {
        Intent intent = new Intent(this, H5PayDemoActivity.class);
        Bundle extras = new Bundle();
        /**
         * url是测试的网站,在app内部打开页面是基于webview打开的,demo中的webview是H5PayDemoActivity,
         * demo中拦截url进行支付的逻辑是在H5PayDemoActivity中shouldOverrideUrlLoading方法实现,
         * 商户可以根据自己的需求来实现
         */
        String url = "http://m.taobao.com";
        // url可以是一号店或者淘宝等第三方的购物wap站点,在该网站的支付过程中,支付宝sdk完成拦截支付
        extras.putString("url", url);
        intent.putExtras(extras);
        startActivity(intent);
    }

}

时间: 2024-10-23 08:10:58

Android 第三方支付的相关文章

Android中集成第三方支付

常见的第三方支付解决方案 支付宝支付 微信支付 银联支付 Ping++统一支付平台(需要继承服务器端和客户端) 短信支付 支付宝的集成流程 相关资料链接: 支付宝支付指引流程:支付指引流程 支付宝Android端集成流程:Android端集成流程 首先,支付宝支付准备工作 首先登录[支付宝开放平台]http://open.alipay.com/platform/home.htm,创建应用,并给应用添加App支付功能 由于App支付功能需要签约,因此需要上传公司信息和证件等资料进行签约 签约成功后

Android Pay,能冲破第三方支付围堵吗?

银联总算出手了,据说,它已决定在国产 Android 阵营手机厂商中推广其移动支付服务"Android Pay",并有望在今年第三季度推向市场.一时间,江湖上满满是它的传说. 文/张书乐 刊载于<计算机应用文摘>2015年第2期 其实这不是银联第一次出手移动支付.当年中国移动就和银联干过一架,为了移动支付技术标准,最后银联击败了中国移动,却被第三方支付巨头支付宝冷不丁抢了先机,然后银联沉默了,它意识到,有标准在手,远不如有用户在手来的实在. 但银联并没有认输,这不,这次银联

手机第三方支付产品安全性

前一阵<焦点訪谈>播放关于手机第三方支付的问题.当时没有注意. 今天特意使用了一下手机的上的几个第三方的app,忽然感触良多啊. 眼下手机上的第三方支付软件经常使用的主要有3个.支付宝.微信.易信(主要是本人手机上经常使用的这三个啊).以下就浅谈一下这几个安全性的问题. 首先拿本人自身说例吧,本人应该属于安全意识相对薄弱的,相信30%的人群应该和本人几乎相同的. 本人特征例如以下: 1.手机不设置password(如4数password和手势password),感觉没有啥隐私可防的. 2.手机

(转载)Android支付宝支付封装代码

Android支付宝支付封装代码 投稿:lijiao 字体:[增加 减小] 类型:转载 时间:2015-12-22我要评论 这篇文章主要介绍了Android支付宝支付封装代码,Android支付的时候肯定会使用支付宝进行支付,封装可以简化操作步骤,感兴趣的小伙伴们可以参考一下 在做Android支付的时候肯定会用到支付宝支付, 根据官方给出的demo做起来非常费劲,所以我们需要一次简单的封装. 封装的代码也很简单,就是将官网给的demo提取出一个类来方便使用. ? 1 2 3 4 5 6 7 8

关于Android在线支付Alipay(支付宝)开发的经验分享

在近期,公司需要开发一个关于在线支付的模块,所以需要用到第三方支付平台 转载请注明出处:http://blog.csdn.net/ht_android/article/details/45307165 经过一周多的时间对这两种支付平台的研究,完成功能后将经验分享给大家,希望能帮助到有需求的朋友. 首先是支付宝的开发资料方面: 接口申请url https://b.alipay.com/order/productDetail.htm?productId=2014110308141993 API开发文

第三方支付接口哪家好怎么选择

第三方支付接口哪家好怎么选 第三方支付接口哪家好怎么选,今天小编带大家详细了解下                              支付通道咨询:QQ2119017259:手机VX: 13360876492 随着无线通信网络的发展,特别是苹果iPhone和谷歌Android智能手机的迅速普及,移动支付的发展得到了推动.根据数据研究公司IDC的数据,2017年全球移动支付金额将超过1万亿美元.强劲的数据意味着未来几年全球移动支付业务将继续增强. 移动支付主要分为近场支付和远程支付.所谓的近

Java精品高级课,架构课,java8新特性,P2P金融项目,程序设计,功能设计,数据库设计,第三方支付,web安全,视频教程

36套精品Java架构师,高并发,高性能,高可用,分布式,集群,电商,缓存,性能调优,设计模式,项目实战,P2P金融项目,大型分布式电商实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Elasticsearch,Redis.ActiveMQ.Nginx.Mycat.Spring.MongoDB.ZeroMQ.Git.Nosql.Jvm.Mecached.Netty.Nio.Mina.java8新特性,P2P金融项目,程序设计,

转-Android微信支付

http://blog.fangjie.info/android微信支付/ Android微信支付 2014-08-09 一.使用微信官方的提供的demo里的appid等 1.微信接口上手指南:(从“移动应用开发”->“Android接入指南”)建议,先把官方这篇文章看完 2.微信支付接口(从“移动应用开发”->“Android开发手册” )(下载官方demohttps://res.wx.qq.com/paymchres/zh_CN/htmledition/download/wxpay/app

第三方支付架构设计之—帐户体系

第三方支付架构设计之-帐户体系 一,      什么是第三方支付? 什么是第三方支付?相信很多人对这个名字很熟悉,不管是从各种媒体等都经常听到,可以说是耳熟能熟.但,如果非得给这个名词总结出一个概念,却发现很难准确和全面的表述清楚.不过关系不大,我们无法给出一个很准确的概念的时候,我们就列举一下实际生活中我们经常使用第三方支付的例子:支付宝,财付通,微信支付等等,这些就是我们国内目前在第三方支付市场中比较有影响力的第三方支付了. 搜索一下百度,所谓第三方支付,就是一些和产品所在国家以及国外各大银