1.构造签名串
HTTP请求方法\n URL\n 请求时间戳\n 请求随机串\n 请求报文主体\n
1.1HTTP请求方法(method):
POST或是GET
1.2URL(url):
除去“https://api.mch.weixin.qq.com”部分的的网址,如果是GET方法还要包括?后的查询参数
1.3请求时间戳(timestamp):
DateTimeOffset.Now.ToLocalTime().ToUnixTimeSeconds().ToString()
1.4请求随机串(nonce):
Guid.NewGuid().ToString("N")
1.5请求报文主体(body):
GET时,"";POST时,JSON正文转为string
完整的签名主体生成的string= $"{method}\n{url}\n{timestamp}\n{nonce}\n{body}\n";
2.计算签名值
使用RSA非对称加密签名,使用商户API私钥进行SHA256计算,这里微信给的是PKCS8格式的私钥,在apiclient_key.pem中,用记事本打开这个文件,去除“-----BEGIN PRIVATE KEY-----”和“----