zoukankan      html  css  js  c++  java
  • 微信支付宝xposed个人收款免签支付源码

    源码介绍:

            个人免签支付是指使用自己的微信支付宝账号作为个人网站的收款账号,网站订单支付成功后,网站能实时收到成功回调信息。
            系统基于xposed逆向微信、支付宝、云闪付来实现个人收款免签支付。(tag:个人收款,免签支付,微信免签,支付宝免签,云闪付免签)

    源码地址:https://github.com/wxs2/xposed-pay

    测试地址(点我跳转)  

    目前支持如下免签支付:

    • 微信二维码 、支付宝二维码、支付宝红包、支付宝主动收款、支付宝银行卡、云闪付

    系统介绍:

    • 使用个人支付宝或微信账号收款,无须公司资质接入支付宝微信平台
    • 基于xposed逆向支付宝微信App实现自动生成指定金额二维码,支付成功后自动回调
    • 系统包含PHP后台和Android监听客户端
    • 支持多账号,多客户端运行
    • 自动H5唤醒:支付宝红包、支付宝主动收款均支持自动唤醒原生支付宝支付,无须手动扫码。该功能请使用手机浏览器测试,生码后点击 <打开支付宝>即可

    运行效果:

    核心代码:

    hook微信二维码生成函数

    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支付宝二维码生成函数

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

      

  • 相关阅读:
    为EasySharding.EFCore提供Dapper相关查询扩展
    古典音乐作品编号标记解读
    乐理基础
    音乐指挥家
    2021年,年终总结
    有关Android launchMode 在APP(task)之间的应用——扔物线视频
    Springboot Jpa 有关多数据源的问题
    Python运算符及优先级
    高中信息技术(Python)重难点4:切片
    高中信息技术(Python)必修1 数据与计算 出现的模块和函数
  • 原文地址:https://www.cnblogs.com/cinser/p/11973755.html
Copyright © 2011-2022 走看看