精华内容
下载资源
问答
  • 最近做APP支付,微信下单没有问题,成功获取了预支付订单id,然后二次签名提供给前端,却一直提示支付签名验证失败,不知道什么原因,故期望大神能解答一下 二次签名 Map<String, String> returnMap = new ...

    问题描述

    最近做APP支付,微信下单没有问题,成功获取了预支付订单id,然后二次签名提供给前端,却一直提示支付签名验证失败,不知道什么原因,故期望大神能解答一下

    二次签名

                       Map<String, String> returnMap = new HashMap<>();
                        returnMap.put("appid", response.get("appid"));
                        returnMap.put("noncestr", response.get("nonce_str"));
                        returnMap.put("package","Sign=WXPay");
                        returnMap.put("partnerid", response.get("mch_id"));
                        returnMap.put("prepayid", response.get("prepay_id"));
                        returnMap.put("timestamp", String.valueOf(System.currentTimeMillis() / 1000));//单位为秒
    
                        String sign = WXPayUtil.generateSignature(returnMap, config.getKey());// 二次签名
                        returnMap.put("sign",sign); //签名
    

    签名代码使用的是微信提供的SDK

    /**
         * 生成签名
         *
         * @param data 待签名数据
         * @param key API密钥
         * @return 签名
         */
        public static String generateSignature(final Map<String, String> data, String key) throws Exception {
            return generateSignature(data, key, SignType.MD5);
        }
    
        /**
         * 生成签名. 注意,若含有sign_type字段,必须和signType参数保持一致。
         *
         * @param data 待签名数据
         * @param key API密钥
         * @param signType 签名方式
         * @return 签名
         */
        public static String generateSignature(final Map<String, String> data, String key, SignType signType) throws Exception {
            Set<String> keySet = data.keySet();
            String[] keyArray = keySet.toArray(new String[keySet.size()]);
            Arrays.sort(keyArray);
            StringBuilder sb = new StringBuilder();
            for (String k : keyArray) {
                if (k.equals(WXPayConstants.FIELD_SIGN)) {
                    continue;
                }
                if (data.get(k).trim().length() > 0) // 参数值为空,则不参与签名
                    sb.append(k).append("=").append(data.get(k).trim()).append("&");
            }
            sb.append("key=").append(key);
            if (SignType.MD5.equals(signType)) {
                return MD5(sb.toString()).toUpperCase();
            }
            else if (SignType.HMACSHA256.equals(signType)) {
                return HMACSHA256(sb.toString(), key);
            }
            else {
                throw new Exception(String.format("Invalid sign_type: %s", signType));
            }
        }
    
    

    解决办法

    已解决,也不知道什么原因,调整了一下数据就好了

    展开全文
  • 微信APP支付验证签名失败 如果在Android及IOS端出现签名失败,可以通过以下方式解决: 1、后端延签成功,但是APP端始终签名失败,这很可能是微信支付SDK新版本问题,在APP端将Sgin参数设置为 “MD5”,而不是后端...

    微信APP支付验证签名失败

    如果在Android及IOS端出现签名失败,可以通过以下方式解决:

    1、后端延签成功,但是APP端始终签名失败,这很可能是微信支付SDK新版本问题,在APP端将Sgin参数设置为 “MD5”,而不是后端返回的paySgin值。

    https://developers.weixin.qq.com/community/develop/doc/0006aec1dbcf907dc8fa1054e51000?highLine=%25E6%2594%25AF%25E4%25BB%2598%25E9%25AA%258C%25E8%25AF%2581%25E7%25AD%25BE%25E5%2590%258D%25E5%25A4%25B1%25E8%25B4%25A5

    2、如果上面还不行,需要将 商户的 API密码和APIV3密码都重置下

    3、微信提供的后端SDK中的WXPay.java类中以下代码调整为MD5

    https://developers.weixin.qq.com/community/develop/article/doc/000c0e3ac880f0488d1bc530355c13

    另外不得不吐槽下微信支付的帮助文档太差,导致接入支付时候要走很多弯路!!

    另外不得不感谢网友将解决问题结果共享到网上!

    展开全文
  • 这两天APP微信支付后端代码更换为微信官方的java版SDK(java_sdk_v3.0.9),更换之后APP端发起支付提示支付签名有问题,最后查看SDK源码发现,原来签名方式有问题,记得以前公司老代码加密方式都是MD5,一直是没问题...

    这两天APP微信支付后端代码更换为微信官方的java版SDK(java_sdk_v3.0.9),更换之后APP端发起支付提示支付签名有问题,最后查看SDK源码发现,原来签名方式有问题,记得以前公司老代码加密方式都是MD5,一直是没问题的。官方的SDK只有在沙盒环境下才是MD5加密方式,最后不得不修改SDK源码,手动设置签名方式为MD5。异步回调验签方法默认是MD5的。

    com.github.wxpay.sdk.WXPay类中加了两个重载构造方法:

        // 原有的构造方法
        public WXPay(final WXPayConfig config) throws Exception {
            this(config, null, true, false);
        }
    
        // 新增的构造方法
        public WXPay(final WXPayConfig config, SignType signType) throws Exception {
            this(config, null, true, false, signType);
        }
    
        // 原有的构造方法
        public WXPay(final WXPayConfig config, final String notifyUrl,
                final boolean autoReport, final boolean useSandbox)
                throws Exception {
            this.config = config;
            this.notifyUrl = notifyUrl;
            this.autoReport = autoReport;
            this.useSandbox = useSandbox;
            if (useSandbox) {
                this.signType = SignType.MD5; // 沙箱环境
            } else {
                this.signType = SignType.HMACSHA256;
            }
            this.wxPayRequest = new WXPayRequest(config);
        }
    
        // 新增的构造方法
        public WXPay(final WXPayConfig config, final String notifyUrl,
                final boolean autoReport, final boolean useSandbox,
                SignType signType) throws Exception {
            this.config = config;
            this.notifyUrl = notifyUrl;
            this.autoReport = autoReport;
            this.useSandbox = useSandbox;
            this.signType = signType;
            this.wxPayRequest = new WXPayRequest(config);
        }
    /**
         * APP,统一下单,获取预支付ID
         * 
         * https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1
         * 
         * @param outTradeNo
         * @param totalFee
         *            元
         * @param notifyUrl
         * @param ipaddress
         * @return
         */
        public String getPrepayId(WXPay wxpay, String outTradeNo, String totalFee,
                String notifyUrl, String ipaddress) {
            String totalFeeFen = AmountUtils.changeY2F(totalFee);
            String prepayId = null;
            Map<String, String> data = new HashMap<String, String>();
            data.put("body", outTradeNo);
            data.put("out_trade_no", outTradeNo);
            data.put("total_fee", totalFeeFen);
            data.put("spbill_create_ip", ipaddress);
            data.put("notify_url", notifyUrl);
            data.put("trade_type", TradeTypeEnum.APP.name());
            try {
                Map<String, String> resp = wxpay.unifiedOrder(data);
                if (ReturnCodeEnum.SUCCESS.name().equals(resp.get("return_code"))) {
                    prepayId = resp.get("prepay_id");
                } else {
                    System.err.println("微信统一下单失败:");
                    System.err.println(resp);
                }
            } catch (Exception e) {
                System.err.println("微信统一下单异常!");
                e.printStackTrace();
            }
            return prepayId;
        }
    
        /**
         * 调起支付接口
         * 
         * https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_12&index=2
         * 
         * @param outTradeNo
         * @param totalFee
         *            人民币 CNY 元
         * @param notifyUrl
         * @param ipaddress
         * @return
         * @throws Exception
         */
        public Record requestWxpay(String outTradeNo, String totalFee,
                String notifyUrl, String ipaddress) throws Exception {
            Record payData = null;
            AppConfig config = AppConfig.getInstance();
            WXPay wxpay = new WXPay(config, SignType.MD5);//指定签名方式为MD5!!!!!!!!!!!!!!
            String prepayId = getPrepayId(wxpay, outTradeNo, totalFee, notifyUrl,
                    ipaddress);
            if (StringUtils.isNotBlank(prepayId)) {
                Map<String, String> params = new HashMap<String, String>();
                String appid = config.getAppID();
                params.put("appid", appid);
                params.put("noncestr", WXPayUtil.generateNonceStr());
                params.put("package", "Sign=WXPay");
                params.put("partnerid", config.getMchID());
                params.put("prepayid", prepayId);
                params.put("timestamp", config.getTimestamp());
                String sign = WXPayUtil.generateSignature(params, config.getKey(),
                        SignType.MD5);//指定签名方式为MD5!!!!!!!!!!!!!!
                params.put("sign", sign);
                payData = new Record();
                payData.set("data", params);
            }
            return payData;
        }

    展开全文
  • 根据抓包数据获得url、param、header,在charles中compose请求结果为成功,在pycharm中运行则报:“签名验证失败”。 运行结果: 转载于:https://www.cnblogs.com/qingyuu/p/10019589.html...

    根据抓包数据获得url、param、header,在charles中compose请求结果为成功,在pycharm中运行则报:“签名验证失败”。

     

    运行结果:

     

    转载于:https://www.cnblogs.com/qingyuu/p/10019589.html

    展开全文
  • 支付宝签名验证失败

    万次阅读 2016-11-18 16:23:56
    APP付款成功回调 同步签名验证 与 开发平台统一的签名验证不一样. 然后验签文档字段,与实际返回的字段不一样. 再加上 文档里面没有特别标注 待验签字符串必须按照什么格式来. 所以一直卡在这里. 今天终于...
  • APP支付 JSAPI支付 小程序支付 二次生成签名参数排序都有严格要求 ◆ 参数名ASCII码从小到大排序(字典序); ◆ 如果参数的值为空不参与签名; ◆ 参数名区分大小写; ◆ 验证调用返回或微信主动通知签名时,...
  • 微信签名验证失败(两个地方遇到) 第一个在统一下单的时候签名验证失败 去微信社区里面查了下,有些人是自己代码错的,但是我拿的微信sdk的demo代码做的改造,然后检查几遍也没看出来问题,我用的是小程序支付,...
  • 用的是uniapp的方法,一直报 支付验证签名失败 然后sign只截取前30位字符串,就能成功支付了 不明白是什么问题,希望可以帮到你
  • 关于微信APP支付,提示支付验证签名失败

    万次阅读 热门讨论 2017-04-12 11:42:50
    微信APP支付,在“统一下单”里加签没有问题,调用成功,但是在 “调起支付”后却提示 支付验证签名失败
  • 最近在做app当我对接到微信支付的app支付时,居然有那么多文档没说明白的坑,我相信很多人也会遇到所以再次记录一下帮帮有缘人吧。 首先我用的是laravel框架,然后用到了微信官方提供的sdk ...
  • <div><pre><code>public function...支付宝同步通知签名验证成功 支付宝异步通知 异常:“The signature is not match” 怎么回事?</p><p>该提问来源于开源项目:lokielse/omnipay-alipay</p></div>
  • 瞎猜猜对的1.notify 使用的是 支付宝公钥 而不是商户自己的公钥 2.notify 手机支付 使用的是 appid 对应的 支付宝公钥即开放平台的app对应的支付宝公钥 而不是mapi 对应的支付宝公钥1.2018年 支付宝只支持RSA2 2 ...
  • 可能的原因是百度地图应用填写的签名和最后打包发布的签名不一致。若在申请百度地图密钥的时候完全按照: http://lbsyun.baidu.com/index.php?title=androidsdk/guide/key 中的流程设置。 而最后打包时候选择使用...
  • 在检查了参数排序,编码解码,文件编码等问题后,发现还是签名失败,最后找出原因: 扫码付和app支付采用的支付宝公钥不一样 Pid和公钥管理里面: 开放平台密钥界面和开放平台应用界面的密钥应该一致,用作扫...
  • 记得检查 app_Key , 就是让你自己写的32位大小写外加数字的那个,这个开始我自己乱写的,后来查资料说可能会引起不能支付,这就很尴尬了。生成MD532 位,后来试了试,其实没事,但是最好这样吧,避免不必要的错误 ...
  • 支付宝回调验证签名失败

    万次阅读 2016-08-24 14:40:29
    回调接口是支持扫码支付方式的回调的,最近业务需要又需要支持移动app的支付方式,回调时却签名验证失败。在排除代码、参数、编码格式等问题后,最终确定是支付宝这两种支付方式回调使用的支付宝公钥不一样导致的...
  • <div><p>该提问来源于开源项目:befinal/node-tenpay</p></div>
  • 支付宝app支付回调签名失败

    千次阅读 2019-06-12 16:53:50
    这个问题完全是自己没仔细看sdk文档,公钥用错了,请用支付宝公钥 生成公钥和私钥,公钥复制存储在支付宝平台,即为应用公钥 ...阿里用我们的公钥验证签名 我们用阿里的公钥验证签名 over ...
  • uni 在app中支付出现验证签名失败 安卓正常 IOS出现这个问题 经过对照其他参数 排查到 IOS接收时间戳只能接收10位 最终 左边为正常参数返回 这个为问题参数返回 提示的错误信息 下面为支付的代码 // 获取商品列表...
  • 微信支付提示支付验证签名失败

    千次阅读 2017-10-19 14:23:24
    APP里集成了微信支付的SDK,按照官方代码用服务器返回给我的数据来调起支付,可是不知道为什么总是提示支付验证签名失败,网上说是参数名的大小写问题,但是这个参数名传的时候是用的SDK里的方法,那个.a静态库又...
  • 在之前记录了一下做微信公众号支付的过程,但是有些混乱,之前做的内个也不是直接接的微信官方,而是转接的别人在接的微信官方,他们赚个手续费,在这之后因为app停用了一段时间,上游公司把我们的appid给关掉了,...
  • 真的头大,直接把微信APP支付的代码给干过来了,结果签名一直提示签名失败,使用微信签名验证工具验证也是正常的,就是这个鬼东西: https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=20_1 这...
  • 失败方案一 1.需要删除的Packges文件夹也有可能在用户个人文件夹下,例如我的就是删除了C:\Users’username’\AppData\Local\Microsoft\VisualStudio下的Packges 2.C:\ProgramData\Microsoft\VisualStudio 3.管理员...
  • 微信APP支付,服务器端可以获取到prepayid,二次签名传给IOS端。提示付款验证签名失败签名算法是在官方网站那里通过验证,没问题的。一直都找不到问题出在哪。
  • 微信小程序支付踩的坑(支付验证签名失败) 最近有需求是微信小程序支付,用的是微信自带的sdk,曾做过微信APP支付,微信扫用户码支付,都是OK的,现在把做微信小程序支付流程写下来,还有在调用过程踩的坑,下面为...
  • 搜索到的工具比如(wps重签名助手)等,基本上都需要重置info.plist里面的包名,否则经常失败,但是却看到某些提供企业签名服务的服务商却可以不修改包名实现重签app,通过整理重签名步骤,大概猜想一下验证思路,整理本文章...
  • 使用apksigner.jar签名需要注意事项

    千次阅读 2018-03-27 16:32:37
    在使用apksigner.jar 对app签名的过程中遇到过频繁出现签名失败错误,查看资料知道apksigner.jar进行签名前必须对app进行对齐操作,才能进行签名操作。我对齐工具使用的是Android Apk优化工具Zip...
  • 需求: 安卓,ios端集成微信支付,PHPer(我)要提供一个接口给微信调用,(支付完成后调用),如果成功,就返回success,如果失败就返回fail, 环境说明:thinkphp 框架开发, 微信的接口说明文档:...
  • 支付宝APP支付,提示代码 ALIN10070

    千次阅读 2017-11-09 15:34:00
    ALIN10070 此代码时ALI64代码拆分后的细分代码;...代表签名验证失败等相关问题; 如果近期修改过或者续签 过签约协议,也需要更新公私钥。 转载于:https://www.cnblogs.com/chen943354/p/7809662.html...

空空如也

空空如也

1 2 3 4
收藏数 68
精华内容 27
关键字:

app签名验证失败