Android 支付宝支付详解与demo
来源:互联网 发布:python 二维数组赋值 编辑:程序博客网 时间:2024/05/16 17:45
先给出可用demo吧
支付宝可用demo下载地址
前段时间公司项目需要集成支付宝支付,蚂蚁金服的文档和demo可以说是非常清晰的,经过一些时间的摸索,也是把支付宝支付集成到了项目中。不可缺少的是去蚂蚁金服申请产品签约,这些就不多说了,按照文档一步一步来,应该是没有什么问题的。我们会得到下面几个参数
// 商户PID public static final String PARTNER = ""; // 商户收款账号 public static final String SELLER = ""; // 商户私钥,pkcs8格式 public static final String RSA_PRIVATE = ""; // 支付宝公钥 需要上传到ali public static final String RSA_PUBLIC = "";
准备工作做好了,接下来就是开发了。先把支付宝jar包导进去,然后需要在manifest注册一一下
<activityandroid:name="com.alipay.sdk.app.H5PayActivity" android:configChanges="orientation|keyboardHidden|navigation|screenSize"android:exported="false"android:screenOrientation="behind" android:windowSoftInputMode="adjustResize|stateHidden" > </activity>
还有一些权限需要申请的
<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" />
把支付宝demo中的类拷贝到自己的项目中
下一步就是通过线程调起支付了,请注意,这里签名都是在本地,私钥都是放在本地,实际开发中都是要在服务端完成的。
/** * 支付宝支付异步任务 * * @author Simon */ private class AliPayThread extends Thread { @Override public void run() { String result = AlipayAPI.pay(MainActivity.this, "测试的商品", "测试商品的详细描述", "0.01"); Message msg = new Message(); msg.what = SDK_PAY_FLAG; msg.obj = result; mHandler.sendMessage(msg); } }
支付的结果
private Handler mHandler=new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case SDK_PAY_FLAG: { PayResult payResult = new PayResult((String) 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, "支付失败" + resultStatus, Toast.LENGTH_SHORT) .show(); } } break; } } }; };
下面贴出整个代码
package com.alpha.alipay;import com.ali.alipay.AlipayAPI;import com.ali.alipay.PayResult;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.text.TextUtils;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class MainActivity extends Activity { private static final int SDK_PAY_FLAG = 1; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button=(Button) findViewById(R.id.bt_submit); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub new AliPayThread().start(); } }); } private Handler mHandler=new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case SDK_PAY_FLAG: { PayResult payResult = new PayResult((String) 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, "支付失败" + resultStatus, Toast.LENGTH_SHORT) .show(); } } break; } } }; }; /** * 支付宝支付异步任务 * * @author Simon */ private class AliPayThread extends Thread { @Override public void run() { String result = AlipayAPI.pay(MainActivity.this, "测试的商品", "测试商品的详细描述", "0.01"); Message msg = new Message(); msg.what = SDK_PAY_FLAG; msg.obj = result; mHandler.sendMessage(msg); } }}
运行下,就可以调起支付宝了。
另外需要微信支付的可以看我的另一篇博客。多谢
Android微信支付
1 0
- Android 支付宝支付详解与demo
- Android 微信支付详解与Demo
- Android 微信支付详解与Demo
- Android 微信支付详解与Demo
- android 支付宝快捷支付demo
- android支付宝集成,支付demo
- Android接入支付宝支付Demo
- Android支付实践(二)之微信支付详解与Demo
- Android 支付宝集成Demo
- Android 集成支付宝支付详解
- Android 集成支付宝支付详解
- 支付宝支付接口android 详解
- Android 支付宝 支付 流程 详解
- Android demo-->支付模块
- ANDROID集成支付宝SDK_APP应用支付宝开发DEMO
- 支付宝集成过程详解-运行DEMO
- 支付宝集成过程详解Demo
- android支付宝支付
- 欢迎使用CSDN-markdown编辑器
- 霍夫曼编码
- 数据结构 排序算法之选择排序算法
- OO理解对象
- Unity中dragonbones动画不显示的问题
- Android 支付宝支付详解与demo
- jquery的prop()方法
- 个人记录-LeetCode 41. First Missing Positive
- bzoj 4720: [Noip2016]换教室 期望dp+最短路
- LInux下动态链接库的生成
- IOC和DI
- Error:Execution failed for task ':app:compileDebugJavaWithJavac'. > Compilat
- js-获取JSON数组的长度
- spring声明式事务 同一类内方法调用事务失效