相关文章推荐
欢快的夕阳  ·  Beautifulsoup 爬蟲 ...·  5 月前    · 
时尚的海豚  ·  Python字典 ...·  7 月前    · 
深沉的电脑桌  ·  Python ...·  1 年前    · 
从容的米饭  ·  与虚拟机共享蓝牙设备·  1 年前    · 

这篇文章就不写那些外面都有的代码,就写一个遇到的坑吧,在httpclient请求商家转账到零钱的api时,微信总是返回 商户证书序列号有误。请使用签名私钥匹配的证书序列号 ,在网上找了各种帖子也没找到方法,然后在自己实践中发现,原来是微信生成的生成的序列号和证书序列号都是需要传进去的,这里就上一个httpclient的代码,其他的代码其他博客都有,我就不搬运了

* 发起批量转账API 批量转账到零钱 * @param requestUrl * @param requestJson 组合参数 * @param wechatPayserialNo 商户证书序列号 * @param mchID4M 商户号 * @param privatekeypath 商户私钥证书路径 * @return public static String postTransBatRequest( String requestUrl, String requestJson, String wechatPayserialNo, //这里是wx的jar包生成的序列号 certificate.getSerialNumber().toString(16).toUpperCase(); String wechatPayserialNo2, //这里是商户证书的序列号 String mchID4M, String privatekeypath) { CloseableHttpClient httpclient = HttpClients.createDefault(); CloseableHttpResponse response = null; HttpEntity entity = null; try { //商户私钥证书 HttpPost httpPost = new HttpPost(requestUrl); // NOTE: 建议指定charset=utf-8。低于4.4.6版本的HttpCore,不能正确的设置字符集,可能导致签名错误 httpPost.addHeader("Content-Type", "application/json"); httpPost.addHeader("Accept", "application/json"); //"55E551E614BAA5A3EA38AE03849A76D8C7DA735A"); httpPost.addHeader("Wechatpay-Serial", wechatPayserialNo); //-------------------------核心认证 start----------------------------------------------------------------- String strToken = VechatPayV3Util.getToken("POST", "/v3/transfer/batches", requestJson,mchID4M,wechatPayserialNo2, privatekeypath); log.error("微信转账token "+strToken); // 添加认证信息 httpPost.addHeader("Authorization", "WECHATPAY2-SHA256-RSA2048" + " " + strToken); //---------------------------核心认证 end--------------------------------------------------------------- httpPost.setEntity(new StringEntity(requestJson, "UTF-8")); //发起转账请求 response = httpclient.execute(httpPost); entity = response.getEntity();//获取返回的数据 log.info("-----getHeaders.Request-ID:"+response.getHeaders("Request-ID")); return EntityUtils.toString(entity,"UTF-8"); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭流 return null; - 商家 证书 序列号 : 用途:通过api (https://wechatpay-api.gitbook.io/wechatpay-api-v3/jie-kou-wen-dang/ping-tai-zheng-shu) 获取 微信 平台 证书 wechatpay_public.pem 获取途径:在 微信 商家后台 - api 安全, - 微信 平台 证书 序列号 : 用途:提交商家申 api所需 获取途径: op... 最近在做一个涉及支付的项目,其中对支付模块的内容涉及的比较多,记录一点心得。如果有错误,希望各位大佬斧正。 这个支付项目涉及H5端的 微信 支付、支付宝支付、建行支付、会员卡充值(现金)等四部分内容。我将在下面的几篇文章里分别介绍。 这篇文章我们先介绍 微信 支付。 微信 支付现在已经是V3版本了,和之前的V2版本有很大的区别。我之前也做过V2版本的小程序支付。涉及到一些xml、 签名 等比较麻烦。V3版本感觉简化了很多。 关于测试环境 微信 支付和支付宝相比,文档和测试环境都很差,排查错误很难。至于V3版本,我 我这里 使用 的是 微信 支付 v3 sdk,sdk会帮我拼接 签名 ,所以我初步判断是公司给我 证书 序列号 错误 // 加载平台 证书 (mchId: 商户 号,mchSerialNo: 商户 证书 序列号 ,apiV3Key:V3密钥) AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier( new WechatPay2Credentials 为了帮助 商户 开发 者快速便捷的上手V3支付的接口参数设置格式,同时验证各个参数的可用性和正确性, 微信 支付发布了一个预支付的脚本,并将脚本部署到 Postman 云工作台。只需要将集合fork 到自己的工作台,就可以在 Postman 上轻松地构造并发送 微信 支付 APIv3 求了。但是这个脚本只支持普通 商户 ,不支持服务商,如果要进行服务商接口参数的验证,需要对脚本进行修改.将在另外一篇文章《如何用postman验证 微信 支付V3普通 商户 的接口参数》中介绍前置条件。 ||–查看的码友,在不麻烦的情况,如果文章有用,烦 点个赞.如果没用可以留言讨论哦–|| 特约 商户 进件 提交申 单API 提示 证书 错误 最终排查弄清楚 原来 证书 使用 应该是: 签名 使用 证书 : Authorization中的加密 使用 证书 应该为 平台下载到本地的 证书 serial_no 与 加密 使用 的公匙 证书 . 敏感信息 使用 证书 : 通过 证书 接口获取最新的 证书 接口文档:https://wechatpay-api.gitbook.io/wechatpay-api-v3/jie-kou-wen-dang/ 还需要通过其中的associated_data、nonce、ciphertext参数 和 APIv3秘钥,解密出平台 证书 ,调用 微信 支付时, 使用 的 wechatPayCertificates 参数为。如题,“找不到 证书 序列号 对应的 证书 ”,是因为在 使用 。另外官方建议定期去更新平台 证书 ,见。“平台 证书 ”需要调用 ““ 进行获取,可以 使用 微信 官方提供的。 首先给上收付通 开发 文档的地址https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/ecommerce.shtml 其次是WechatPay-API-v3相关的文档地址https://wechatpay-api.gitbook.io/wechatpay-api-v3/ 和原先xml 求方式的区别 微信 的原话