1、添加jar包
将名為libs的檔案夾放在您項目根目錄下(裡面有 BmobPay_版本号.jar 和3個支付寶的jar一共四個jar檔案)
2、添權重限和内容
<!-- alipay sdk permission begin -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<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" />
<!-- alipay sdk permission end -->
<!-- bmob pay sdk activity begin ,please put below code into application tag -->
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind"
android:windowSoftInputMode="adjustResize|stateHidden" >
</activity>
<activity
android:name="com.bmob.pay.tool.PayActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent" />
<!-- bmob pay sdk activity end -->
3、類庫說明
com.bmob.pay.tool.BmobPay
- pay(double price, String name, PayListener listener)
- pay(double price, String name, String body, PayListener listener)
- PayListener 支付結果監聽類com.bmob.pay.tool.PayListener 有成功、失敗、未知結果、傳回訂單号等方法
類型 | 名稱 | 說明 |
---|---|---|
double | price | 商品的價格,建議測試用0.02 |
String | name | 商品的名稱,請注意不要有違禁字眼,可以為空 隻允許中文、數字、英文和下劃線、英文破折号,否則過濾 |
String | body | 商品的詳情描述,請注意不要有違禁字眼,可以為空 隻允許中文、數字、英文和下劃線、英文破折号,否則過濾 |
- payByWX(double price, String name, PayListener listener)
-
payByWX(double price, String name, String body, PayListener listener)
調用微信支付,要安裝插件(如果沒有安裝,會監聽器的fail方法會傳回-3錯誤碼),插件在sdk文檔的plugin檔案夾下,demo有通過assets安裝的示例
- query(String orderId, OrderQueryListener listener)
類型 | 名稱 | 說明 |
---|---|---|
String | orderId | 支付訂單号,不可為空 |
OrderQueryListener | listener | 查詢結果監聽類com.bmob.pay.tool.OrderQueryListener 有成功、失敗等方法 |
4、示例代碼
package com.subzero.dictionary.pay;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.widget.Toast;
import com.bmob.pay.tool.BmobPay;
import com.bmob.pay.tool.PayListener;
/**
* Bmob支付寶支付示例
* @link http://docs.bmob.cn/androidpay/index.html?menukey=fast_start&key=start_android_pay
*/
public class Pay {
// 申請的Bmob AppId
private String APPID = "換成自己申請的<span style="font-family: Arial, Helvetica, sans-serif;">AppId</span><span style="font-family: Arial, Helvetica, sans-serif;">";</span>
private BmobPay bmobPay;
private ProgressDialog dialog;
private Context context;
public Pay(Context context) {
this.context = context;
}
// 調用支付寶支付
public void payByAli(String name, final double price) {
// 必須先初始化
BmobPay.init(context, APPID);
// 初始化BmobPay對象,可以在支付時再初始化
bmobPay = new BmobPay((Activity) context);
showDialog("正在擷取訂單...");
/**
* name 商品名稱 price 價格
*/
bmobPay.pay(price, name, "來自Android用戶端", new PayListener() {
// 因為網絡等原因,支付結果未知(小機率事件),出于保險起見稍後手動查詢
@Override
public void unknow() {
Toast.makeText(context, "支付結果未知,請稍後手動查詢", Toast.LENGTH_SHORT)
.show();
hideDialog();
}
// 支付成功,如果金額較大請手動查詢确認
@Override
public void succeed() {
Toast.makeText(context, "支付成功!", Toast.LENGTH_SHORT).show();
hideDialog();
}
// 無論成功與否,傳回訂單号
@Override
public void orderId(String orderId) {
// 此處應該儲存訂單号,比如儲存進資料庫等,以便以後查詢
showDialog("擷取訂單成功!請等待跳轉到支付頁面~");
}
// 支付失敗,原因可能是使用者中斷支付操作,也可能是網絡原因
@Override
public void fail(int code, String reason) {
Toast.makeText(context, "支付中斷!", Toast.LENGTH_SHORT).show();
hideDialog();
}
});
}
void showDialog(String message) {
if (dialog == null) {
dialog = new ProgressDialog(context);
dialog.setCancelable(false);
}
dialog.setMessage(message);
dialog.show();
}
void hideDialog() {
if (dialog != null && dialog.isShowing())
try {
dialog.dismiss();
} catch (Exception e) {
}
}
void installBmobPayPlugin(String fileName) {
try {
InputStream is = context.getAssets().open(fileName);
File file = new File(Environment.getExternalStorageDirectory()
+ File.separator + fileName);
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
byte[] temp = new byte[1024];
int i = 0;
while ((i = is.read(temp)) > 0) {
fos.write(temp, 0, i);
}
fos.close();
is.close();
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.parse("file://" + file),
"application/vnd.android.package-archive");
context.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
}
詳細文檔說明:
點選此處