天天看點

Android第三方支付——Bmob支付總結

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();
		}
	}

}
           

詳細文檔說明:

點選此處

繼續閱讀