创建 包名.wxapi.WXPayEntryActivity 文件,保证内容如下(WechartUtils下面会给出):
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelpay.PayResp;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
public static final String APP_ID = "";//填入自己的appid
public static Back authBack;
public interface Back {
public void onFiled(String errorMsg);
public void onSuccess(String code, String state);
}
public static void registAuthBack(Back back) {
authBack = back;
}
public static void unregistAuthBack() {
authBack = null;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WechartUtils.getInstance(this, APP_ID)
.handleIntent(this, this);
}
@Override
public void onReq(BaseReq baseReq) {
Log.e("-----1", "baseReq=" + baseReq);
}
@Override
public void onResp(BaseResp baseResp) {
switch (baseResp.getType()) {
case ConstantsAPI.COMMAND_PAY_BY_WX:
if (authBack != null) {
// 0:成功; -1:错误; -2:用户取消;
PayResp payResp = (PayResp) baseResp;
if (payResp.errCode == 0) {
authBack.onSuccess(String.valueOf(payResp.errCode), payResp.prepayId);
} else {
authBack.onFiled(baseResp.errStr);
}
}
break;
}
finish();
}
@Override
protected void onDestroy() {
super.onDestroy();
WechartUtils.getInstance(this, APP_ID)
.unregisterApp(this);
}
}
创建WechartUtils文件用于公共处理支付
import android.app.Activity;
import android.util.Log;
import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.modelpay.PayReq;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import java.util.concurrent.ConcurrentHashMap;
public class WechartUtils {
private static final WechartUtils wechartUtils = new WechartUtils();
private static final ConcurrentHashMap apis = new ConcurrentHashMap<>();
private WechartUtils() {
}
public static WechartUtils getInstance(Activity activity, String appId) {
if (activity != null
&& !apis.containsKey(activity.getLocalClassName())) {
IWXAPI api = WXAPIFactory.createWXAPI(activity, appId, true);
api.registerApp(appId);
apis.put(activity.getLocalClassName(), api);
}
return wechartUtils;
}
public WechartUtils handleIntent(Activity activity
, IWXAPIEventHandler handler) {
apis.get(activity.getLocalClassName())
.handleIntent(activity.getIntent(), handler);
return this;
}
public void pay(Activity activity, String appId, String partnerId, String packageName
, String prepayId, String nonceStr, String timeStamp, String sign) {
if (activity == null) {
return;
}
PayReq req = new PayReq();
req.appId = appId;//appid
req.partnerId = partnerId;//微信支付分配的商户号
req.packageValue = packageName;//暂填写固定值Sign=WXPay
req.prepayId = prepayId;//微信返回的支付交易会话ID
req.nonceStr = nonceStr;//随机字符串
req.timeStamp = timeStamp;//时间戳
req.sign = sign;//签名
IWXAPI api = apis.get(activity.getLocalClassName());
if (api != null) {
api.sendReq(req);
}
}
public void login(Activity activity) {
if (activity == null) {
return;
}
SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = String.valueOf(System.currentTimeMillis());
IWXAPI api = apis.get(activity.getLocalClassName());
if (api != null) {
api.sendReq(req);
}
}
public void unregisterApp(Activity activity) {
if (activity == null) {
return;
}
IWXAPI api = apis.get(activity.getLocalClassName());
if (api != null) {
api.unregisterApp();
apis.remove(activity.getLocalClassName());
}
}
}
在AndroidManifest.xml文件内注册activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:label="@string/app_name" />
创建好工具文件后可以开始准备开发了,这里贴出主要使用伪代码。
public class DemoActivity extends Activity {
private WechartUtils wechartUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
//初始化工具
wechartUtils = WechartUtils.getInstance(this, WXPayEntryActivity.APP_ID);
//注册微信支付回调
WXPayEntryActivity.registAuthBack(new WXPayEntryActivity.Back() {
@Override
public void onFiled(String errorMsg) {
//支付失败回调
}
@Override
public void onSuccess(String code, String state) {
//失败成功回调
}
});
}
//开始微信支付方法
private void startWechatPay() {
//去服务器获取签名信息 具体返回的信息可查看后面的后台开发
WXResponse response = getWXResponse();
//调用wechartUtils的pay方法调起微信支付。
wechartUtils.pay(this, response.appid, response.partnerid
, response.packageName, response.prepayid, response.noncestr
, response.timestamp, response.sign);
}
@Override
protected void onDestroy() {
//取消注册
wechartUtils.unregisterApp(this);
WXPayEntryActivity.unregistAuthBack();
super.onDestroy();
}
}