你好,你的商户号是平台证书方案,默认会用平台证书给你返回签名,如果你只配置了公钥来验签就会报上述错误。请在商户平台开启公钥切换,之后回调场景按日增大使用公钥的比例,应答场景根据你调接口时请求头的wechatpay-serial是否传公钥ID,来给你返回公钥或者平台证书的签名。 如何从平台证书切换成微信支付公钥请参考https://pay.weixin.qq.com/doc/v3/merchant/4012154180
微信支付使用公钥问题Cannot found the serial(`304EE7F45782C574B41F3F19A2AE47927F9330FD`)'s configuration, which's from the response(header:Wechatpay-Serial), your's PUB_KEY_ID_0117177801652025070200211653000200. 使用的是公钥,为什么会显示证书验证错误?这个证书号显示的是平台证书号,而不是apiv3证书号 难道我应该配置平台证书吗?(命名微信支付后台显示二者取其一)
07-07API证书申请指引:https://kf.qq.com/faq/161222NneAJf161222U7fARv.html v2接口中只有部分出资金的接口需要用API证书,比如退款、下载资金账单。不涉及平台证书。只用v2接口可以不用管平台证书的过期问题。
微信支付V2, 商户API证书和平台证书即将到期,是否均需要更新?2020年接入的微信支付V2, 如今差不多五年了, 商户API证书和平台证书即将到期, 是否这两个证书都需要进行更新? 如何进行?
07-04这个商户号目前没有平台证书,所以下载报错。微信支付公钥和平台证书都是用于v3版本接口的验签及敏感信息加密,公钥没有有效期,便于维护,建议使用公钥方案:https://pay.weixin.qq.com/doc/v3/merchant/4012153196
获取的平台证书拿不到?", Host: api.mch.weixin.qq.com, Connection: Keep-Alive, User-Agent: WechatPay-Apache-HttpClient/null (Mac OS X/10.14.6) Java/1.8.0_333, Accept-Encoding: gzip,deflate]] download failed,resp code=404,body={"code":"RESOURCE_NOT_EXISTS","message":"无可用的平台证书,请在商户平台-API安全申请使用微信支付公钥。可查看指引https://pay.weixin.qq.com/doc/v3/merchant/4012153196"} java.io.IOException: request failed
07-04可以重新提交下APIv2密钥、API证书等信息,如果有疑问可以在云开发页面联系下技术支持
在小程序接入微信支付时遇到了支付验签失败问题,如何排查问题所在?看微信支付相关API有V2 V3版本,我使用的是微信小程序云开发SDK,属于哪个版本的API? 如何排查签名问题?
07-04平台证书只能通过接口获取,如果没有实现接口调用,也可以使用我们的平台证书下载工具。https://pay.weixin.qq.com/doc/v3/partner/4012715700
微信支付?平台证书 怎么拿,要实现定期 向代理商已经发起提现申请的商户, 定时支付
07-03https://docs.qq.com/sheet/DV3B0ZURVcVBKU09a?tab=BB08J2&_t=1743651336138&nlc=1&u=0e8d9cc564da4b6fa9ff6fe2e5d6f72f 证书、密钥的使用场景请参考这里
哪一个是微信支付的微信支付证书和微信支付证书密钥?[图片]
07-02字段有误,请参考加密文档https://pay.weixin.qq.com/doc/v3/merchant/4013053257
微信支付 商家转帐微信支付 商家转帐 请确认待处理的消息是否为加密后的密文?生成的head: Authorization:WECHATPAY2-SHA256-RSA2048 mchid="171***12",nonce_str="9d2640bee3dc439e877cbe0181e0b569",signature="jFKNe+YM/UmNkwRpXnodrJuqbHZl74DKPhUgkRuowSitPH6k91SVkWP4YeQ8PP9kfzgzLFlbOn8K0XQ2AQIqzsvGVDAvneTuqg/oAuXdUSFyvNLzRlyftoqILFx0lwSEhWWST62RUS7OK+y8CXdJ7OdnKsol66UgrvKEArZ+u9l/Nk7sz5ti1cmpMYiEHsr55Iri7yw3JnA8esy1CM2eHmG3XaYduVDHQMeHwALJb+gVyNK6ZjT/6dKgY08YYMnlooKbK22qfQ4w2pJw5aI+LfTkLDjyHUI7jxL2Z4HD/CuYgK/rWEE3s6hO3s4oW2k9np8cweSkdWqdH9P9Gq8SFg==",timestamp="1751437716",serial_no="5D1E3AA427034E38F36A7D75B81F4EDE420E65B9";Wechatpay-Serial:5D1E3AA***5B9;Accept:application/json;User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;);Content-Type:application/json; 调试过过程中,httpWebResponse = (HttpWebResponse)httpRequest.GetResponse(); 返回 :微信支付 商家转帐 请确认待处理的消息是否为加密后的密文 responseText = {"code":"PARAM_ERROR","message":"请确认待处理的消息是否为加密后的密文"} 请问哪里需要 加密。aasp.net4.5 使用什么方法 进行加密? 代码参考:https://developers.weixin.qq.com/community/develop/article/doc/00082cf0934a106b420a678d45b013 { string requestBody =" {\"appid\":\"wx48e923d9886gh\",\"out_bill_no\":\"preub15\",\"transfer_scene_id\":\"1000\",\"transfer_remark\":\"0\",\"openid\":\"oyQFh*******jBsdiwys6jt6tu4\",\"transfer_amount\":\"120\",\"total_num\":\"1\",\"user_name\":\"**堂\",\"user_recv_perception\":\"现金奖励\",\"transfer_scene_report_infos\":[{\"info_type\":\"佣金报酬\",\"info_content\":\"佣金提现报酬\"}]}"; string physicalApplicationPath = HttpContext.Current.Request.PhysicalApplicationPath; string pemPath = physicalApplicationPath + "config/apiclient_key.pem"; var pemContent = File.ReadAllText(pemPath) .Replace("-----BEGIN PRIVATE KEY-----", "") .Replace("-----END PRIVATE KEY-----", "") .Replace("\n", ""); string method = "POST"; string timestamp = Convert.ToInt64((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds).ToString(); string nonce = Guid.NewGuid().ToString("N"); string url = "/v3/fund-app/mch-transfer/transfer-bills"; string message = $"{method}\n{url}\n{timestamp}\n{nonce}\n{requestBody}\n"; string signature = Sign( message, pemContent); string CertSerialNo = "5D1E3AA**********81F0E65B9"; string token = $"WECHATPAY2-SHA256-RSA2048 " + $"mchid=\"{this.mchid}\"," + $"nonce_str=\"{nonce}\"," + $"signature=\"{signature}\"," + $"timestamp=\"{timestamp}\"," + $"serial_no=\"{CertSerialNo}\""; string Gateway = "https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/transfer-bills"; // 3. 发送请求 HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(Gateway); httpRequest.Method = "POST"; httpRequest.Headers.Add("Authorization", token); httpRequest.Headers.Add("Wechatpay-Serial", CertSerialNo); httpRequest.Accept = "application/json"; httpRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"; httpRequest.ContentType = "application/json"; HttpWebResponse httpWebResponse = null; // 写入请求体 Stream stream = null; byte[] data = Encoding.UTF8.GetBytes(requestBody); stream = httpRequest.GetRequestStream(); stream.Write(data, 0, data.Length); stream.Close(); // 4. 获取响应 httpWebResponse = (HttpWebResponse)httpRequest.GetResponse(); StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.UTF8); string text = streamReader.ReadToEnd().Trim(); streamReader.Close(); } protected string Sign(string message, string privateKey) { // SHA256withRSA //根据需要加签时的哈希算法转化成对应的hash字符节 //byte[] bt = Encoding.GetEncoding("utf-8").GetBytes(str); byte[] bt =Encoding.UTF8.GetBytes(message); var sha256 = new SHA256CryptoServiceProvider(); byte[] rgbHash = sha256.ComputeHash(bt); RSACryptoServiceProvider key = new RSACryptoServiceProvider(); var _privateKey = RSAKeyConvert.RSAPrivateKeyJava2DotNet(privateKey); key.FromXmlString(_privateKey); RSAPKCS1SignatureFormatter formatter = new RSAPKCS1SignatureFormatter(key); formatter.SetHashAlgorithm("SHA256");//此处是你需要加签的hash算法,需要和上边你计算的hash值的算法一致,不然会报错。 byte[] inArray = formatter.CreateSignature(rgbHash); return Convert.ToBase64String(inArray); } protected string RSAPrivateKeyJava2DotNet(string privateKey) { RsaPrivateCrtKeyParameters privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(privateKey)); return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent><P>{2}</P><Q>{3}</Q><DP>{4}</DP><DQ>{5}</DQ><InverseQ>{6}</InverseQ><D>{7}</D></RSAKeyValue>", Convert.ToBase64String(privateKeyParam.Modulus.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.PublicExponent.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.P.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.Q.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.DP.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.DQ.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.QInv.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.Exponent.ToByteArrayUnsigned())); }
07-02平台证书只能通过接口获取,暂未实现接口调用的话也可以用我们SDK,或者我们的证书下载工具。工具是在github,如果访问不到可以换时间多试几次 下载平台证书 https://pay.weixin.qq.com/doc/v3/partner/4012715700 证书下载工具 https://github.com/wechatpay-apiv3/CertificateDownloader
微信支付平台证书的网页,连接 不上为什么微信支付平台的下载平台证书的网页,现在连接 不上呢?证书下载工具的链接,也是打开 失败,是什么原因
07-02你好,这个商户号因为在平台证书过期之前就申请过微信支付公钥,但一直没完成公钥的切换。为了避免你接口调用受影响,所以临时也允许你用过期的平台证书。现在线上给你返回应答时,wechatpay-serial值还是平台证书的。请参考这里的指引,开始切换公钥就可以了https://pay.weixin.qq.com/doc/v3/merchant/4012154180 如果没有开启公钥切换的入口可以联系我来给你提供
使用RSAPublicKeyConfig Wechatpay-Serial应答不是公钥?RSAPublicKeyConfig config = new RSAPublicKeyConfig.Builder() .merchantId(ehisPayInfo.getMerchantId()) .publicKey(ehisPayInfo.getPublicKey()) .publicKeyId(ehisPayInfo.getPublicKeyId()) .privateKey(ehisPayInfo.getPrivateKey()) .merchantSerialNumber(ehisPayInfo.getMchSerialNo()) .apiV3Key(ehisPayInfo.getApiV3Key()) .build(); // 构建service JsapiService service = new JsapiService.Builder().config(config).build(); PrepayResponse response = service.prepay(request); [图片]
07-02可能因为近期没调v3版本接口,所以暂时没有自动生成新平台证书。如果不使用平台证书可以平台证书的过期问题,只处理API证书即可。API证书申请指引:https://kf.qq.com/faq/161222NneAJf161222U7fARv.html 如果有其他疑问请到在线技术支持咨询我们https://support.pay.weixin.qq.com/aidevhelper
还差两个月,微信支付的平台证书就要过期了。为什么还看不到灰度的按钮还差两个月,微信支付的平台证书就要过期了。为什么还看不到灰度的按钮。之前有个另外的号,是自动给我开启了新旧证书
07-01