- 上传银行账号之后返回暂无数据?
在商户进件的时候需要添加联行号,在采用用户自行输入开户银行之后查询开户行联行号,提交进件之后返回“填写入的支行联行号与支行名称不匹配”,但是在网上查询测试的开户行的联行号之后确认是正确的。后面寻找问题,采用根据银行账号查询银行信息 https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/ministore/minishopopencomponent2/API/funds/bank/getbankbynum.html 返回"errcode":9710001,"errmsg":"暂无数据 rid:67d2ec1a-0b078c7a-7560adb1"查询不到银行信息,排除了银行卡号输入错误之后就不清楚是什么问题。 在测试的时候采用个人银行卡是可以进行查询的,排除了接口错误。对公银行卡还是无法实现查询。不知道这个地方应该怎么填写数据了。 [图片]
03-16 - 无可用的平台证书,请在商户平台-API安全申请使用微信支付公钥
在商户进件加密敏感信息的时候直接使用的(apiclient_cert.pem)商户证书进行加密。但是发送到微信服务器之后,返回说解密失败。后来查看相关的文章。好像是我的加密证书用错了,文章中说应该使用平台证书,需要调用https://api.mch.weixin.qq.com/v3/certificates接口进行获取。 但是在构建请求并发送后获取的返回值 "code": "RESOURCE_NOT_EXISTS", "message": "无可用的平台证书,请在商户平台-API安全申请使用微信支付公钥 现在不知道是什么请款,是应该使用什么证书进行加密。 //敏感信息加密 public static String rsaEncryptOAEP(String message) throws Exception,IOException { ResourceLoader resourceLoader = new DefaultResourceLoader(); //文件路径拼接 Resource resource = resourceLoader.getResource("file:" + getPublicKeyPath()); //加载公钥证书 try (InputStream inputStream = resource.getInputStream()) { CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); Certificate certificate = certificateFactory.generateCertificate(inputStream); // 从证书中提取公钥 PublicKey publicKey = certificate.getPublicKey(); Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, publicKey); byte[] data = message.getBytes(StandardCharsets.UTF_8); byte[] cipherdata = cipher.doFinal(data); return Base64.getEncoder().encodeToString(cipherdata); }catch (Exception e) { System.out.println(e.toString()); return null; }} 加密规则文档:https://pay.weixin.qq.com/doc/v3/partner/4013059044 相关提问链接:https://developers.weixin.qq.com/community/develop/doc/0004a08ab68a582fe720f2c9b61000?highLine=%25E8%25AF%25B7%25E6%25B1%2582%25E8%25BF%2594%25E5%259B%259E%25E5%258F%2582%25E6%2595%25B0%253A%2520%2520%257B%2522code%2522%253A%2522PARAM_ERROR%2522%252C%2522message%2522%253A%2522%25E5%25B9%25B3%25E5%258F%25B0%25E7%25A7%2581%25E9%2592%25A5%25E8%25A7%25A3%25E5%25AF%2586%25E5%25A4%25B1%25E8%25B4%25A5%2522%257D
03-04 - 图片上传接口构建签名串计算的签名无法通过签名校验 ,反而不按照文档构建的签名串计算的签名值能通过?
POST\n /v3/marketing/favor/media/image-upload\n 1739854234\n aa3ea8f02276438b90a63cfeea0d5c56\n\n 这个签名串计算出的签名值能通过签名校验 POST\n /v3/marketing/favor/media/image-upload\n 1739854337\n b08f3dcc57664f308d76615e17766826\n {"filename":"50d23bdcab1242b68f49e64d41439844.png","sha256":"cfbf7c2a60d18cb397b3ff8155abb04271aea8361feb55ec1a59d76adcdc53b9"}\n 这个按照文档中给的签名串构建计算出的签名通过不了签名校验 [图片] {"code":"SIGN_ERROR","detail":{"detail":{"issue":"sign not match"},"field":"signature","location":"authorization","sign_information":{"method":"POST","sign_message_length":89,"truncated_sign_message":"POST\n/v3/marketing/favor/media/image-upload\n1739854337\nb08f3dcc57664f308d76615e17766826\n\n","url":"/v3/marketing/favor/media/image-upload"}},"message":"错误的签名,验签失败"} //计算文件摘要 String sha256 = DigestUtils.sha256Hex(imageBytes); System.out.println("SHA-256: " + sha256); //构建签名串 String timestamp = String.valueOf(System.currentTimeMillis() / 1000); String nonceStr = UUID.randomUUID().toString().replaceAll("-", ""); Map<String, String> dataMap = new HashMap<>(); dataMap.put("filename", newFileName); dataMap.put("sha256",sha256); ObjectMapper objectMapper = new ObjectMapper(); String jsonBody = objectMapper.writeValueAsString(dataMap); System.out.println("jsonBody:"+jsonBody.toString()); //生成签名串signatureStr String signatureStr = buileSignature("POST",apiurl,timestamp,nonceStr,jsonBody); // String signatureStr = buileSignature("POST",apiurl,timestamp,nonceStr); System.out.println("signatureStr:"+signatureStr); //计算签名值 String sign = createSign(signatureStr); System.out.println("sign:"+sign); //构造Authorization String authorization = String.format("WECHATPAY2-SHA256-RSA2048 mchid=\"%s\",nonce_str=\"%s\",timestamp=\"%s\",serial_no=\"%s\",signature=\"%s\"", mchId, nonceStr, timestamp, certSerialNo, // 证书序列号 sign);
02-18