2025-10-20 10:16:44 +08:00
|
|
|
|
package com.xscm.moduleutil.widget;
|
|
|
|
|
|
|
|
|
|
|
|
import static com.xscm.moduleutil.utils.permission.PermissionUtils.TAG;
|
|
|
|
|
|
|
|
|
|
|
|
import android.annotation.SuppressLint;
|
|
|
|
|
|
import android.app.Activity;
|
|
|
|
|
|
import android.content.Context;
|
|
|
|
|
|
import android.os.Handler;
|
|
|
|
|
|
import android.os.Message;
|
|
|
|
|
|
import android.text.TextUtils;
|
|
|
|
|
|
|
|
|
|
|
|
import com.alipay.sdk.app.PayTask;
|
|
|
|
|
|
import com.blankj.utilcode.util.ToastUtils;
|
|
|
|
|
|
import com.orhanobut.logger.Logger;
|
2025-10-24 17:52:11 +08:00
|
|
|
|
import com.tencent.mm.opensdk.modelbiz.WXLaunchMiniProgram;
|
2025-10-20 10:16:44 +08:00
|
|
|
|
import com.xscm.moduleutil.R;
|
|
|
|
|
|
import com.xscm.moduleutil.bean.AppPay;
|
|
|
|
|
|
import com.xscm.moduleutil.event.PayEvent;
|
|
|
|
|
|
import com.tencent.liteav.base.Log;
|
|
|
|
|
|
import com.tencent.mm.opensdk.constants.ConstantsAPI;
|
|
|
|
|
|
import com.tencent.mm.opensdk.modelbase.BaseResp;
|
|
|
|
|
|
import com.tencent.mm.opensdk.modelpay.PayReq;
|
|
|
|
|
|
import com.tencent.mm.opensdk.openapi.IWXAPI;
|
|
|
|
|
|
|
|
|
|
|
|
import org.greenrobot.eventbus.EventBus;
|
|
|
|
|
|
|
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
|
|
public class PaymentUtil {
|
|
|
|
|
|
private static final int SDK_PAY_FLAG = 1;
|
|
|
|
|
|
public static void payAlipay(final Context mContext, String orderNo) {
|
|
|
|
|
|
// 订单信息
|
|
|
|
|
|
final String orderInfo = orderNo;
|
|
|
|
|
|
Runnable payRunnable = new Runnable() {
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public void run() {
|
|
|
|
|
|
PayTask alipay = new PayTask((Activity) mContext);
|
|
|
|
|
|
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 static void payWxMiniProgram2(IWXAPI api, AppPay appPay) {
|
|
|
|
|
|
if (!api.isWXAppInstalled()) {
|
|
|
|
|
|
ToastUtils.showShort("请安装微信");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
PayReq request = new PayReq();
|
|
|
|
|
|
request.appId = appPay.getWx().getAppid();
|
|
|
|
|
|
request.partnerId = appPay.getWx().getPartnerid();
|
|
|
|
|
|
request.prepayId= appPay.getWx().getPrepayid();
|
|
|
|
|
|
request.packageValue = "Sign=WXPay";
|
|
|
|
|
|
request.nonceStr= appPay.getWx().getNoncestr();
|
|
|
|
|
|
request.timeStamp= appPay.getWx().getTimestamp();
|
|
|
|
|
|
request.sign= appPay.getWx().getSign();
|
|
|
|
|
|
api.sendReq(request);
|
|
|
|
|
|
|
|
|
|
|
|
Logger.e("@@@@@","payWxMiniProgram2:"+request);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-10-24 17:52:11 +08:00
|
|
|
|
public static void payWxMiniProgramWx(IWXAPI api, String path) {
|
|
|
|
|
|
if (!api.isWXAppInstalled()) {
|
|
|
|
|
|
ToastUtils.showShort("请安装微信");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req();
|
|
|
|
|
|
req.userName = "gh_e64a1a89a0ad"; // 填小程序原始id
|
|
|
|
|
|
req.path = "pages/orderDetail/orderDetail?"+path; ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。
|
|
|
|
|
|
// req.path="pages/orderDetail/orderDetail?appid=00344656&body=user_Recharge_to_chumeng_App&version=12&trxamt=1¬ify_url=http://tapp.qxcms.com/api/payment/allinpayNotify&paytype=W06&randomstr=67e6671866f0e&cusid=5647950737575ZK&remark=1&reqsn=20250328529202885800&signtype=RSA&sign=O+DT6XMstf+0F8P3li/PM3lZGgam3fBqs2L6pKXUUVadd9kYiuIrbKxzrGVJ47uPWEIGV2W903nKJY+wqAnoKWvGTMMmuEsU+2gOWnDmp7X58Rw7eDDLjy0TGDxheIlMHwJmg0gOCiHGYoiJB61WQlyX4vvKZy9DOuepqnNPvC2ByeL2Vi8eRi1eqoA9PqmePzhFDz5l/EB1UOm8/XmXv4FKO7b/Im7M9cRNX3tXqbKURr5P7ohj42VF8DoYJYp7eAa3ql1GlYDJIbG+D7NGbPkp8AEKUrAShkMgNpLCnIcAGGlEhW1la8qn+/WVazH7CjUrJvqWcKMafSZcLxmMFA==";
|
|
|
|
|
|
req.miniprogramType = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE;// 可选打开 开发版,体验版和正式版
|
|
|
|
|
|
api.sendReq(req);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-10-20 10:16:44 +08:00
|
|
|
|
public void onResp(BaseResp resp){
|
|
|
|
|
|
if(resp.getType()== ConstantsAPI.COMMAND_PAY_BY_WX){
|
|
|
|
|
|
Log.d(TAG,"onPayFinish,errCode="+resp.errCode);
|
|
|
|
|
|
// AlertDialog.Builder builder=new AlertDialog.Builder(this);
|
|
|
|
|
|
// builder.setTitle("");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@SuppressLint("HandlerLeak")
|
|
|
|
|
|
public static Handler mHandler = new Handler() {
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public void handleMessage(Message msg) {
|
|
|
|
|
|
switch (msg.what) {
|
|
|
|
|
|
case SDK_PAY_FLAG: {
|
|
|
|
|
|
PayResult payResult = new PayResult((Map<String, String>) msg.obj);
|
|
|
|
|
|
/**
|
|
|
|
|
|
对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。
|
|
|
|
|
|
*/
|
|
|
|
|
|
// 同步返回需要验证的信息
|
|
|
|
|
|
String resultInfo = payResult.getResult();
|
|
|
|
|
|
String resultStatus = payResult.getResultStatus();
|
|
|
|
|
|
// 判断resultStatus 为9000则代表支付成功
|
|
|
|
|
|
if (TextUtils.equals(resultStatus, "9000")) {
|
|
|
|
|
|
// 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
|
|
|
|
|
|
ToastUtils.showShort("支付成功");
|
|
|
|
|
|
PayEvent messageEvent = new PayEvent(Constants.PAYSUCESS, "支付成功");
|
|
|
|
|
|
EventBus.getDefault().post(messageEvent);
|
|
|
|
|
|
} else if (TextUtils.equals(resultStatus, "6001")) {
|
|
|
|
|
|
// 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
|
|
|
|
|
|
ToastUtils.showShort("支付取消");
|
|
|
|
|
|
PayEvent messageEvent = new PayEvent(-2, "支付取消");
|
|
|
|
|
|
EventBus.getDefault().post(messageEvent);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
// 该笔订单真实的支付结果,需要依赖服务端的异步通知。
|
|
|
|
|
|
ToastUtils.showShort("支付失败");
|
|
|
|
|
|
// StatisticsUtils.addEvent(MyApplication.getInstance(), Constant.OpenInstall.ALIRECHARGEFAIL);
|
|
|
|
|
|
// StatisticsUtils.addEvent(MyApplication.getInstance(), Constant.OpenInstall.RECHARGEFAIL);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
default:
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|