源碼介紹:
個(gè)人免簽支付是指使用自己的微信支付寶賬號(hào)作為個(gè)人網(wǎng)站的收款賬號(hào),網(wǎng)站訂單支付成功后,網(wǎng)站能實(shí)時(shí)收到成功回調(diào)信息。
系統(tǒng)基于xposed逆向微信、支付寶、云閃付來(lái)實(shí)現(xiàn)個(gè)人收款免簽支付。(tag:個(gè)人收款,免簽支付,微信免簽,支付寶免簽,云閃付免簽)
源碼地址:https://github.com/wxs2/xposed-pay
支付寶xposed的源碼不多,個(gè)人免簽這個(gè)源碼還是很實(shí)用的。能自定義金額,自動(dòng)出碼,自動(dòng)回調(diào),支付寶能H5喚起,源碼包含PHP后臺(tái)源碼和微信支付寶監(jiān)聽端Java源碼。支持多賬號(hào)多客戶端運(yùn)行,源碼有詳細(xì)說明文檔。
目前支持如下免簽支付:
微信二維碼?、支付寶二維碼、支付寶紅包、支付寶主動(dòng)收款、支付寶銀行卡、云閃付
系統(tǒng)介紹:
使用個(gè)人支付寶或微信賬號(hào)收款,無(wú)須公司資質(zhì)接入支付寶微信平臺(tái)
基于xposed逆向支付寶微信App實(shí)現(xiàn)自動(dòng)生成指定金額二維碼,支付成功后自動(dòng)回調(diào)
系統(tǒng)包含PHP后臺(tái)和Android監(jiān)聽客戶端
支持多賬號(hào),多客戶端運(yùn)行
運(yùn)行效果:

核心代碼:
hook微信二維碼生成函數(shù)
private void hookQRCreat(final ClassLoader appClassLoader, final Context context) {
? ? ? ? ? ? Class<?> clazz = XposedHelpers.findClass("com.tencent.mm.plugin.collect.b.s", appClassLoader);
? ? ? ? XposedBridge.hookAllMethods(clazz, "a", new XC_MethodHook() {
? ? ? ? ? ? @Override
? ? ? ? ? ? protected void beforeHookedMethod(MethodHookParam param)
? ? ? ? ? ? ? ? ? ? throws Throwable {
? ? ? ? ? ? }
? ? ? ? ? ? @Override
? ? ? ? ? ? protected void afterHookedMethod(MethodHookParam param) {
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? LogUtils.log("hookQRCreat start:");
? ? ? ? ? ? ? ? ? ? QrBean qrBean = new QrBean();
? ? ? ? ? ? ? ? ? ? qrBean.setChannel(QrBean.WECHAT);
? ? ? ? ? ? ? ? ? ? Field moneyField = XposedHelpers.findField(param.thisObject.getClass(), "kcp");
? ? ? ? ? ? ? ? ? ? Double money = (Double) moneyField.get(param.thisObject);
? ? ? ? ? ? ? ? ? ? LogUtils.log("hookQRCreat money:"+money.toString());
? ? ? ? ? ? ? ? ? ? Field markField = XposedHelpers.findField(param.thisObject.getClass(), "desc");
? ? ? ? ? ? ? ? ? ? String mark = (String) markField.get(param.thisObject);
? ? ? ? ? ? ? ? ? ? LogUtils.log("hookQRCreat mark:"+mark);
? ? ? ? ? ? ? ? ? ? Field payurlField = XposedHelpers.findField(param.thisObject.getClass(), "kco");
? ? ? ? ? ? ? ? ? ? String payurl = (String) payurlField.get(param.thisObject);
? ? ? ? ? ? ? ? ? ? LogUtils.log("hookQRCreat payurl:"+payurl);
? ? ? ? ? ? ? ? ? ? qrBean.setMark_sell(mark);
? ? ? ? ? ? ? ? ? ? qrBean.setUrl(payurl);
? ? ? ? ? ? ? ? ? ? LogUtils.log( "com.tencent.mm.plugin.collect.b.s qrBean:"+ JSON.toJSONString(qrBean));
? ? ? ? ? ? ? ? ? ? Intent broadCastIntent = new Intent();
? ? ? ? ? ? ? ? ? ? broadCastIntent.putExtra("data", qrBean.toString());
? ? ? ? ? ? ? ? ? ? broadCastIntent.setAction(HookMain.RECEIVE_QR_WECHAT);
//? ? ? ? ? ? ? ? broadCastIntent.setComponent( new ComponentName( "com.sjk.tpay" ,
//? ? ? ? ? ? ? ? ? ? ? ? "com.sjk.tpay.ReceiverMain") );
? ? ? ? ? ? ? ? ? ? context.sendBroadcast(broadCastIntent);
? ? ? ? ? ? ? ? ? ? LogUtils.log("hookQRCreat end:"+JSON.toJSONString(param));
? ? ? ? ? ? ? ? }catch (Exception e){
? ? ? ? ? ? ? ? ? ? LogUtils.log("hookQRCreat exception:"+Log.getStackTraceString(e));
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });
? ? }
hook支付寶二維碼生成函數(shù)
private void hookQRCreat(final ClassLoader appClassLoader, final Context context) {
? ? ? ? XposedHelpers.findAndHookMethod("com.alipay.mobile.payee.ui.PayeeQRSetMoneyActivity", appClassLoader, "a",
? ? ? ? ? ? ? ? XposedHelpers.findClass("com.alipay.transferprod.rpc.result.ConsultSetAmountRes", appClassLoader), new XC_MethodHook() {
? ? ? ? ? ? ? ? ? ? @Override
? ? ? ? ? ? ? ? ? ? protected void afterHookedMethod(MethodHookParam param) throws Throwable {
? ? ? ? ? ? ? ? ? ? ? ? Field moneyField = XposedHelpers.findField(param.thisObject.getClass(), "g");
? ? ? ? ? ? ? ? ? ? ? ? String money = (String) moneyField.get(param.thisObject);
? ? ? ? ? ? ? ? ? ? ? ? Field markField = XposedHelpers.findField(param.thisObject.getClass(), "c");
? ? ? ? ? ? ? ? ? ? ? ? Object markObject = markField.get(param.thisObject);
? ? ? ? ? ? ? ? ? ? ? ? String mark = (String) XposedHelpers.callMethod(markObject, "getUbbStr");
? ? ? ? ? ? ? ? ? ? ? ? Object consultSetAmountRes = param.args[0];
? ? ? ? ? ? ? ? ? ? ? ? Field consultField = XposedHelpers.findField(consultSetAmountRes.getClass(), "qrCodeUrl");
? ? ? ? ? ? ? ? ? ? ? ? String payurl = (String) consultField.get(consultSetAmountRes);
? ? ? ? ? ? ? ? ? ? ? ? Field consultField2 = XposedHelpers.findField(consultSetAmountRes
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .getClass(), "printQrCodeUrl");
? ? ? ? ? ? ? ? ? ? ? ? String payurloffline = (String) consultField2.get(consultSetAmountRes);
? ? ? ? ? ? ? ? ? ? ? ? QrBean qrBean = new QrBean();
? ? ? ? ? ? ? ? ? ? ? ? qrBean.setChannel(QrBean.ALIPAY);
? ? ? ? ? ? ? ? ? ? ? ? qrBean.setMark_sell(mark);
? ? ? ? ? ? ? ? ? ? ? ? qrBean.setUrl(payurl);
? ? ? ? ? ? ? ? ? ? ? ? Intent broadCastIntent = new Intent()
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .putExtra("data", qrBean.toString())
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .setAction(RECEIVE_QR_ALIPAY);
? ? ? ? ? ? ? ? ? ? ? ? context.sendBroadcast(broadCastIntent);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? });
? ? }