Android 支付宝支付教程及注意事项

一、准备工作

〉1、下载开发包

https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.EIqKI9&treeId=193&articleId=104509&docType=1

压缩包下的“支付宝钱包支付接口开发包”中即有Andoid使用支付宝的JAR和Demo

〉2、创建支付宝应用

在支付宝开放平台申请创建应用

https://open.alipay.com/index.htm

支付宝平台的应用创建仅限于公司实名认证用户,个人帐号是不能创建应用的,应用申请我没试过,暂且不做说明

〉3、AndroidManifest.xml 修改 (权限、界面、服务等申明)


权限
界面和服务

>4、获取开发所需要的参数数据


商户PID和商户收款账号 都是在支付宝申请上都有

商户私钥和支付宝公钥都是需要通过支付宝开发包中的openssl文件夹下的bin目录下的OpenSSL程序生成

命令如下:

RSA密钥生成命令生成RSA私钥openssl>genrsa-outrsa_private_key.pem1024

生成RSA公钥openssl>rsa-inrsa_private_key.pem-pubout-outrsa_public_key.pem

将RSA私钥转换成PKCS8格式openssl>pkcs8-topk8-nocrypt-inform PEM-inrsa_private_key.pem-outform PEM outform


开发者的私钥

1、必须保证只有一行文字,即,没有回车、换行、空格等

2、去掉“—–BEGIN RSA PRIVATE KEY—–”、“—–END RSA PRIVATE KEY—–”,只保存这两条文字之中的部分

◆开发者的公钥

1、必须保证只有一行文字,即,没有回车、换行、空格等

2、去掉“—–BEGIN PUBLIC KEY—–”、“—–END PUBLIC KEY—–”,只保存这两条文字之中的部分

3、保存到一个临时的记事本中。

参数设置完成

〉5、加载Jar文件

将开发包中的alipay-sdk-common文件夹下面的jar文件复制到项目的libs目录下并加载

〉6、添加混淆规则

在gradle.properties文件中添加如下代码

-libraryjars libs/alipaysdk.jar

-libraryjars libs/alipaysecsdk.jar

-libraryjars libs/alipayutdid.jar

-keepclasscom.alipay.android.app.IAlixPay{*;}

-keepclasscom.alipay.android.app.IAlixPay$Stub{*;}

-keepclasscom.alipay.android.app.IRemoteServiceCallback{*;}

-keepclasscom.alipay.android.app.IRemoteServiceCallback$Stub{*;}

-keepclasscom.alipay.sdk.app.PayTask{public*;}

-keepclasscom.alipay.sdk.app.AuthTask{public*;}

-keepclasscom.alipay.mobilesecuritysdk.*

-keepclasscom.ut.*

二、开发


创建订单信息

/**

* create the order info. 创建订单信息

*/

privateString 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 +="¬ify_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\"";

returnorderInfo;

}

2、调用SDK支付



调用SDK支付


/**

* 特别注意,这里的签名逻辑需要放在服务端,切勿将私钥泄露在代码中!

*/

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(MainActivity.this);

// 调用支付接口,获取支付结果

String result = alipay.pay(payInfo, true);

Message msg = new Message();

msg.what = SDK_PAY_FLAG;

msg.obj = result;

mHandler.sendMessage(msg);

}

};

// 必须异步调用

Thread payThread = new Thread(payRunnable);

payThread.start();

3、支付结果获取和处理


客户端同步回调

@SuppressLint("HandlerLeak")

privateHandlermHandler=newHandler() {

@SuppressWarnings("unused")

public voidhandleMessage(Message msg) {

switch(msg.what) {

caseSDK_PAY_FLAG: {

PayResult payResult =newPayResult((String) msg.obj);

//                    Log.d("MainActivity", "msg.obj:" + msg.obj);

/**

* 同步返回的结果必须放置到服务端进行验证(验证的规则请看https://doc.open.alipay.com/doc2/

* detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665&

* docType=1) 建议商户依赖异步通知

*/

String resultInfo = payResult.getResult();// 同步返回需要验证的信息

String resultStatus = payResult.getResultStatus();

// 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档

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

Toast.makeText(MainActivity.this,"支付成功", Toast.LENGTH_SHORT).show();

}else{

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

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

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

Toast.makeText(MainActivity.this,"支付结果确认中", Toast.LENGTH_SHORT).show();

}else{

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

Toast.makeText(MainActivity.this,"支付失败", Toast.LENGTH_SHORT).show();

}

}

break;

}

default:

break;

}

}

};

源码地址:https://github.com/LostDeer

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • 支付宝集成过程详解——运行DEMO 前言,梦想是需要坚持的,在路上,一路前行。加油。 这两天软件需要集成支付宝了,...
    改昵称已被占用阅读 19,011评论 2 39
  • 此项目已开源 赶快来围观 Start支持下吧 【客户端开源地址-JPay】【服务端端开源地址-在com.javen...
    LucasAdam阅读 1,906评论 0 3
  • 相比之前的支付宝sdk,新版的sdk不再判断App客户端是否安装了支付宝客户端。如果用户安装了支付宝,将跳到支付宝...
    V1tas阅读 1,204评论 2 4
  • 最近在做支付宝支付模块,集成过程中走了一些弯路。现将集成过程总结一些。 这里我直接写了一个工具类,需要的时候直接调...
    poker1face阅读 1,917评论 1 7
  • 从上个版本开始,工程的Appstore安装包竟然达到了53M,简直到了不能忍的地步,工程瘦身势在必行。 1,删除自...
    悟_空阅读 2,932评论 27 84