现在app 几乎都有支付的功能,而国内最便捷的支付无非就是 支付宝支付和微信支付了,相对于微信,我个人更喜欢支付宝一些, 为什么呢,懒是原罪。支付宝集成,大概app 端只需要1小时左右,debug版本的app 就可以进行拉起调试,而微信支付就不一样了,必须要正式签名,各种各样的bug,我就想微信为什么不能像百度地图的sdk 一样可以填写 debug 的SHA,啧啧。言归正传,我们来说说Android 端集成支付宝支付功能。
集成支付宝,肯定是先看支付宝官方提供的开发着文档,https://docs.open.alipay.com/54/cyz7do/,这里面是支付宝 服务端和客户端的接入文档,我们主要看 Android端的接入文档。
- 首先,我们先集成最新的 sdk:
sdk下载链接:https://docs.open.alipay.com/54/104509
下载官方的sdk ,ex:alipaySdk-15.5.9-20181123210601.aar,随后放入你的lib 目录下,然后在你的主要build.gradle
你中 的libm目录作为依赖仓库,主buildl.grtadle也就是你 项目最外层的目录;
allprojects {
repositories {
// 添加下面的内容
flatDir {
dirs 'libs'
}
// ... jcenter() 等其他仓库
}
}
- 2 权限
这时候,还差的就是一些运行时权限了,但是,如果你是正常开发,权限都应该早就请求过了,如果你只是写demo,可以偷懒只在AndroidManifest里申请以下权限,然后手动在手机里给予权限
android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.READ_PHONE_STATE
android.permission.WRITE_EXTERNAL_STORAGE
- 3 使用
首先,你需要请求你 的服务端拿到 orderInfo,这个一般都是你手动提交当前订单信息给服务端,服务端进行加密,拼接数据等等一系列操作,如果你用的是最新的aar,你可以提醒你们的后台,也要用最新的文档去拼接数据,不然,会出现以下错误。
当一切数据都正确的时候,我们就可以直接调用支付宝提供给我们的方法,去拉起 支付宝支付了
// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
Runnable payRunnable = new Runnable() {
@Override
public void run() {
Log.e(TAG, "run: 支付线程");
PayTask alipay = new PayTask(Activity.this);
Map<String, String> result = alipay.payV2(orderInfo, true);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
payPersoncenter.requestStatus(orderNum);// 请求订单状态
}
};
- 4 拉起支付后
当然是支付了,支付完成后,支付宝会主动提示你支付成功,但是,你并不信任它,你可以访问你的接口服务,去查询当前订单是否支付成功,这个需要你服务端主动给支付宝提供一个http协议的接口,包含在请求支付的入参中,其key对应notify_url。支付宝服务器在支付完成后,会以POST方式调用notify_url传输数据。然后你再去访问。
Android 接入支付宝,就是以上的操作了,如果你的操作中规中矩,没玩什么太骚的操作,一般支付宝不会出现什么太大的问题,接入的话稍微快一点可能都不需要 一个小时,啧啧啧