你的打賞,是對我最大的支持:
支付寶:百度支付寶開發者平臺
地址:https://open.alipay.com/platform/home.htm
進入 我的開放平臺:
自行創建:
快速接入支付能力
我們按照文檔上來,首先是下載工具了,這裏有win和mac兩個地址,我是win,下載下來是這個樣子的
我們按照圖中的配置拿到了公鑰和私鑰
那我們可以配置了,我們找到項目詳情
然後這裏是兩種方式,我們選擇的是RSA方式麼其實哪種方式都是可以的
可以看一下: 支付寶開放平臺文檔https://docs.open.alipay.com/200/105310
如何從RSA1升級到RSA2?https://opensupport.alipay.com/support/knowledge/20069/201602242782#/?_k=xj2m2v
最後提交,不知道等多久 ,再等待中。。。。
1.將支付寶SDK拷貝到項目libs文件夾下,如果沒有libs文件夾,就新建一個。
2.如果sdk使用過程中,提示找不到文件。
進行如下操作,選中sdk文件,右擊選擇Reveal in Finder
五:修改AndroidManifest.xml配置
1.在商戶應用工程的AndroidManifest.xml文件裏面添加聲明:
<activity android:name="com.alipay.sdk.app.H5PayActivity" android:configChanges="orientation|keyboardHidden|navigation" android:exported="false" android:screenOrientation="behind">
</activity>
<activity android:name="com.alipay.sdk.auth.AuthActivity" android:configChanges="orientation|keyboardHidden|navigation" android:exported="false" android:screenOrientation="behind">
</activity>
和權限聲明:
<uses android:name="android.permission.INTERNET">
<uses android:name="android.permission.ACCESS_NETWORK_STATE">
<uses android:name="android.permission.ACCESS_WIFI_STATE">
<uses android:name="android.permission.READ_PHONE_STATE">
<uses android:name="android.permission.WRITE_EXTERNAL_STORAGE">
六:添加混淆規則
在商戶應用工程的proguard-project.txt裏添加以下相關規則:
-libraryjars libs/alipaySDK-20150602.jar
-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.sdk.app.AuthTask{ public *;}
第一行中的alipaySDK-20150602.jar,其中20150602是此版本發佈的日期,注意將其修改爲你導入的Jar的相應的文件名。
到這裏,支付寶支付的前期配置已經完成,下面需要完成支付代碼編寫。
支付接口調用
- 在點擊支付按鈕的點擊事件中,我提供的是從後端獲取訂單字符串,然後調用支付寶接口,調起支付。
- 需要在新線程中調用支付接口。代碼如下:
// 支付按鈕
public void onClick(View view) {
//起一個線程
Runnable payRunnable = new Runnable() {
@Override
public void run() {
String data = null;
PayBean payBean = new PayBean();
payBean.setOrderTime("");
String json = new Gson().toJson(payBean);
//json爲獲取後端結果時需要提供給後端訂單信息,例如:時間、金額、訂單屬性等
Log.i("charge request", json);
try {
//data爲後端返回數據,其中包括訂單字符串
data = postJson(CHARGE_URL, json);
} catch (IOException e) {
e.printStackTrace();
}
// Json解析data
ChargeBean charge = new Gson().fromJson(data, ChargeBean.class);
//獲取調起支付所需要的字符串credential
String credential = (String) charge.getResult().getCredential();
// 調起支付界面
PayTask alipay = new PayTask(ThirdActivity.this);
Map<String> result = alipay.payV2(credential, true);
//在mHandler中處理支付寶返回結果
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
// 必須異步調用
Thread payThread = new Thread(payRunnable);
payThread.start();
}
- 在mHandler中處理支付結果
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == SDK_PAY_FLAG) {
Toast.makeText(ThirdActivity.this, (String) msg.obj,
Toast.LENGTH_LONG).show();
PayResult payResult = new PayResult((Map<String>) msg.obj);
/**
對於支付結果,請商戶依賴服務端的異步通知結果。同步通知結果,僅作爲支付結束的通知。
*/
String resultInfo = payResult.getResult();// 同步返回需要驗證的信息
String resultStatus = payResult.getResultStatus();
// 判斷resultStatus 爲“9000”則代表支付成功,具體狀態碼代表含義可參考接口文檔
if (resultStatus.equals("9000")) {
Toast.makeText(ThirdActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
}else if (resultStatus.equals("4000")){
// 4000爲支付失敗,包括用戶主動取消支付,或者系統返回的錯誤
Toast.makeText(ThirdActivity.this, "支付失敗", Toast.LENGTH_SHORT).show();
}else if (resultStatus.equals("6001")){
// 6001爲取消支付,或者系統返回的錯誤
Toast.makeText(ThirdActivity.this, "取消支付", Toast.LENGTH_SHORT).show();
}else if (resultStatus.equals("8000")) {
// "8000"代表支付結果因爲支付渠道原因或者系統原因還在等待支付結果確認,最終交易是否成功以服務端異步通知爲準(小概率狀態)
Toast.makeText(ThirdActivity.this, "支付結果確認中", Toast.LENGTH_SHORT).show();
}else {
// 其他爲系統返回的錯誤
Toast.makeText(ThirdActivity.this, "支付錯誤", Toast.LENGTH_SHORT).show();
}
}
}
};
微信支付: