在本地安装证书并调用微信小程序支付,没有问题,但发布到服务器则报错,开始显示内部错误,查相关资料后发现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);