转载 微信支付服务器与本地证书问题的坑

在本地安装证书并调用微信小程序支付,没有问题,但发布到服务器则报错,开始显示内部错误,查相关资料后发现IIS确实与VS环境不同,需要设置以下内容:

Https传输证书授权问题

一、导入证书 

1、运行->mmc,打开管理控制台,文件->添加/删除管理单元

2、在可用的管理单元中选择证书,然后点击添加

3、回到控制台,展开证书-当前用户->个人->证书,然后导入证书

这里,微信的新证书,是双击执行导入的。并且默认是导入到当前账户。(之后授权也应该为当前用户administrator,或者可以试试everyone)

按照步骤导入证书,微信支付证书初始密码为商户号

4、证书导入完成后,就会出现在证书列表上

二. 修改IIS上对应项目的程序池标识(如果是服务端,客户端的不用此步骤)

1. 打开IIS -> 选择[应用程序池] -> 选中对应的项目 -> 选择右侧的[高级设置]

2. 找到[进程模型] -> 修改[标识]属性值

3. 将 ApplicationPoolIdentity 修改为 NetworkService

3. 将 ApplicationPoolIdentity 修改为 administrator(因为导入证书导入到当前用户了,对应administrator)

三、安装授权工具

 1.下载 winhttpcertcfg.exe 安装

 附下载地址:1.https://www.microsoft.com/en-us/download/confirmation.aspx?id=19801

 2.https://www.microsoft.com/en-us/download/details.aspx?id=19801

 3.安装完  用命令窗口  跳转到 C:\Program Files (x86)\Windows Resource Kits\Tools(安装的路径) 执行

winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "test" -a "NetworkService"

这里因为导入到了当前账户里,所以执行

服务器,默认使用远程安装支付证书会到当前用户
winhttpcertcfg -g -c CURRENT_USER\MY -s "证书名称(商户号)" -a "NetworkService"

winhttpcertcfg -g -c CURRENT_USER\MY -s "证书名称(商户号)" -a "EveryOne"

winhttpcertcfg -g -c CURRENT_USER\MY -s "证书名称(商户号)" -a "administrator"

test是证书名,不带后缀,替换成你的证书名字就行

详细信息可以参考https://www.cnblogs.com/ccsharp/p/3270344.html

https://www.cnblogs.com/similar/p/6831899.html 

 

四、设置网站SSL

选中网站,点击 SSL设置 ,选择要求SSL,选择必须,点击应用

 

 

五、修改代码

之前  cer = new X509Certificate(cerUrl, refundEntity.mch_id);

改后 cer = new X509Certificate(cerUrl, refundEntity.mch_id, X509KeyStorageFlags.MachineKeySet);

 

原文地址:https://blog.csdn.net/smeyou/article/details/100530940

posted @ 2021-01-04 08:11  阿鹏哥  阅读(350)  评论(0编辑  收藏  举报