先放上接入两个支付平台的官方文档地址
一、支付宝支付
导入开发资源
在商户应用工程的AndroidManifest.xml文件里面添加声明:
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" >
</activity>
<activity
android:name="com.alipay.sdk.auth.AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" >
</activity>
和权限声明:
<uses-permission android:name="android.permission.INTERNET" />
<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" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
添加混淆规则
-libraryjars libs/alipaySingle-20161222.jar
-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.sdk.app.AuthTask{ public *;}
二、微信支付
导入开发资源
商户在微信开放平台申请开发应用后,微信开放平台会生成APP的唯一标识APPID。由于需要保证支付安全,需要在开放平台绑定商户应用包名和应用签名,设置好后才能正常发起支付。设置界面在【开放平台】中的栏目【管理中心 / 修改应用 / 修改开发信息】里面,如图所示:
应用包名:是在APP项目配置文件AndroidManifest.xml中声明的package值,例如DEMO中的package=”net.sourceforge.simcpux”。
应用签名:根据项目的应用包名和编译使用的keystore,可由签名工具生成一个32位的md5串,在调试的手机上安装签名工具后,运行可生成应用签名串,如图8.9所示,绿色串即应用签名。签名工具下载地址
https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk
商户APP工程中引入微信JAR包,调用API前,需要先向微信注册您的APPID,代码如下:
public class MyApplication extends Application {
IWXAPI msgApi = null;
@Override
public void onCreate()
{
msgApi = WXAPIFactory.createWXAPI(this, null);
// 将该app注册到微信
msgApi.registerApp(Constant.WX_APP_ID);
}
}
Constant.java代码
public class Constant {
//appid 微信分配的公众账号ID
public static final String WX_APP_ID = "wxc2d0381e95948db6";
//商户号 微信分配的公众账号ID
public static final String WX_MCH_ID = "1432223602";
//API密钥,在商户平台设置
public static final String WX_API_KEY = "";
}
下面是集合调用两种支付方法的统一方法(仅适用于服务器返回支付参数orderInfo):
//服务器返回加密参数
private String orderInfo;
/**
* 支付宝
*/
private void alipay(final String orderInfo) {
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(PayActivity.this);
Map<String, String> result = alipay.payV2(orderInfo, true);
Log.i("msp", result.toString());
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
Thread payThread = new Thread(payRunnable);
payThread.start();
}
/**
* 微信支付
*
* @param data
*/
private void weixinPay(String data) {
// 通过WXAPIFactory工厂,获取IWXAPI的实例
IWXAPI api = WXAPIFactory.createWXAPI(this, null);
// 将该app注册到微信
api.registerApp(ConstantValue.WX_ID);
LogUtil.d("data=" + data);
try {
JSONObject json = new JSONObject(data);
PayReq req = new PayReq();
req.appId = json.getString("appid");
req.partnerId = json.getString("partnerid");
req.prepayId = json.getString("prepayid");
req.nonceStr = json.getString("noncestr");
req.timeStamp = json.getString("timestamp");
req.packageValue = json.getString("package");
req.sign = json.getString("sign");
req.extData = "app data"; // optional
// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
api.sendReq(req);
finish();
} catch (JSONException e) {
e.printStackTrace();
}
}
返回调用的线程
private Handler mHandler = new Handler() {
@SuppressWarnings("unused")
public void handleMessage(Message msg) {
switch (msg.what) {
case SDK_PAY_FLAG:
@SuppressWarnings("unchecked")
PayResult payResult = new PayResult((Map<String, String>) msg.obj);
/**
对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
*/
String resultInfo = payResult.getResult();// 同步返回需要验证的信息
String resultStatus = payResult.getResultStatus();
// 判断resultStatus 为9000则代表支付成功
if (TextUtils.equals(resultStatus, "9000")) {
// 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
Toast.makeText(PayActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
startActivity(new Intent(PayActivity.this, PayEndActivity.class));
finish();
} else {
// 该笔订单真实的支付结果,需要依赖服务端的异步通知。
Toast.makeText(PayActivity.this, payResult.getMemo(), Toast.LENGTH_SHORT).show();
}
break;
case 0:
orderList = orderdetails.getOrders();
for (OrderDetailsBean.OrdersBean ordersBean : orderList) {
if (ordersBean.getProducts().size() != 0) {
productsBeanList = ordersBean.getProducts();
for (OrderDetailsBean.OrdersBean.ProductsBean productsBean : productsBeanList) {
if (productsBean.getSkus().size() != 0) {
datas = productsBean.getSkus();
allSkudatas.addAll(datas);
}
}
}
}
ordersbean = orderList.get(0);
order_priceTv.setText("¥" + orderdetails.getTotalPay() + "");
orderAdapter = new OrderAdapter(context, allSkudatas);
goods_Lv.setAdapter(orderAdapter);
dialogUtils1.dismiss();
break;
default:
break;
}
}
};
所有代码都贴在上面了,大家不懂的可以多看下官网。