.net core 下排查支付宝签名错误——您使用的私钥格式错误,请检查RSA私钥配置

支付宝是我们支付的重头戏,为了搞定支付宝支付我们花费了大量的时间和精力,也趟过了无数的坑。而今天在生成支付宝小程序二维码的一个小接口上,我们又被坑了~~~

事故第一现场

在这里插入图片描述
下午忽然收到同事的呼救,说给的支付宝私钥有问题,一番校验,发现没有问题啊。看了下同事的问题,如下:

  1. 场景1,开发环境(windows)调试,发送接口请求,返回正常
  2. 场景2,发布到服务器(docker)环境,发送接口请求,返回失败。
    错误异常如下:
rid:3cbfe2ae41f44b64b01f31b26a2197de , url:/xxx/xxxAppQrCode
   Execute Time:54 ms
   code:500,msg:ServerError:	[Exception]:[serviceName]: [computerName]:c7bb3eb3867a [workPath]:/publish/ [processInfo]:13-dotnet [computerAddress]:172.17.0.7
   [ExceptionMessage]:您使用的私钥格式错误,请检查RSA私钥配置,charset = utf-8
   [ExceptionStackTrace]:   at Aop.Api.Util.AlipaySignature.RSASignCharSet(String data, String privateKeyPem, String charset, Boolean keyFromFile, String signType)
  at Aop.Api.Util.AlipaySignature.RSASign(IDictionary`2 parameters, String privateKeyPem, String charset, Boolean keyFromFile, String signType)
  at Aop.Api.Util.AopUtils.SignAopRequest(IDictionary`2 parameters, String privateKeyPem, String charset, Boolean keyFromFile, String signType)
  at Aop.Api.DefaultAopClient.Execute[T](IAopRequest`1 request, String accessToken, String appAuthToken)
  at Aop.Api.DefaultAopClient.Execute[T](IAopRequest`1 request, String accessToken)
  at Aop.Api.DefaultAopClient.Execute[T](IAopRequest`1 request)

呵呵,竟然遇到如此神奇的错误。

排查一:配置错误

检查开发环境的配置,对比服务器环境配置,一番拷贝、复制下来,发现配置完全一样。
此路不通啊!
在这里插入图片描述

排查2:度娘

在这里插入图片描述

为了帮助同事解决该问题,我开展了一下救援工作。搜索度娘,几下找到了博客园的解决办法。

调试支付宝条码支付的时候碰到个错误:您使用的私钥格式错误,请检查RSA私钥配置,charset = utf-8,
原因是我代码里的那私钥是直接复制pem文件里的代码的,可支付宝底层的sdk中默认是以文件的方式来进行,
方法引用

查看一下DefaultAopClient.cs,里面有一个自定义属性keyFromFile改成=false,则是用代码的方式进行,true的话则必须得传入pem的物理路径,如:HttpRuntime.AppDomainAppPath.ToString() + “App_Data\ant\rsa_private_key.pem”

这是一个点,回去问了下同事,说已经设定过了,开来这个坑比较深啊!

排查3:问经验丰富的支付宝开发专家

在这里插入图片描述

号称有3年的支付经验开发,继承了各大支付平台,是我司的栋梁之材!关键的时候,需要老将出马了!
一通电话下来,他说帮我试下:

  • 支付宝私钥校验,通过
  • 支付宝公钥校验,通过
  • 本地调试,通过
  • 看日志:卡在您使用的私钥格式错误,请检查RSA私钥配置。

55555,谁也帮不了我亲爱的同事了!看来是时候祭出我的神器了
搬出神奇的子,翻阅外文资料,一通翻,没啥帮助啊!看来捷径没有了,还得老老实实的看源码了~~~

排查4: github源码

在这里插入图片描述

源码地址:https://github.com/alipay/alipay-sdk-net-all
翻看了下源码,编码采用utf-8,没有问题,那就把源码拉下来吧,毕竟在docker容器内没法直接跟踪,不如把源码加载上,打印出来请求参数,看看到底啥情况。
说干就干,拉下来源码,换库。

咦,咦,这是什么啊?
在这里插入图片描述
我们亲爱的同事,引入了

<PackageReference Include="Alipay" Version="2.0.0" />

此库不支持.net core !
oh,my god!
我明白了,就是此库的问题,一定是。
看看官方的说明!!
在这里插入图片描述
我想死的心已经有了!
在这里插入图片描述

更换正确的包

还有什么说的,linux下需要特别的库,因此针对.net core的库才是首先。至于这个神奇的问题,也只能说.net framework 下的库在windows上也能运行在.net core ,是真的神奇!

好了,我大支付宝,不背你的烂锅!

愿天下没有神奇的手,则天下就没有神奇的坑!
在这里插入图片描述

webmote CSDN认证博客专家 spark ETL hadoop
一位资深系统架构师、70后大龄码农、软件经理,擅长c++、.net core、微服务、前端Angular、H5等,也是一名摄影爱好者
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值