支付宝、微信等支付平台,SDK接口的使用是需要资质认证的,是不允许个人开发者接入的;然而第三方平台(ping++、bmob)的出现让尝试开发支付功能的个人开发者看到了希望,只是需要收取税费(bmob低一些)。下面介绍的是第三方bmob Android支付(bmob官网首页)
bmob官网上也有开发文档,以及实现支付需要的前提条件(完善资料、实名认证等),官网上都有介绍,这里就不列举;
新版与旧版不同,下面介绍的是新版SDK的操作
具体步骤:
1、下载Android支付SDK(不需要下载AndroidSDK)
2、解压,BmobPay_版本号.jar放在项目根目录下libs包中(没有的话,就新建一个),新版的只有一个jar包,旧版的有四个jar包。
3、在你的项目AndroidManifest.xml中声明以下权限
<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" />
4、在AndroidManifest.xml的Application标签下添加以下内容:
<activity
android:name="c.b.a.A"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name="c.b.a.B"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent" />
5、在您的应用程序主Activity的onCreate中调用如下方法:
//(Application ID在后台应用管理的 数据浏览->应用信息->应用密钥->Application ID)
BP.init(context,"你的Application ID");
6、发起支付调用,请使用如下方法:
//第5个参数为true时调用支付宝支付,为false时调用微信支付
BP.pay(MainActivity.this, "商品名称", "商品描述", 0.02, true, new Plistener(){...});
监听返回的四种结果详情请查官网文档
Activity代码:
package com.hpu.bmobpay;
import c.b.BP;
import c.b.PListener;
import com.example.bmobpay.R;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener{
private Button Button_Pay;
private Thread th;
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("tag", "支付SDK的初始化");
//支付SDK的初始化
BP.init(this, "debbad29b32cd9122fd9c513bf215c2a");
Init();
}
private void Init() {
Log.i("tag", "初始化");
//
Button_Pay = (Button) findViewById(R.id.button1);
Button_Pay.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// 点击事件的监听
switch (v.getId()) {
case R.id.button1:
Pay();
break;
default:
break;
}
}
protected void Pay() {
// TODO Auto-generated method stub
Log.i("tag", "pay");
/**
* 第5个参数为true时调用支付宝支付,为false时调用微信支付
*/
BP.pay(MainActivity.this, "商品名称", "商品描述", 0.02, true
,new PListener() {
@Override
public void unknow() {
// 因为网络等问题,不能确认是否支付成功,请稍后手动查询(小概率事件)
Log.i("tag", "unkonw");
Toast.makeText(MainActivity.this, "因为网络等问题,不能确认是否支付成功,请稍后手动查询(小概率事件)", 2000).show();
}
@Override
public void succeed() {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "成功", 2000).show();
}
@Override
public void orderId(String orderid) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "返回的订单号"+orderid, 2000).show();
}
@Override
public void fail(int arg0, String reason) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "失败的序号,reason="+reason, 2000).show();
}
}
);
}
}
xml代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="72dp"
android:text="支付" />
RelativeLayout>