for (int i = 0; i < form.Count; i++)
{
if (form.GetKey(i) == "sign")
{
dictionary.Add(form.GetKey(i), form[i]);
continue;
}
dictionary.Add(form.GetKey(i), HttpUtility.UrlDecode(form[i]));
alipay_params += form.GetKey(i) + "=" + form[i] + "&";
}
string publicKey = Server.MapPath("~/rsa_alipay_public_key.pem");//你的支付宝公钥文件路径
bool checkSign = AlipaySignature.RSACheckV2(dictionary, publicKey, 1);
if (!checkSign)
{
return Content("签名验证错误");
}
return Content("success");
注意!我对支付宝AopSdk中的一个函数做了一个小调整,你需要找到这个函数并把它修改一下。
找到这个函数
public static bool RSACheckV2(IDictionary<string, string> parameters, string publicKeyPem)
(Util文件夹下的AlipaySignature.cs文件里)↓
然后改成这样↓
public static bool RSACheckV2(IDictionary<string, string> parameters, string publicKeyPem,int RSA)
{
string sign = parameters["sign"];
parameters.Remove("sign");
parameters.Remove("sign_type");
string signContent = GetSignContent(parameters);
return RSACheckContent(signContent, sign, publicKeyPem, DEFAULT_CHARSET, RSA==1?"RSA":"RSA2");
}
如果你使用的是MVC上面的代码是可以直接使用的。
如果你用的是Webform
将return Content改成Response.Write就可以啦