源碼介紹:
個(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)聽(tīng)端Java源碼。支持多賬號(hào)多客戶端運(yùn)行恳不,源碼有詳細(xì)說(shuō)明文檔檩小。
目前支持如下免簽支付:
微信二維碼?、支付寶二維碼烟勋、支付寶紅包规求、支付寶主動(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)聽(tīng)客戶端
支持多賬號(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);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? });
? ? }