1. 支付寶商家入駐與簽約
- 訪問 支付寶開放平台
- 企業認證:營業執照、法人身份證、對公賬戶等資質
- 創建應用,獲取
AppID、配置密鑰(RSA2)、設置支付回調地址
- 簽約「手機網站支付」「APP 支付」等產品
2. 客戶端 SDK 集成
依賴引入
// build.gradle
dependencies {
implementation 'com.alipay.sdk:alipay-sdk-android:15.8.0' // 版本以官方最新為準
implementation 'com.android.support:appcompat-v7:28.0.0'
}
支付調用核心代碼
public class PayUtil {
private static final String APP_ID = "你的AppID";
private static final String RSA2_PRIVATE = "你的應用私鑰";
private static final String ALIPAY_PUBLIC = "支付寶公鑰";
private static final String NOTIFY_URL = "你的服務端異步通知地址";
public static void pay(Activity activity, String subject, String body, String orderNo, String amount) {
// 1. 構建訂單信息
String orderInfo = buildOrderInfo(subject, body, orderNo, amount);
// 2. 簽名
String sign = signOrderInfo(orderInfo, RSA2_PRIVATE);
// 3. 最終支付串
String finalOrderInfo = orderInfo + "&sign=" + URLEncoder.encode(sign, "UTF-8") + "&sign_type=RSA2";
// 4. 啟動支付
Runnable payRunnable = () -> {
PayTask alipay = new PayTask(activity);
Map<String, String> result = alipay.payV2(finalOrderInfo, true);
Message msg = new Message();
msg.what = 1;
msg.obj = result;
handler.sendMessage(msg);
};
new Thread(payRunnable).start();
}
private static String buildOrderInfo(...) { ... }
private static String signOrderInfo(...) { ... }
private static Handler handler = new Handler(Looper.getMainLooper()) {
@Override public void handleMessage(Message msg) {
if (msg.what == 1) {
@SuppressWarnings("unchecked")
Map<String, String> result = (Map<String, String>) msg.obj;
// resultStatus: 9000 成功、8000 正在處理、4000 失敗、6001 用戶取消
String status = result.get("resultStatus");
// 業務邏輯處理...
}
}
};
}
3. 服務端簽名與驗簽(安全關鍵)
- 私鑰簽名:服務端生成訂單字符串,用應用私鑰簽名,返回給客戶端
- 公鑰驗簽:支付寶回調時,用支付寶公鑰驗證簽名,防篡改
- 推薦使用支付寶官方 Java SDK:
com.alipay.sdk:alipay-sdk-java
4. 常見坑位避雷