支付寶回撥驗籤失敗解決辦法
按照支付寶的文件,呼叫rsaCheckV1的方法,他已經把方法封裝的很透徹了,只需要將取到的引數Map(request.getParameterMap())集合放入即可。
但是驗籤一直不通過,查了很多資料,說公鑰不對,應該使用支付寶公鑰,不是應用公鑰,修改之後,還是驗籤不通過。
boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, "UTF-8"); //呼叫SDK驗證簽名
問題出在支付寶有兩個過載的方法。如果使用的是RSA加密的話,就呼叫下面這個方法。
boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, "UTF-8");
如果使用的是RSA2加密的話,就呼叫下面這個方法。
boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, "UTF-8",AlipayConfig.SIGN_TYPE); //呼叫SDK驗證簽名
因為我們生成訂單的加密方法使用的是RSA2,但是後面一直使用的是不帶引數型別(驗RSA的籤)的方法(params, AlipayConfig.ALIPAY_PUBLIC_KEY, "UTF-8")驗籤,所以一直報驗籤不通過。
總結來說:
是RSA2加密的話
AlipayConfig.SIGN_TYPE = "RSA2";
回撥呼叫這個方法
boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, "UTF-8",AlipayConfig.SIGN_TYPE);
是RSA加密的話
AlipayConfig.SIGN_TYPE = "RSA";
回撥呼叫這個方法
boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, "UTF-8");