android studio 支付宝支付功能
第一步 :官网下载Demo(alipay_sdk包下的alipaySdk-20180601 配置给自己项目的libs包下)
https://docs.open.alipay.com/54/104509/
第二步 :AndroidManifest.xml 下配置
<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" />
支付宝需要的配置调用h5的页面
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:screenOrientation="behind"
android:windowSoftInputMode="adjustResize|stateHidden" >
</activity>
<activity
android:name="com.alipay.sdk.app.H5AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind"
android:windowSoftInputMode="adjustResize|stateHidden" >
</activity>
第三步在自己的activity中点击支付的按钮
private void payment() {
Runnable authRunnable = new Runnable() {
@Override
public void run() {
// 构造AuthTask 对象
AuthTask authTask = new AuthTask(RushMoney.this);
// 调用授权接口,获取授权结果 str是后台返给你的支付信息
Map<String, String> result = authTask.authV2(str, true);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
// 必须异步调用
Thread authThread = new Thread(authRunnable);
authThread.start();
}
这个是处理支付宝返给我们的支付结果
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
@SuppressWarnings("unused")
public void handleMessage(Message msg) {
switch (msg.what) {
case SDK_PAY_FLAG: {
PayResult payResult = new PayResult((Map<String, String>) msg.obj);
String resultInfo = payResult.getResult();// 同步返回需要验证的信息
String resultStatus = payResult.getResultStatus();
if (TextUtils.equals(resultStatus, "9000")) {
ruleVImp.sigleToast("支付成功");
} else {
// "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服 务端异步通知为准(小概率状态)
if (TextUtils.equals(resultStatus, "8000")) {
ruleVImp.sigleToast("支付结果确认中");
} else if (TextUtils.equals(resultStatus, "6001")) {
ruleVImp.sigleToast("支付取消");
} else if (TextUtils.equals(resultStatus, "6002")) {
ruleVImp.sigleToast("网络异常");
} else if (TextUtils.equals(resultStatus, "5000")) {
ruleVImp.sigleToast("重复请求");
} else {
// 其他值就可以判断为支付失败
ruleVImp.sigleToast("支付失败");
}
}
break;
}
}
}
};
第四步:需要自己创建一个实体类来解析支付宝传给我们的反馈信息
class PayResult {
private String resultStatus;
private String result;
private String memo;
public PayResult(Map<String, String> rawResult) {
if (rawResult == null) {
return;
}
for (String key : rawResult.keySet()) {
if (TextUtils.equals(key, "resultStatus")) {
resultStatus = rawResult.get(key);
} else if (TextUtils.equals(key, "result")) {
result = rawResult.get(key);
} else if (TextUtils.equals(key, "memo")) {
memo = rawResult.get(key);
}
}
}
@Override
public String toString() {
return "resultStatus={" + resultStatus + "};memo={" + memo
+ "};result={" + result + "}";
}
/**
* @return the resultStatus
*/
public String getResultStatus() {
return resultStatus;
}
/**
* @return the memo
*/
public String getMemo() {
return memo;
}
/**
* @return the result
*/
public String getResult() {
return result;
}
}