首页新闻找找看学习计划

asp.net C# 支付宝支付接口 SHA256WithRSA 签名错误

0
悬赏园豆:100 [待解决问题]
@functions{
    public static string Alipay(string method, string gateway, string notifyUrl, string returnUrl, string paysn, string subject, decimal PaySUM)
    {
        var AlipayAppId = razor.AlipayAppId();
        var AlipayPrivateKey = razor.AlipayPrivateKey();

        var order = new { out_trade_no = paysn, product_code = "FAST_INSTANT_TRADE_PAY", subject = subject, total_amount = PaySUM };

        IDictionary<string, string> data = new SortedDictionary<string, string>();
        data.Add("app_id", AlipayAppId.ToString());
        data.Add("charset", "utf-8");
        data.Add("format", "JSON");
        data.Add("method", method);
        data.Add("notify_url", notifyUrl);
        data.Add("return_url", returnUrl);
        data.Add("sign_type", "RSA2");
        data.Add("sign", "");
        data.Add("timestamp", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
        data.Add("version", "1.0");
        data.Add("biz_content", Json.Encode(order));
        
        //筛选
        data.Remove("sign");
        //拼接
        var dataString = string.Join("&", data.Select(pattern => pattern.Key + "=" + pattern.Value));
        //签名
        var sign = razor.RsaSign(dataString, AlipayPrivateKey.ToString());
        data.Add("sign",sign);
        //拼接
        dataString = string.Join("&", data.Select(pattern => pattern.Key + "=" + HttpUtility.UrlEncode(pattern.Value)));

        var url = gateway + "?" + dataString;
   
        return url;
    }
}
复制代码
@functions{
    public static string RsaSign(string data, string privatekey)
    {
        CspParameters CspParameters = new CspParameters();
        RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(2048, CspParameters);
        byte[] bytes = Encoding.UTF8.GetBytes(data);
        privatekey = RSA.ToXmlString(true);
        RSA.FromXmlString(privatekey);
        byte[] sign = RSA.SignData(bytes, "SHA256");

        return Convert.ToBase64String(sign);
    }
}
复制代码
问题补充:
调试错误,请回到请求来源地,重新发起请求。
错误代码 invalid-signature 错误原因: 验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配,网关生成的验签字符串为:app_id=2016091400508139&amp;biz_content={&quot;out_trade_no&quot;:&quot;20180606012665123456&quot;,&quot;product_code&quot;:&quot;FAST_INSTANT_TRADE_PAY&quot;,&quot;subject&quot;:&quot;达人设计购物&quot;,&quot;total_amount&quot;:5.20}&amp;charset=utf-8&amp;format=JSON&amp;method=alipay.trade.page.pay&amp;notify_url=http://www.mastersws.com/Account/payAlipay&amp;return_url=http://www.mastersws.com/Account/payAlipay/buy&amp;sign_type=RSA2&amp;timestamp=2018-06-12 16:35:44&amp;version=1.0
我用支付宝的demo测试是正确的,所以感觉应该是签名哪里不对,那个demo太繁琐了,所以想自己写一个简洁的。
缘分0919的主页 缘分0919 | 初学一级 | 园豆:128
提问于:2018-06-12 16:57
< >
分享
所有回答(3)
0

分别使用demo和你自己的代码RsaSign计算,看结果是否一致

另外,我记得RSA签名有好几种参数的,你上面用了默认的参数,并不一定和服务器的一样

诶碧司 | 园豆:1912 (小虾三级) | 2018-06-16 17:10
0

解决了吗?目前我也遇到该问题,还想问下你验签怎么演

博学君 | 园豆:202 (菜鸟二级) | 2019-01-10 17:51
0

怎么解决的,我也遇到了这个问题,头痛

草下飞 | 园豆:212 (菜鸟二级) | 2019-07-23 01:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册