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;
}
}