前言:集成支持宝和微信支付,是公司获取收益的最主要的部分,这两大巨头几乎在支付业务上不可或缺,今天看下Simon_Crystin独家授权本公众号发步的Android支付实践(一)之支付宝支付详解与demo,Simon_Crystin的blog地址为:http://blog.csdn.net/Simon_Crystin/。点击【阅读原文】,可下载案例的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注册一下
权限申请:
把支付宝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干货,源码分析,欢迎关注我的微信公众号,扫一扫下方二维码或者长按识别二维码,即可关注。