一、按微信官方的c#部分demo的代码,付款或退款时签名失败,总结了一下,大致以下几种可能。
1.参数没有按官方的接口传输。
2.参数正常,但转换成xml传输时,字符串放到CDATA内,没有放到XML节点中,实际上字符串放到CDATA和XML节点中都是可行的。官方的demo是放到CDATA中,而官方文档是放到XML节点中。所以严格来说,这个不算是坑。
3.按官方demo的代码,在生成签名时makeSign方法,用的是x2,注意x是小写,导致转换出的签名是小写的,实际上是用大写的X,转换出的签名才是大写的,这是一个巨坑。
4.使用了cert证书来发起https请求,但请求总是失败,可能是iis站点的应用程序池使用的是ApplicationPoolIdentity,导致读取cert证书时出错,在应用程序池上右键->高级设置->标识中切抱为LocalSystem.
5.cert的证书没有安装,直接双击从微信公众号后台下载的证书安装即可,安装时建议选择【本地计算机】,而不是【当前用户】。证书密码默认是商户号。
6.参数中传的ip是服务器的ip,