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();
}
}
}
详细文档说明: