关于c# 接入支付宝功能

missukiss02 2017-01-05 02:45:51
服务器用c#写的,现在需要接入支付宝的app。
第一步需要签名的地方就走不下去了。看了支付宝的说明文档,也下载的支付宝的SDK,调试其中的sdk,

public static void EncryptAndSign()
{
// 参数构建
string bizContent = "<XML><ToUserId><![CDATA[2088521522040445]]></ToUserId><AppId><![CDATA[2016123104761654]]></AppId><AgreementId><![CDATA[20131111000001895078]]></AgreementId>"
+ "<CreateTime>12334349884</CreateTime>"
+ "<MsgType><![CDATA[image-text]]></MsgType>"
+ "<ArticleCount>1</ArticleCount>"
+ "<Articles>"
+ "<Item>"
+ "<Title><![CDATA[[回复测试加密解密]]></Title>"
+ "<Desc><![CDATA[测试加密解密]]></Desc>"
+ "<Url><![CDATA[http://m.taobao.com]]></Url>"
+ "<ActionName><![CDATA[立即前往]]></ActionName>"
+ "</Item>"
+ "</Articles>" + "<Push><![CDATA[false]]></Push>" + "</XML>";
string publicKeyPem = GetCurrentPath() + "public.pem";
string privateKeyPem = GetCurrentPath() + "private.pem";
string responseContent = AlipaySignature.encryptAndSign(bizContent, publicKeyPem, privateKeyPem,"UTF-8",true,true);
System.Console.Write("resultContent=" + responseContent + "\n\r");
}

这个应该是加密解密的签名方法,我的目的是需要拿到sign(不知道有是不是这个地方)。
然后代码的appid,ToUserId,其他没变。
只有公钥,私钥。我下载的是支付宝的:RSA签名验签工具windows_V1.3,这个工具帮我生产的public key和private key。放到指定的目录下
问题:
调用 EncryptAndSign() 这个方法 ,会直接报错:
异常详细信息: System.ComponentModel.Win32Exception: 数据无效。
我看了一下这个公钥和私钥,都是一串很长的字符串,不知道具体哪里有问题。是不是key的格式有要求?
...全文
1319 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_31277841 2017-04-18
  • 打赏
  • 举报
回复
密钥生成工具默认是生成PKCS8格式的密钥,.Net 的SDK要用非JAVA生成的方式
mr_zzt 2017-02-14
  • 打赏
  • 举报
回复
支付接口个人可以申请么?
qq_28763367 2017-02-06
  • 打赏
  • 举报
回复
现在的文档和demo根本对不上,你说的坑我全踩了.......加下我的qq我想问下验签的细节。还在这折腾呢!281415732
missukiss02 2017-01-10
  • 打赏
  • 举报
回复
搞了几天,还是得自己研究搞定。 贴下支付宝客服的回复: 您好: 结果都是对的,但是你的理解错了. 自己用私钥生成的签名的,就应该用自己的公钥来进行验签,而不是支付宝公钥, 而且支付宝提供的这个验签工具仅仅是用来验签异步通知的,换上了应用公钥应该也是验不过的, 因为验异步通知和正常的验签是有区别的.主要是验证异步通知时会自动去除sign_type参数. 而正常的验签是对所用的待验签字符串进行验签. 谢谢支持. 熊勇 2017-01-03 09:47:44 看完我一万个草泥马,既然这个工具不能直接验签通过的话,你放这个功能出来搞事吗?不折腾开发者? 正题,下面说我的解决办法: 1.公钥KEY的问题。其实支付宝的官方文档并没有说清楚,而且我发现他们还说错了。教程是说应用私钥进行签名,支付宝公钥进行验签。我出现这个问题的时候也是一直百度,大家都说支付宝的公钥进行验签,所以我也没多怀疑。但是试了很多种方式都不行,最后试一下应用的公钥吧(也是基于支付宝客服的回答,看上面)。但是换了还是报错,最后想想,私有key的时候,是需要加:-----BEGIN RSA PRIVATE KEY-----,那我也加在应用公钥试试咯,果然就验签成功了。 分享我的解决方案。希望大家多试试,少走弯路。我也不清楚为什么网上的人说用支付宝的公钥能验签,或者我有些地方设置错了吧?反正现在就能验签成功。
missukiss02 2017-01-09
  • 打赏
  • 举报
回复
yzf86211861 2017-01-06
  • 打赏
  • 举报
回复
咨询下 接口支持。
missukiss02 2017-01-06
  • 打赏
  • 举报
回复
这么少人的这个论坛。
打中单的ADC 2017-01-06
  • 打赏
  • 举报
回复
最近也要在个支付功能 但我毫无头绪 ╮(╯▽╰)╭
missukiss02 2017-01-05
  • 打赏
  • 举报
回复
请问应该要怎么写?我都是按照他的原版例子来的,没改动它里面的东西,就只换了个私钥和公钥
Justin-Liu 2017-01-05
  • 打赏
  • 举报
回复
数据无效应该是你请求的数据格式不正确什么的

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧