这篇文章就不写那些外面都有的代码,就写一个遇到的坑吧,在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
请
求方式的区别
微信
的原话