微信支付安全漏洞及签名错误

故事起因 漏洞详情https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=23_5

  1. 导包,如果引入com.github.wxpay最高版本0.0.3
                    <dependency>
    			<groupId>com.github.tedzhdz</groupId>
    			<artifactId>wxpay-sdk</artifactId>
    			<version>3.0.9</version>
    		</dependency>

     

  2.  0.0.3版本WXPayConfig是个接口,引入上面的包是个抽象类,注意:子类跟抽象类必须同包名

    package com.github.wxpay.sdk;
    
    import java.io.ByteArrayInputStream;
    import java.io.InputStream;
    /**
     * 该类必须与继承抽象类同包名
     * @author jxh
     *
     */
    public class MyPayConfig extends WXPayConfig{
    	private byte[] certData; 
    	//公众账号ID 
    	private String appID="wxXXXXXXXXXXXXXXX"; 
    	//商户号 
    	private String mchID = "XXXXXXXX"; 
    	//密钥 
    	private  String key = "XXXXXXXXXXXXXXXXXXXXX";
    	public MyPayConfig() {}
    	@Override 
    	String getAppID() { return appID; }
    	@Override 
    	String getMchID() { return mchID; }
    	@Override 
    	String getKey() { return key; }
    	@Override 
    	InputStream getCertStream() { 
    		ByteArrayInputStream certBis = new        ByteArrayInputStream(this.certData); 
    		return certBis; 
    	}
    
    	@Override 
    	public int getHttpConnectTimeoutMs() { 
    		return 8000; 
    	}
    	@Override 
    	public int getHttpReadTimeoutMs() { 
    		return 10000; 
    	}
    	@Override 
    	IWXPayDomain getWXPayDomain() {
    		//必须实例化,否则WxPay初始化失败
    		IWXPayDomain iwxPayDomain = new IWXPayDomain() { 
    			public void report(String domain, long elapsedTimeMillis, Exception ex) {
    
    			} 
    			public DomainInfo getDomain(WXPayConfig config) { 
    				return new IWXPayDomain.DomainInfo(WXPayConstants.DOMAIN_API, true); 
    			} 
    		}; 
    		return iwxPayDomain; 
    	}
    
    }
    

    3.签名错误

              微信沙箱环境MD5,其他默认SignType.HMACSHA256,WXPay如果isPayResultNotifySignatureValid该方法签名失败,用isResponseSignatureValid搞定

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

 引用:https://blog.csdn.net/fuck487/article/details/89403771(很好)

https://blog.csdn.net/weixin_42161659/article/details/89097665 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值