-
流程
示例
-
集成
1.將alipaySdk-15.6.4-20190611174341.aar
包放在您的應用工程的libs
目錄下
2.在項目的
build.gradle
中,添加下面的內(nèi)容
allprojects {
repositories {
// 添加下面的內(nèi)容
flatDir {
dirs 'libs'
}
// ... jcenter() 等其他倉庫
}
}
dependencies {
// 添加下面的內(nèi)容
implementation (name: 'alipaySdk-15.6.4-20190611174341', ext: 'aar')
// ... 其他依賴項
}
3.在AndroidManifest
文件中添加如下權限
<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" />
4.支付接口調(diào)用( PayTask 支付對象調(diào)用payV2()方法進行支付)
/**
* @param orderInfo 接口返回的訂單信息
*/
protected void pay(final Activity activity, final String orderInfo) {
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(activity);
Map<String, String> result = alipay.payV2(orderInfo, true);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
Thread payThread = new Thread(payRunnable);
payThread.start();
}
5.同步返回結果
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
@SuppressWarnings("unused")
public void handleMessage(Message msg) {
switch (msg.what) {
case SDK_PAY_FLAG: {
@SuppressWarnings("unchecked")
PayResult payResult = new PayResult((Map<String, String>) msg.obj);
/**
*對于支付結果,請商戶依賴服務端的異步通知結果。同步通知結果伊滋,僅作為支付結束的通知马靠。
*/
String resultInfo = payResult.getResult();
String resultStatus = payResult.getResultStatus();
// 判斷resultStatus 為9000則代表支付成功
if (TextUtils.equals(resultStatus, "9000")) {
// 該筆訂單是否真實支付成功届搁,需要依賴服務端的異步通知介蛉。
} else {
// 該筆訂單真實的支付結果,需要依賴服務端的異步通知斥扛。
}
break;
}
}
}
};
6.PayResult類
public 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;
}
}
6.沙箱聯(lián)調(diào)
// 在使用 SDK 時,在支付接口前調(diào)用如下方法
EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);