com.alipay是什么意思.android.app是怎么意思

2014年6月 移动开发大版内专家分月排行榜第一2014年3月 移动开发大版内专家分月排行榜第一
2014年11月 移动开发大版内专家分月排行榜第二2014年4月 移动开发大版内专家分月排行榜第二2014年2月 移动开发大版内专家分月排行榜第二
2014年6月 移动开发大版内专家分月排行榜第一2014年3月 移动开发大版内专家分月排行榜第一
2014年11月 移动开发大版内专家分月排行榜第二2014年4月 移动开发大版内专家分月排行榜第二2014年2月 移动开发大版内专家分月排行榜第二
2014年6月 移动开发大版内专家分月排行榜第一2014年3月 移动开发大版内专家分月排行榜第一
2014年11月 移动开发大版内专家分月排行榜第二2014年4月 移动开发大版内专家分月排行榜第二2014年2月 移动开发大版内专家分月排行榜第二
2016年1月 Java大版内专家分月排行榜第二2015年12月 Java大版内专家分月排行榜第二2015年8月 Java大版内专家分月排行榜第二2015年3月 Java大版内专家分月排行榜第二2015年1月 Java大版内专家分月排行榜第二2014年12月 Java大版内专家分月排行榜第二2014年11月 Java大版内专家分月排行榜第二2014年6月 Java大版内专家分月排行榜第二2014年4月 Java大版内专家分月排行榜第二2014年1月 Java大版内专家分月排行榜第二2013年11月 Java大版内专家分月排行榜第二
2015年9月 Java大版内专家分月排行榜第三2015年6月 Java大版内专家分月排行榜第三2015年5月 Java大版内专家分月排行榜第三2015年2月 Java大版内专家分月排行榜第三2014年3月 Java大版内专家分月排行榜第三2013年12月 Java大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。Android版-支付宝APP支付 - 简书
Android版-支付宝APP支付
此项目已开源 赶快来围观 Start支持下吧【】【】
上一篇详细介绍了微信APP支付
此篇文章来详细介绍下支付宝APP支付
目录1、支付宝与微信对比(申请、费率、结算周期)2、支付宝上线应用3、支付宝App支付Android集成流程详解4、服务端实现5、客户端实现6、常见错误解决方案(ALI40247、AL38173)
1、支付宝与微信对比
申请:【】注册的邮箱不能与腾讯其他产品同号,需要开发者资质认证(需要¥300,而且支付商户与公众号不公用)而支付宝只需要企业实名认证,其他质料类似(营业执照、组织机构代码(现在都三证合一了))。
费率:【】【】
结算周期: 话费通讯、财经资讯、股票软件类、网络虚拟服务以及互联网相关行业 T+7
众筹 T+3 其他T+1,结算款项自动提现到商户的结算账户,一般从结算日起3个工作日到账(具体到账时间视不同银行到账情况而定)
:及时到支付宝账号
2、支付宝上线应用
1、注册账号并实名认证
注册账号了没有实名认证进入开发平台的管理中心会提示如下图
为什么要实名认证
商家认证流程
2、创建应用开通支付并上线
资源下载汇总
注意签名工具目录不能包含中文
签名工具的使用
这里上传的是rsa_public_key.pem
Java版签名使用的密钥是rsa_private_key_pkcs8.pem
3、支付宝App支付Android集成流程详解
1、导入支付宝SDK 其中SDK在图资源下载汇总的WS.APP_PAY_SDK_BASE_20.zip中
2、修改Manifest
在商户应用工程的AndroidManifest.xml文件里面添加声明:
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" &
&/activity&
android:name="com.alipay.sdk.auth.AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" &
&/activity&
3、权限声明
&uses-permission android:name="android.permission.INTERNET" /&
&uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&
&uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&
&uses-permission android:name="android.permission.READ_PHONE_STATE" /&
&uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&
4、如需混洗、添加混淆规则
在商户应用工程的proguard-project.txt里添加以下相关规则:alipaySDK-xxxxx.jar根据下载的做响应的修改
-libraryjars libs/alipaySDK-xxxxx.jar
-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.sdk.app.AuthTask{ public *;}
5、支付接口调用
获取PayTask支付对象调用支付(支付行为需要在独立的非ui线程中执行)具体实现参考客户端实现,调用支付需要使用到orderInfo 具体实现参考服务端实现。
6、支付结果获取和处理
调用pay方法支付后,将通过2种途径获得支付结果:
1、同步返回
商户应用客户端通过当前调用支付的Activity的Handler对象,通过它的回调函数获取支付结果。2、异步通知 商户需要提供一个http协议的接口,包含在请求支付的入参中,其key对应notify_url。支付宝服务器在支付完成后,会以POST方式调用notify_url传输数据。
4、服务端实现
代码来自Demo 并做简单的封装
具体实现截图
设置支付宝业务参数
设置支付宝业务参数
注意: 支付宝App支付不支持沙盒模式(此坑纠结了很长时间),使用沙盒模式会出现ALI40247 错误,文末有错误的详细说明。
核心实现代码如下
public void appPay(){
String orderI
String body="我是测试数据";
String passback_params="123";
String subject="1";
String total_amount="0.01";
String notify_url="/alipay/pay_notify";
String appId;
String rsa_
if (isDebug) {
appId=prop.get("test_appId").trim();
rsa_private=prop.get("test_rsa_private").trim();
System.out.println("test。。。。");
appId=prop.get("appId").trim();
rsa_private=prop.get("rsa_private").trim();
System.out.println("appId:"+appId);
System.out.println("rsa_private:"+rsa_private);
BizContent content = new BizContent();
content.setBody(body);
content.setOut_trade_no(OrderInfoUtil2_0.getOutTradeNo());;
content.setPassback_params(passback_params);
content.setSubject(subject);
content.setTotal_amount(total_amount);
content.setProduct_code("QUICK_MSECURITY_PAY");
Map&String, String& params = OrderInfoUtil2_0.buildOrderParamMap(appId,notify_url,content);
String orderParam = OrderInfoUtil2_0.buildOrderParam(params);
String sign = OrderInfoUtil2_0.getSign(params, rsa_private);
orderInfo = orderParam + "&" +
("orderInfo&"+orderInfo);
result.success(orderInfo);
renderJson(result);
} catch (Exception e) {
e.printStackTrace();
result.addError("system error");
具体实现参考【】
5、客户端实现
客户端请求此action返回orderInfo,默认的访问地址为http://[域名或者IP]:端口号/[项目名称]/alipay/appPay
成功将返回:
"code": 0,
"data": "charset=utf-8&biz_content=%7B%22out_trade_no%22%3A%C%22total_amount%22%3A%220.01%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22passback_params%22%3A%D&method=alipay.trade.app.pay&format=json&notify_url=http%3A%2F%%2Falipay%2Fpay_notify&app_id=7659&sign_type=RSA&version=1.0&timestamp=+22%3A45%3A34&sign=m6fpNI58jkOIHROtm8Q2V1Ei7bxXc14JHtJEeqGM0B8dWlq3d%2FfAqpoQTZgeBb%2FVK%2B%2BydOJzVvSWc89dBxhYUq72KOeUwHiKlRJBFMnEMAZbJlRxqu9%2BRX2q7HSRmA6WRg75O68HZhkIhtO3bSNx3s710tMHmQCN230JoVWiwHw%3D",
"message": null
* 获取支付宝App支付订单信息
public String getAliPayOrderInfo(Order order){
String result=HttpKit.get(Constants.ALIPAY_URL);
异步获取orderInfo
public class AliPay extends AsyncTask&Object, Integer, String& {
private Activity mC
public AliPay(Activity context) {
this.mContext =
protected String doInBackground(Object... params) {
IPayLogic.getIntance(mContext).getAliPayOrderInfo((Order)params[0]);
protected void onPostExecute(String result) {
if (result!=null) {
System.out.println("AliPay result&"+result);
JSONObject data = new JSONObject(result);
String message = data.getString("message");
int code = data.getInt("code");
if(code == 0){
String orderInfo = data.getString("data");
Toast.makeText(mContext, "正在调起支付", Toast.LENGTH_SHORT).show();
IPayLogic.getIntance(mContext).startAliPay(orderInfo);
Log.d("PAY_GET", "返回错误"+message);
Toast.makeText(mContext, "返回错误:"+message, Toast.LENGTH_SHORT).show();
System.out.println("get
AliPay exception, is null");
} catch (Exception e) {
Log.e("PAY_GET", "异常:"+e.getMessage());
Toast.makeText(mContext, "异常:"+e.getMessage(), Toast.LENGTH_SHORT).show();
super.onPostExecute(result);
支付接口调用
public void startAliPay(final String orderInfo){
Runnable payRunnable = new Runnable() {
public void run() {
PayTask alipay = new PayTask(mContext);
Map&String, String& result = alipay.payV2(orderInfo, true);
Message msg = new Message();
mHandler.sendMessage(msg);
Thread payThread = new Thread(payRunnable);
payThread.start();
客户端通过回调函数获取支付结果
private Handler mHandler = new Handler(Looper.getMainLooper()) {
@SuppressWarnings("unchecked")
public void handleMessage(Message msg) {
PayResult payResult = new PayResult((Map&String, String&) msg.obj);
System.out.println("alipay call "+payResult.toString());
String resultStatus = payResult.getResultStatus();
String memo = payResult.getMemo();
if (Constants.payListener !=null){
//返回状态以及详细的描述参考
// https://doc./doc2/detail.htm?spm=a219a..0.xN1NnL&treeId=204&articleId=105302&docType=1
Constants.payListener.onPay(-2,resultStatus,memo);
客户端具体使用方法
public void testAliPay(View view){
Toast.makeText(this, "支付宝测试", Toast.LENGTH_SHORT).show();
Order order = new Order();
order.setBody("会员充值中心");
order.setParaTradeNo(System.currentTimeMillis()+"");
order.setTotalFee(20);
order.setAttach("json");//附加参数
order.setNofityUrl("");//支付成功服务端回调通知的地址
IPay.getIntance(MainActivity.this).toPay(IPay.PayMode.ALIPAY,order,new IPay.IPayListener() {
public void onPay(int wxcode, String alicode, String message) {
System.out.println("回调过来的状态》"+alicode+" message&"+((message!=null && message.isEmpty())?"":message));
Toast.makeText(MainActivity.this, "回调过来的状态》" + alicode, Toast.LENGTH_SHORT).show();
6、常见错误解决方案
APP支付报错ALI40247处理方案
ALI40247的错误有2种情况 1、没有权限 2、签名失败
可以查看论坛提供的
AL38173的错误一般是参数问题造成的,建议检查请求参数,对照文档查看,比如:参数少了、多了、乱码、名称不对,还有必传参数是否都请求提交给支付宝了等等.
如果在网上查阅质料还未解决,可以寻求阿里的在线支持【】
此项目已开源 赶快来围观 Start支持下吧
记录学习的点滴,以此勉励不断奋斗的自己???
如果对你有帮助记得点喜欢告诉我哈
喜欢Coding,专注Android、微信开发。公众号javenlifeAndroid 外接sdk之支付宝
支付宝开放平台 最新sdk可以访问开放平台进行下载。
以下为流程和注意事项。
1.名词简介
手机客户端以字符串形式把需要传输的数据发送给接收方的过程。
支付宝以字符串形式直接把处理结果数据返回给手机客户端。
服务器异步通知。支付宝根据得到的数据处理完成后,支付宝的服务器主动发起通知给商户
的网站,同时携带处理完成的结果信息反馈给商户网站。
带有敏感政治倾向、暴力倾向、不健康色彩或不文明的词。
2.准备工作
商户签约和密钥配置。
3.SDK集成流程
解压alipay_lib.zip,将解压出来alipay_lib拷贝到Eclipse workspace,通过Eclipse
import 该工程,并在此工程的Properties->中选中为library 工程。
将alipay.jar复制至商户应用工程的libs目录下,通过 Build Path导入进工程。
4.修改Manifest
android:name="com.alipay.android.app.sdk.WapPayActivity"
android:screenOrientation="portrait">
5.订单数据生成
在调用快捷支付SDK时,需要提交订单信息info,其中参数以key=”value”形式呈
现,参数之间以“&”分割,所有参数不可缺。
6.接口调用
获取Alipay支付对象调用支付,此接口方法实现为同步调用,将阻塞商户应用UI
线程,所以调用此接口需启动新线程,并使用looper 为main looper的Handler
对象与UI线程传递消息。
7.支付结果获取和处理
调用pay方法支付后,将通过2种途径获得支付结果:
商户应用客户端获取pay( )返回的字符串信息,在应用内直接处理支付结果。
商户需要提供一个http协议的接口,包含在参数里传递给快捷支付,即notify_url。
支付宝服务器在支付完成后,会以POST方式调用notify_url,以xml数据格式传
输支付结果。
8.如何获得PID与密钥
使用签约支付宝账号登录“商家服务”平台中的“我的商家服务”,点击“查询PID、Key”,即可查看到签约支付宝账号、合作者身份ID(PID)的信息。输入支付密码,查询key。
9.RSA密钥生成与使用
打开openssl文件夹下的bin文件夹,执行openssl.exe文件,输入“genrsa -out rsa_private_key.pem 1024”命令,回车后,在当前bin文件目录中会新增一个rsa_private_key.pem文件,其文件为原始的商户私钥(请妥善保
存该文件,开发语言中需要使用该文件)
10.生成RSA公钥
输入“rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem”命令回车
后,在当前bin文件目录中会新增一个rsa_public_key.pem 文件,其文件为原始
的商户公钥(请妥善保存该文件,PHP开发语言中需要使用该文件)
11.生成PKCS8编码的私钥
输入命令“pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM
-nocrypt”并回车,保存到一个文本文件,可随意命名,只要知道这个是PKCS8格式的私钥即可(请
妥善保存该文件)
12.RSA密钥使用逻辑:
商户在使用RSA签名方式的支付宝接口时,真正会用到的密钥是商户私钥与支付
宝公钥。商户上传公钥给支付宝,支付宝把公钥给商户,是公钥互换的操作。这就
使得商户使用自己的私钥做签名时,支付宝端会根据商户上传的公钥做验证签名。
商户使用支付宝公钥做验证签名时,同理,也是因为支付宝用支付宝私钥做了签名。
13.业务数据传递
支付宝提供的业务参数为支付宝需要商户传递过来的数据要求。商户只需要根据自
己的业务需求,在业务逻辑代码运行时把这些动态数据以赋值给变量的形式,再通
过支付宝接口本身的接口逻辑,传递给支付宝,让支付宝系统可识别。
举例说明,商户要把某笔订单的数据传递给支付宝。那么商户需要先根据支付宝的
参数要求,从自己的下单系统中拿到付款总金额(total_fee)、商户的订单号
(out_trade_no)、订单名称(subject)等数据,再把这些数据一个一个以值的形
式赋给对应的变量。再通过代码逻辑,把变量组合及加工成一次可以发送给支付宝
注意事项:传递参数之前必须对参数进行签名,就是调用sign方法,再加一些参数进行传送,务必分清哪些参数应该签名。
如有问题请留言,转载注明出处。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'

我要回帖

更多关于 alipay是什么意思 的文章

 

随机推荐