在调用支付宝支付时出现以下错误:

这里写图片描述

在参考了官方给出的排错文档之后(RSA2私钥填写错误报错集合),依旧没有找出问题所在。

最后通过一步步断点调试发现,原来在项目配置商户私钥的时候是直接读取的.pem私钥文件的,该商户私钥文件中已经包含了“BEGIN”头和“END”尾,而官方提供的SDK中的AopClient.php文件的sign方法里面有这么一段代码:
AopClient.php文件的sign函数
即该参数只需商户私钥的正文部分,头尾部分程序已经自动帮我们加上了。

于是,我将.pem文件的头尾去掉后保存重新读取,发现还是报同样的错误。经过一番调试,原来是我的编辑器在保存的时候自动在文件末尾增加一行空白行,经过sign函数后,该商户私钥补上了头和尾,然而“END”尾前多了一行空白行,导致最后的签名参数值为空字符串。去除该空白行后,一切运行顺利。

建议配置支付宝支付配置的时候采用文本方式读取,尽量不要以读文件的方式。