Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
PayResult payResult = new PayResult((Map<String, String>) msg.obj);
// 同步返回需要验证的信息
String resultInfo = payResult.getResult();
String resultStatus = payResult.getResultStatus();
// 判断resultStatus 为9000则代表支付成功
if (TextUtils.equals(resultStatus, "9000")) {
// 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
Intent intent = new Intent(SignForClassActivity.this, SuccessPayActivity.class);
startActivity(intent);
} else {
// 该笔订单真实的支付结果,需要依赖服务端的异步通知。
Intent intent1 = new Intent(SignForClassActivity.this, CancelPayActivity.class);
startActivity(intent1);
}
}
};
tv_dialog_config_pay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (tv_dialog_config_pay.getText().equals("微信支付")) {
int type = 2;
vxPayConfigPresenter.requestData(type, orderid, session_id);
//这里的appid,替换成自己的即可
IWXAPI api = WXAPIFactory.createWXAPI(SignForClassActivity.this, null);
api.registerApp(Constant.WXPAYAPPID);
PayReq payRequest = new PayReq();
payRequest.appId = appid;//服务器返回的appid
payRequest.partnerId = partnerid;//服务器返回的partnerid
payRequest.prepayId = prepayid;//服务器返回的prepayid
payRequest.packageValue = "Sign=WXPay";//固定值
payRequest.nonceStr = noncestr;//服务器返回的noncestr
payRequest.timeStamp = timestamp;//服务器返回的timestamp
payRequest.sign = sign;//服务器返回的sign
//发起请求,调起微信前去支付
api.sendReq(payRequest);
} else {
int type = 1;
aliPayPresenter.requestData(type, orderid, session_id);
aliPayPresenter.setRequestDataCallback(new AliPayPresenter.RequestDataCallback() {
@Override
public void onCallBack() {
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(SignForClassActivity.this);
Map<String, String> result = alipay.payV2(orderInfo, true);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
}
});
}
}
});
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private static final String TAG = "WXPayEntryActivity";
private String app_id = "wxc43963b5e9aedb6c";//微信开发后台申请的app_id
private IWXAPI api;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
api = WXAPIFactory.createWXAPI(this, Constant.WXPAYAPPID);
api.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
api.handleIntent(intent, this);
}
@Override
public void onReq(BaseReq baseReq) {
}
@Override
public void onResp(BaseResp resp) {
Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
switch (resp.errCode) {
case 0://支付成功
Toast.makeText(this, "支付成功", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(WXPayEntryActivity.this, SuccessPayActivity.class);
startActivity(intent);
break;
case -1://错误,可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等
Toast.makeText(this, "支付错误", Toast.LENGTH_SHORT).show();
//Log.d(TAG, "onResp: resp.errCode = -1 支付错误");
break;
case -2://用户取消,无需处理。发生场景:用户不支付了,点击取消,返回APP。
Intent intent1 = new Intent(WXPayEntryActivity.this, CancelPayActivity.class);
startActivity(intent1);
break;
}
finish();//这里需要关闭该页面
}
}
}
支付宝的实体类
public class PayResult {
private String resultStatus;
private String result;
private String memo;
public PayResult(Map<String, String> rawResult) {
if (rawResult == null) {
return;
}
for (String key : rawResult.keySet()) {
if (TextUtils.equals(key, "resultStatus")) {
resultStatus = rawResult.get(key);
} else if (TextUtils.equals(key, "result")) {
result = rawResult.get(key);
} else if (TextUtils.equals(key, "memo")) {
memo = rawResult.get(key);
}
}
}
@Override
public String toString() {
return "resultStatus={" + resultStatus + "};memo={" + memo
+ "};result={" + result + "}";
}
/**
* @return the resultStatus
*/
public String getResultStatus() {
return resultStatus;
}
/**
* @return the memo
*/
public String getMemo() {
return memo;
}
/**
* @return the result
*/
public String getResult() {
return result;
}
}