Bomb第三方支付
应用内接入支付流程:
- 第一步:
官网注册http://www.bmob.cn/
创建应用得到application_id
实名认证(一个小时就可审核通过)
下载支付sdk:http://www.bmob.cn/downloads - 第二步:
在开发工具Android studio中创建应用Module
将下载好的sdk解压将libs文件夹下BmobPay_v2.7_160427.jar的复制到 Module名称/libs文件夹下,鼠标右键Add As Library - 第三步:代码的编写
开发者文档:
http://docs.bmob.cn/androidpay/index.html?menukey=fast_start&key=start_android_pay
1.在项目的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" />
2.在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" />
3.在您的应用程序主Activity的onCreate中调用如下方法
BP.init(context,"你的Application ID");
4.支付接口调用
BP.pay(this, title, describe, price, paytype, new PListener())
5.订单查询
Unity.pay(this, title, describe, price, paytype, gameobjectname, requestcode);
其他:微信支付时需要安装微信支付插件
将assets文件夹下的插件BmobPayPlugin.apk复制到新建的assets文件夹下,有写好的方法,手动安装
下面是代码Mainactivity
package com.example.bmobpay.payDemo;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.example.bmobpay.R;
import c.b.BP;
import c.b.PListener;
import c.b.QListener;
import c.b.Unity;
public class MainActivity extends Activity {
TextView mTextViewname;
TextView mTextViewprice;
String goodsname;
double goodsprice;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initview();
//第一个参数是上下文,第二个参数是application id
//初始化
BP.init(this, "你的applicationid");
}
private void initview() {
mTextViewname = (TextView) findViewById(R.id.goodsname);
mTextViewprice = (TextView) findViewById(R.id.price);
}
//调用支付方法
public void myPay(String title, String describe, double price, final boolean paytype) {
/**
* 第一个参数是上下文,第二个参数是商品名称,第三个参数是商品描述
* 第四个是商品价格
* 第5个参数为true时调用支付宝支付,为false时调用微信支付
*/
BP.pay(this, title, describe, price, paytype, new PListener() {
@Override
public void orderId(String s) {
Show("订单号:" + s);
}
@Override
public void succeed() {
Show("支付成功");
}
@Override
public void fail(int i, String s) {
onPayReaultReturn(0.02, "商品121", paytype, 0);
if (i == 7777) {
Show("未安装微信客户端");
}
if (i == -3) {
Show("未安装微信插件");
InstallPlugin.installBmobPayPlugin(MainActivity.this,
InstallPlugin.ASSETS_PLUGIN);
/*Intent intent=new Intent(MainActivity.this,ApkAutoInstallActivity.class);
startActivity(intent);*/
}
Show("支付失败" + i + s);
}
@Override
public void unknow() {
Show("未知");
}
});
}
//用来调用应用中的方法,来告诉应用支付的结果
public void onPayReaultReturn(double price, String describe, boolean paytype, int requestcode) {
String title = "支付";
String gameobjectname = "onPayReaultReturn";
Unity.pay(this, title, describe, price, paytype, gameobjectname, requestcode);
}
//订单查询方法
public void onsearchOrder(String orderid) {
/**
*
*/
BP.query(MainActivity.this, orderid, new QListener() {
@Override
public void succeed(String s) {
Show("查询结果:" + s);
}
@Override
public void fail(int i, String s) {
Show("查询失败:" + s);
}
});
}
public void click(View view) {
goodsname = mTextViewname.getText().toString();
goodsprice = Double.parseDouble(mTextViewprice.getText().toString());
final String items[] = {"支付宝", "微信"};
//1.初始化AlertDialog.Builder对象
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
//2.设置对话框风格
builder.setTitle("选择支付方式")
.setIcon(R.mipmap.ic_launcher)
.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Show(items[which]);
if (which == 0) {
Toast.makeText(MainActivity.this, "" + which, Toast.LENGTH_SHORT).show();
myPay("支付宝支付", "支付宝服装1", goodsprice, true);
onPayReaultReturn(goodsprice,"支付宝服装1",true,1);
} else if (which == 1) {
Toast.makeText(MainActivity.this, "" + which, Toast.LENGTH_SHORT).show();
//myPay("微信支付", "微信服装1", goodsprice, false);
onPayReaultReturn(goodsprice,"微信服装1",false,1);
}
}
});
//3通过AlertDialog创建alertDialog对象
AlertDialog alertDialog = builder.create();
//4显示对话框
alertDialog.show();
}
public void search(View view) {
//onsearchOrder("订单号,在bmob控制台里");//未支付
onsearchOrder("订单号,在bmob控制台里");//已经支付
}
private void Show(String s) {
Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
}
}
Mainactivity的布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".payDemo.MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="商店"
android:textSize="28sp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="商品名称"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="商品价格"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="操作"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/goodsname"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="衣服"/>
<TextView
android:id="@+id/price"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="0.02"/>
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="click"
android:text="购买"/>
</LinearLayout>
<Button
android:text="查询订单"
android:onClick="search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
微信插件安装实现类InstallPlugin
package com.example.bmobpay.payDemo;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
public class InstallPlugin {
public static final String ASSETS_PLUGIN = "BmobPayPlugin.apk";
public static void installBmobPayPlugin(Activity activity,String fileName) {
try {
InputStream is = activity.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");
activity.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
}
注:最近在使用第三方支付,申请支付宝还需要营业执照,可是没有啊,微信申请也是的过程有点麻烦,就选择了Bomb,只用注册下,实名认证就行了,剩下的交给bmob公司了,可是最近支付宝功能不能用了,不知道什么时候好。微信可以用,用两分钱就可测试了。第一次写博客,有不对的请指出哦。