集成支付宝sdk
链接:官方文档
1、导入依赖
dependencies {
// 添加下方的内容
api 'com.alipay.sdk:alipaysdk-android:+@aar'
// ... 其它依赖项
}
2、依赖导入后在AndroidManifest.xml文件里添加 下面两个类
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:screenOrientation="behind"
android:windowSoftInputMode="adjustResize|stateHidden"
tools:replace="android:configChanges" />
<activity
android:name="com.alipay.sdk.app.H5AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind"
android:windowSoftInputMode="adjustResize|stateHidden"
tools:replace="android:configChanges" />
3、创建支付返回的接口回调 success/error
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;
}
}
4、创建自己应用的支付的类
例如:这里包含了微信支付忽略掉就好
public class PayActivity extends BaseActivity<ActivityPayBinding> implements IWXAPIEventHandler {
private static final int SDK_PAY_FLAG = 1;
private String orderInfo; // 订单Id
private String accessToken;
private IWXAPI api;
private boolean paySuccess = false;
private Handler mHandler = new Handler() {
@SuppressLint("HandlerLeak")
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(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则代表支付成功
// 9000为支付成功
// 4000为支付失败
// 6001为取消支付
// 8000为支付结果确认中
if (TextUtils.equals(resultStatus, "9000")) {
// 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
showToast("支付成功");
mViewBinding.paySuccessLayout.payRoot.setVisibility(View.VISIBLE);
mViewBinding.payPriceLayout.setVisibility(View.GONE);
mViewBinding.titleBar.textTitle.setVisibility(View.GONE);
mViewBinding.surePay.setVisibility(View.GONE);
paySuccess = true;
} else {
// 该笔订单真实的支付结果,需要依赖服务端的异步通知。
showToast("取消支付");
}
break;
}
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 初始化支付宝SDK
PayTask payTask = new PayTask(this);
// 初始化微信支付API
api = WXAPIFactory.createWXAPI(PayActivity.this, Contents.APP_ID);
}
@Override
protected void initView() {
mViewBinding.titleBar.textTitle.setText("安全收银台");
String price = getIntent().getExtras().getString("price");
orderInfo = getIntent().getExtras().getString("orderCode");
accessToken = getSharedPreferences("UserInformation", Context.MODE_PRIVATE).getString("access_token", "");
mViewBinding.payPrice.setText(price);
mViewBinding.paySuccessLayout.payPrice.setText(price);
}
@Override
protected void initData() {
mViewBinding.titleBar.backHomePage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (paySuccess) {
finish();
return;
}
showCancelPayDialog();
}
});
mViewBinding.selectAliPay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mViewBinding.selectWechatPay.setChecked(false);
mViewBinding.selectAliPay.setChecked(true);
}
});
mViewBinding.selectWechatPay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mViewBinding.selectWechatPay.setChecked(true);
mViewBinding.selectAliPay.setChecked(false);
}
});
// 确认付款
mViewBinding.surePay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!mViewBinding.selectWechatPay.isChecked() && !mViewBinding.selectAliPay.isChecked()) {
showToast("请选择支付方式");
return;
}
// 支付宝支付
if (mViewBinding.selectAliPay.isChecked()) {
getRequestAlipayPayIdOrWechatPrepayId(Api.GET_ALIPAY_PAYID, "2");
}
// 微信支付
if (mViewBinding.selectWechatPay.isChecked()) {
getRequestAlipayPayIdOrWechatPrepayId(Api.GET_WECHAT_PREPAYID, "1");
}
}
});
}
private void getRequestAlipayPayIdOrWechatPrepayId(String url, String payWay) {
HashMap<String, String> params = new HashMap<>();
params.put("order_code", orderInfo);
OkHttpUtils.get()
.get(this
, url
, accessToken
, params
, new JsonResponseHandler() {
@Override
public void onFailure(int statusCode, String error_msg) {
super.onFailure(statusCode, error_msg);
}
@Override
public void onSuccess(int code, JSONObject jsonBody) {
super.onSuccess(code, jsonBody);
try {
JSONObject jsonObject = new JSONObject(String.valueOf(jsonBody));
int code1 = jsonObject.getInt("code");
if (code1 != Contents.SUCCESS) {
showToast(jsonObject.getString("msg"));
return;
}
} catch (JSONException e) {
throw new RuntimeException(e);
}
Gson gson = new Gson();
if (payWay.equals("2")) { // 支付宝
DataGetAlipayPayId response = gson.fromJson(String.valueOf(jsonBody), DataGetAlipayPayId.class);
if (response.getCode() == Contents.SUCCESS) {
String data = response.getData();
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(PayActivity.this);
Map <String,String> result = alipay.payV2(data ,true);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
// 支付后返回的结果
mHandler.sendMessage(msg);
}
};
// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
}
} else if (payWay.equals("1")) { // 微信
DataGetWechatPrepayId response = gson.fromJson(String.valueOf(jsonBody), DataGetWechatPrepayId.class);
if (response.getCode() == Contents.SUCCESS) {
String prepayId = response.getData().getPrepayId();
getRequestWechatSign(prepayId); // 微信支付获取签名
}
}
}
});
}
// 微信支付获取签名
private void getRequestWechatSign(String prepayId) {
HashMap<String, String> params = new HashMap<>();
params.put("prepay_id", prepayId);
OkHttpUtils.get()
.get(this
, Api.GET_WECHAT_SIGN
, accessToken
, params
, new JsonResponseHandler() {
@Override
public void onFailure(int statusCode, String error_msg) {
super.onFailure(statusCode, error_msg);
}
@Override
public void onSuccess(int code, JSONObject jsonBody) {
super.onSuccess(code, jsonBody);
Gson gson = new Gson();
DataGetWechatSign response = gson.fromJson(String.valueOf(jsonBody), DataGetWechatSign.class);
if (response.getCode() == Contents.SUCCESS) {
PayReq request = new PayReq();
request.appId = Contents.APP_ID;
request.partnerId = Contents.PARTNER_ID;
request.prepayId= prepayId;
request.packageValue = "Sign=WXPay";
request.nonceStr= response.getData().getNonceStr();
request.timeStamp= response.getData().getTimeStamp();
request.sign= response.getData().getSign();
api.sendReq(request);
}
}
});
}
private void showCancelPayDialog() {
View view = LayoutInflater.from(this).inflate(R.layout.dialog_sure_cancel_pay, null, false);
TextView sureLeave = view.findViewById(R.id.sure_leave);
TextView continuePay = view.findViewById(R.id.continue_payment);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(view);
AlertDialog alertDialog = builder.create();
alertDialog.show();
sureLeave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.dismiss();
Intent intent = new Intent(PayActivity.this, OrderActivity.class);
Bundle bundle = new Bundle();
bundle.putInt("position", 0);
intent.putExtras(bundle);
startActivity(intent);
finish();
}
});
continuePay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.dismiss();
if (!mViewBinding.selectWechatPay.isChecked() && !mViewBinding.selectAliPay.isChecked()) {
showToast("请选择支付方式");
return;
}
// 支付宝支付
if (mViewBinding.selectAliPay.isChecked()) {
getRequestAlipayPayIdOrWechatPrepayId(Api.GET_ALIPAY_PAYID, "2");
}
// 微信支付
if (mViewBinding.selectWechatPay.isChecked()) {
getRequestAlipayPayIdOrWechatPrepayId(Api.GET_WECHAT_PREPAYID, "1");
}
}
});
alertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
mViewBinding.popShowBgLayout.popShowBg.setVisibility(View.GONE);
}
});
}
@Override
public void onReq(BaseReq baseReq) {
}
@Override
public void onResp(BaseResp baseResp) {
}
}