原文:android支付宝支付开发过程

支付宝开发流程:

1、在支付宝申请一个账号并开通开发者功能和移动支付的功能。

支付宝地址:https://auth.alipay.com/login/index.htm?goto=https%3A%2F%2Fopenhome.alipay.com%2Fdeveloper%2FisvApply.htm%3Fflag%3Daop

支付宝移动支付地址:https://b.alipay.com/order/productDetail.htm?productId=2014110308141993

2、上面步骤完成后下载支付宝集成文档和SDK。

3、

命令:

RSA密钥生成命令

生成RSA私钥

openssl>genrsa -out rsa_private_key.pem 1024

生成RSA公钥

openssl>rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

将RSA私钥转换成PKCS8格式

openssl>pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt





打开openssl按照上面的命令生成个密钥rsa_private_key.pem 和 rsa_public_key.pem。

根据rsa_private_key.pem 和 rsa_public_key.pem生成pkcs8密钥。





4、然后把rsa_public_key.pem里的内容组装成一个字符串(去掉空格、换行、-----BEGIN PUBLIC KEY-----、-----END PUBLIC KEY-----),复制到支付宝网站上生成支付宝公钥。

5、在工程里的androidManifest.xml里添加申明

  <activity

            android:name="com.alipay.sdk.app.H5PayActivity"

            android:configChanges="orientation|keyboardHidden|navigation"

            android:exported="false"

            android:screenOrientation="behind"

            android:windowSoftInputMode="adjustResize|stateHidden" >

        </activity>

 <activity

            android:name="com.alipay.sdk.pay.demo.PayDemoActivity"

            android:icon="@drawable/msp_icon"

            android:label="@string/app_name">

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>  

6、把alipaySDK-20150602.jar拷贝到lib下,把alipay下的Base64.java和PayResult.java SignUtils,java拷贝到工程项目里。

7、首先获得订单信息getOrderInfo(),然后对订单用pkcs8密钥做RSA签名sign(getOrderInfo()),

生成订单数据String payInfo = getOrderInfo() + "&sign=\"" + sign(getOrderInfo()) + "\"&"

+ getSignType(); //getSignType为获取订单的签名方式,默认为"sign_type=\"RSA\""。



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;

}

//对订单进行签名

public String sign(String content) {

return SignUtils.sign(content, RSA_PRIVATE);

}

8、在新线程中调用支付接口

Runnable payRunnable = new Runnable() {





@Override

public void run() {

// 构造PayTask 对象

PayTask alipay = new PayTask(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();



 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(this, "支付成功",

Toast.LENGTH_SHORT).show();

} else {

// 判断resultStatus 为非“9000”则代表可能支付失败

// “8000”代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)

if (TextUtils.equals(resultStatus, "8000")) {

Toast.makeText(this, "支付结果确认中",

Toast.LENGTH_SHORT).show();





} else {

// 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误

Toast.makeText(this, "支付失败",

Toast.LENGTH_SHORT).show();

}

}

break;

}

case SDK_CHECK_FLAG: {

Toast.makeText(this, "检查结果为:" + msg.obj,

Toast.LENGTH_SHORT).show();

break;

}

default:

break;

}

};

};

版权声明:本文为博主原创文章,未经博主允许不得转载。

android支付宝支付开发过程的更多相关文章

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

    Android支付宝支付封装代码 投稿:lijiao 字体:[增加 减小] 类型:转载 时间:2015-12-22我要评论 这篇文章主要介绍了Android支付宝支付封装代码,Android支付的时候 ...

  2. Android 支付宝以及微信支付快速接入流程

    简介 随着移动支付的普及,越来越多的App采用第三发支付,在这里我们以支付宝为例,做一个快速集成! 一.Android快速实现支付宝支付 1.首先,我们需要前往支付宝开放平台,申请我们的支付功能:ht ...

  3. android app 集成 支付宝支付 微信支付

    项目中部分功能点需要用到支付功能,移动端主要集成支付宝支付和微信支付 支付宝sdk以及demo下载地址:https://doc.open.alipay.com/doc2/detail.htm?spm= ...

  4. android支付宝app支付(原生态)-包括android前端与java后台

    本文讲解了 android开发的原生态app集成了支付宝支付, 还提供了java后台服务器处理支付宝支付的加密代码, app前端与java后台服务器使用json数据格式交互信息,java后台服务主要用 ...

  5. Android支付——支付宝支付总结

    摘要:分享牛系列.分享牛转载.第三方支付,java第三方支付.android第三方支付. 原文地址:http://blog.csdn.net/zwl5670/article/details/51219 ...

  6. Android开发支付集成——支付宝集成

    微信支付传送门:https://www.cnblogs.com/dingxiansen/p/9209159.html 一.支付宝支付 1. 支付宝支付流程图 2. 集成前准备 去蚂蚁金服注册应用获取a ...

  7. Android最新版支付宝支付集成

    上次集成支付宝支付已经很久了,今天写东西用到了支付宝支付,就大致写一下流程: 去蚂蚁金服下载最新版的Android&IOS端SDK 全部文档 -- 资源下载 -- App支付客户端 下载后解压 ...

  8. Android H5调起原生微信或支付宝支付

    Android H5调起原生微信或支付宝支付 WebView调用原生微信或支付宝回调:其原理就是在shouldOverrideUrlLoading(final WebView view, String ...

  9. Android 接入支付宝支付实现

    接上篇android接入微信支付文章,这篇我们带你来接入支付宝支付服务 简介 首先要说明的是个人感觉接入支付宝比微信简单多了,很轻松的,所以同学们不要紧张~ 当然还是老规矩啦,上来肯定的贴上官网地址, ...

随机推荐

  1. WDLINUX (Centos5.8) 安装 bcmath

    环境 centos5.8 php5.2.17 因为wdos 集成的php5.2.17为精简版,并未包含php52-bcmath扩展. 所以先下载完整php5.2.17源码包 wget -c http: ...

  2. Javascript自定义类

    JavaScript并不是严格的面向对象的语言,但是带有面向对象的一些特性,我们可以通过这些特性创建js中的自定义类. JavaScript中的类其实是function关键字包裹的一系列变量和方法. ...

  3. 新建Android工程没有自动生成R.JAVA,应该先升级下ADT

    前几天非常郁闷,本来计划在Android上做个小东西,结果打开Eclipse新建工程,发现居然没有R.JAVA! 反复测试很多次,均未成功,最后试着升级了下ADT,结果搞定,在这里记下,下次遇到这样的 ...

  4. NFC 与点对点应用

    http://wenku.baidu.com/view/6a7623a28762caaedc33d426.html

  5. Delphi反汇编内部字符串处理函数不完全列表

    Delphi反汇编内部字符串处理函数/过程不完全列表 名称 参数 返回值 作用 等价形式 / 备注 _PStrCat EAX :目标字符串 EDX :源字符串 EAX 连接两个 Pascal 字符串 ...

  6. COCI 2015/2016 Day 8 PROKLETNIK

    PROKLETNIK 题目描述:给出\(n\)个数,定义一段连续的数为魔法串是该区间的左右端点值正好是区间的最小值与最大值(最小值可以在左也可以在右,最大值也一样).\(Q\)个询问,每次询问一个区间 ...

  7. UML_交互图

    交互图(Interaction Diagram)用来描述系统中的对象是如何进行相互作用的.即一组对象是如何进行消息传递的. 当交互图建模时,通常既包括对象(每个对象都扮演某一特定的角色),又包括消息( ...

  8. 什么是dandy 风格_百度知道

    什么是dandy 风格_百度知道     什么是dandy 风格    2010-06-21 10:56 平ping123 | 分类:服装/首饰 | 浏览11257次     题谢谢     有没有比 ...

  9. 推荐一款JavaScript日历控件:kimsoft-jscalendar

    一.什么是 kimsoft-jscalendar     一个简洁的avaScript日历控件,可在Java Web项目,.NET Web 项目中使用 二.kimsoft-jscalendar 有什么 ...

  10. 5.7.13mysql 无法登陆

    话不多说 用的http://dev.mysql.com/downloads/mysql/下的ZIP  Archive安装方式 下载 解压,然后吧bin目录添加到系统path环境变量下.然后将my-de ...