以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  微信支付V3中的SHA256-RSA的数字签名算法  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=176387)

--  作者:tianhao0817
--  发布时间:2022/4/11 14:25:00
--  微信支付V3中的SHA256-RSA的数字签名算法
请问一下有点蓝老师,论坛里有用V3版本写的例子吗?  SHA256-RSA的数字签名算法是怎么写的?
  • 遵循统一的Restful的设计风格
  • 使用JSON作为数据交互的格式,不再使用XML
  • 使用基于非对称密钥的SHA256-RSA的数字签名算法,不再使用MD5或HMAC-SHA256
  • 不再要求HTTPS客户端证书
  • 使用AES-256-GCM,对回调中的关键信息进行加密保护
接口规则中,你将了解到微信支付API v3的基础约定,如数据格式,参数兼容性,错误处理等。随后我们重点介绍了微信支付API v3新的认证机制。你可以跟随着签名指南,使用命令行或者你熟悉的编程语言,一步一步实践如何签名和验签。在最后的常见问题中,我们总结了商户接入过程中的各种常见和不常见的问题。
我们提供了API v3的Postman调试工具和某些开发语言的库。你可以通过我们的Github


[此贴子已经被作者于2022/4/11 14:25:22编辑过]

--  作者:有点蓝
--  发布时间:2022/4/11 15:02:00
--  
没有例子。微信官方提供的代码里的加密算法仅支持.net core。Foxtable没有办法使用
--  作者:hammerlucy
--  发布时间:2022/5/24 12:08:00
--  
这一块搞不定,那H5支付没办法完成了啊
--  作者:有点蓝
--  发布时间:2022/5/24 13:33:00
--  
微信支付V2现在不能使用了吗?
--  作者:有点蓝
--  发布时间:2022/5/25 12:41:00
--  
v3签名用法:

Dim ts As TimeSpan = DirectCast((DateTime.Now - New DateTime(1970, 1, 1, 8, 0, 0, 0)), TimeSpan)
Dim timestamp As Long = Convert.ToInt64(ts.TotalSeconds).ToString \'时间戳
Dim nonce_str As String = Guid.NewGuid.ToString.Replace("-", "").ToUpper \'随机数
Dim ss As String = "GET" & Chr(10) & "/v3/certificates" & Chr(10) & timestamp & Chr(10) & nonce_str & Chr(10) & Chr(10)
\'Output.Show(ss)
Dim pfxFilepath As String = "E:\\微信支付\\V3\\cert\\apiclient_cert.p12" \'证书文件地址
Dim pfxpassword As String = "1500000000" \'商户号
Dim privateCert As New Security.Cryptography.X509Certificates.X509Certificate2(pfxFilepath, pfxpassword, Security.Cryptography.X509Certificates.X509KeyStorageFlags.Exportable)
Dim privateKey As Security.Cryptography.RSACryptoServiceProvider = privateCert. PrivateKey
Dim privateKey1 As New Security.Cryptography.RSACryptoServiceProvider()
privateKey1.ImportParameters(privateKey.ExportParameters(True))
Dim data() As Byte = Encoding.UTF8.GetBytes(ss)
Dim signature() As Byte = privatekey1.SignData(data, "SHA256")
Dim sign As String = Convert.ToBase64string(signature)
\'Output.Show(sign)
Dim htc As New HttpClient("https://api.mch.weixin.qq.com/v3/certificates")
htc.ContentType = "application/json; charset=utf-8"
htc.Accept = "application/json" \'必须
htc.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36" ‘必须’
Dim s1 As String = "WECHATPAY2-SHA256-RSA2048 mchid=""" & pfxpassword & """,nonce_str=""" & nonce_str & """,signature=""" & sign & """,timestamp=""" & timestamp & """,serial_no=""这里改为自己的证书序列号"""  ‘授权验证数据
\'Output.Show(s1)
htc.Headers.Add("Authorization", s1)
Dim ret As String = htc.GetData()
Output.Show(ret)
[此贴子已经被作者于2022/7/4 16:55:53编辑过]

--  作者:qinyilin
--  发布时间:2022/5/25 14:57:00
--  
 必顶
蓝版

--  作者:hammerlucy
--  发布时间:2022/7/4 15:56:00
--  
Dim s1 As String = "WECHATPAY2-SHA256-RSA2048 mchid=""" & pfxpassword & """,n & nonce_str & """,signature=""" & sign & """,timestamp=""" & timestamp & """,serial_no=""这里改为自己的证书序列号""" ‘授权验证数据
测试时跳出错误提示,signature在局部变量中声明过

--  作者:有点蓝
--  发布时间:2022/7/4 16:03:00
--  
什么错误提示?
--  作者:tianhao0817
--  发布时间:2022/7/4 16:31:00
--  


[此贴子已经被作者于2022/12/12 14:24:09编辑过]

--  作者:有点蓝
--  发布时间:2022/7/4 16:43:00
--  
serial_no后面少了一个双引号。

至于证书怎么下载,请去看微信支付的官方开发文档,有说明的