微信支付v3
新需求为了在网页上进行Native支付,在开发过程中走了很多弯路,网上的代码很多运行无法正常加解密,经过几天的读文档,百度,终于调通.
微信文档详见微信支付开发文档
签名
HTTP请求方法\n URL\n 请求时间戳\n 请求随机串\n 请求报文主体\n
对上述串进行SHA256 WITH RSA加密得到signature再填充到HTTP头中
‘Authorization: WECHATPAY2-SHA256-RSA2048
mchid=“1900009191”,nonce_str=“593BEC0C930BF1AFEB40B4A08C8FB242”,signature=“uOVRnA4qG/MNnYzdQxJanN+zU+lTgIcnU9BxGw5dKjK+VdEUz2FeIoC+D5sB/LN+nGzX3hfZg6r5wT1pl2ZobmIc6p0ldN7J6yDgUzbX8Uk3sD4a4eZVPTBvqNDoUqcYMlZ9uuDdCvNv4TM3c1WzsXUrExwVkI1XO5jCNbgDJ25nkT/c1gIFvqoogl7MdSFGc4W4xZsqCItnqbypR3RuGIlR9h9vlRsy7zJR9PBI83X8alLDIfR1ukt1P7tMnmogZ0cuDY8cZsd8ZlCgLadmvej58SLsIkVxFJ8XyUgx9FmutKSYTmYtWBZ0+tNvfGmbXU7cob8H/4nLBiCwIUFluw==”,timestamp=“1554208460”,serial_no=“1DDE55AD98ED71D6EDD4A4A16996DE7B47773A8C”’
/// <summary>
/// 签名
/// </summary>
/// <param name="filePath">证书地址</param>
/// <param name="body">请求的报文内容 若为Get则为空</param>
/// <param name="method">请求方法</param>
/// <param name="url">链接 绝对路径</param>
/// <returns></returns>
public string CreateSign(string filePath,string body,string method,string url) {
//0时间戳 1随机串 2报文主题
string seconds = (DateTime.Now - DateTime.Parse("1970-01-01 08:00:00")).TotalSeconds.ToString().Split('.')[0];
string randoms = new Random().Next().ToString("X")+ new Random().Next().ToString("X");
string s = string.Format("{0}\n{1}\n{2}\n{3}\n{4}\n", method, url, seconds, randoms, body);
s = Encryption.SHA256WithRSA(filePath, WeChatKey.mch_id,s);
string sign =