- 付款至银行卡报签名失败?
签名方式和微信支付(公众号,H5)用一样的封装好的方法,微信支付已经完成功能。 请求入参打印: [图片] 请求未转码回参打印: [图片] 签名方式一模一样,就是参数名和值不一样,其他都一样。难道是key不一样吗,可是我刚看了两个文档的签名文档,都是一样的。
2021-08-17 - 微信提供接口获取到的rsa公钥文件pem转成PublicKey的时候报IO异常?
公钥获取接口: https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay_yhk.php?chapter=24_7&index=4 我的做法是用postman固定随机值(和文档示例给的随机值一样32位)后请求这个接口,获得了公钥,然后存到txt,后缀改为pem。公钥如下: [图片] 然后用工具类获取了InputStream(公钥pem文件)的字符串,并且打印正常,测试环境正常,生成环境也正常。 接下来要将公钥转为PublicKey类型,有两种方法,两种方法都报了不一样的异常。 1传入参数为公钥字符串(已打印确定就是接口获取到的公钥) public static PublicKey getPublicKey(String key) throws Exception { byte[] keyBytes; keyBytes = (new BASE64Decoder()).decodeBuffer(key); X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PublicKey publicKey = keyFactory.generatePublic(keySpec);-----------------------------本行是报异常的具体位置 return publicKey; } 异常: java.security.InvalidKeyException: IOException : Short read of DER length 2传入参数为InputStream public static PublicKey getPublicKey(InputStream inputStream, String keyAlgorithm) throws Exception { try { System.out.println("b1........."); BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); System.out.println("b2........."); StringBuilder sb = new StringBuilder(); String readLine = null; System.out.println("b3........."); while ((readLine = br.readLine()) != null) { if (readLine.charAt(0) == '-') { continue; } else { sb.append(readLine); sb.append('\r'); } } System.out.println("b4........."); X509EncodedKeySpec pubX509 = new X509EncodedKeySpec(decodeBase64(sb.toString())); System.out.println("b5........."); KeyFactory keyFactory = KeyFactory.getInstance(keyAlgorithm); System.out.println("b6........."); //下行出错 java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException: DerInputStream.getLength(): lengthTag=127, too big. PublicKey publicKey = keyFactory.generatePublic(pubX509);-----------------------------本行是报异常的具体位置 System.out.println("b7........."); return publicKey; } catch (Exception e) { e.printStackTrace(); System.out.println("b8........."); throw new Exception("1这里报异常了:"+e.getMessage(), e); } finally { try { if (inputStream != null) { inputStream.close(); } } catch (IOException e) { inputStream = null; throw new Exception("INPUT STREAM CLOSE ERROR:", e); } } 异常: java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException: algid parse error, not a sequence 我正在做的是企业转账到银行卡功能,请问我这个步骤正确吗?如果正确,那这异常什么原因,要如何解决?
2021-08-13 - 用postman获取RSA公钥接口时没有响应
文档链接:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay_yhk.php?chapter=24_7&index=4 [图片] 签名是固定随机值后的正确签名。
2021-08-10 - 统一下单接口PARAM_ERROR
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1 统一下单接口平台:H5 原本调用H5支付已经成功并且已处理查单的业务逻辑。后来加需求需要JSAPI支付,于是在这个基础上,做了判断,如果是微信打开便获取open_id(包括需要的公众号数据之类,都已经处理了也获取到了open_id)。当我访问微信下单接口时,打印的入参及出参如图1所示。 另外附上获取open_id的url以及回参,图2 [图片][图片]。
2021-06-28 - 网页授权获取code失败
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 第一步:用户同意授权,获取code 根据文档拼接好url后访问,跳转回redirect_uri没有携带code参数。但是抓包工具抓到一个接口:http我的域名/?code=0515Nvll2cbJg74a94nl2fTtIQ15NvlN&state= 似乎code一直都能获取到,但在跳转回页面后并没有携带code。 有必要说下,昨天之前一直都可以获取到code,web端人员说没变逻辑。
2021-06-23 - 网页授权请求时,根本没要求入参要mch_id。为啥会报mch_id参数格式错误
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 直接看下面这个api 第二步:通过code换取网页授权access_token 报错信息: {return_msg=mch_id参数格式错误, return_code=FAIL} 下面是源码: p.s.刚开始用GET请求,结果报错要求要POST 另外这个代码是专门拿出来测试用的,code用了常量,仅为测试为何会报mch_id参数格式错误。maps便是上面的报错内容。 String url = MyWXPayConfig.getQueryOrderUrl()+"?appid="+wxPayAppConfig.getJsapiAppID()+"&secret="+wxPayAppConfig.getAppSecret()+"&code=0515Nvll2cbJg74a94nl2fTtIQ15NvlN&grant_type=authorization_code"; String result; Map<String,String> mapJson = new HashMap<>(); mapJson.put("appid",wxPayAppConfig.getJsapiAppID()); mapJson.put("secret",wxPayAppConfig.getAppSecret()); mapJson.put("code","0515Nvll2cbJg74a94nl2fTtIQ15NvlN"); mapJson.put("grant_type","grant_type"); String json = ""; try { json = WXPayUtils.mapToXml(mapJson); } catch (Exception e) { e.printStackTrace(); baseEntity.setStatus(2); baseEntity.setMessage("获取open_id请求入参转码时异常"); return baseEntity; } try { result = HttpClient.sendPostDataByJson(url,json); } catch (IOException e) { e.printStackTrace(); baseEntity.setStatus(2); baseEntity.setMessage("获取open_id请求时异常:异常原因:"+e.getMessage()); return baseEntity; } Map maps ; try { maps = WXPayUtils.xmlToMap(result);; }catch (Exception e){ e.printStackTrace(); baseEntity.setStatus(2); baseEntity.setMessage("获取open_id请求时异常:异常原因:"+e.getMessage()); return baseEntity; }
2021-06-22