Closed wangjunjx8868 closed 2 years ago
内部是有传平台证书序列号的 WeChatPayClient.cs#L164,建议下载源码断点调试
研究了半天也找到 敏感信息在哪传
Receiver.cs#L46 按照文档给对应的BodyModel参数填明文就行了
var fzmodel = new Receiver
{
Account = "111111",
Type = "MERCHANT_ID",
Name = "xxx有限公司",
Amount=1
};
var request = new WeChatPayProfitSharingReceiversAddRequest();
request.SetBodyModel(fzmodel);
var pcm = new WeChatPayPlatformCertificateManager();
WeChatPayOptions wcp = new WeChatPayOptions();
wcp.APIv3Key = _optionsAccessor.Value.APIv3Key;
wcp.AppId = _optionsAccessor.Value.AppId;
wcp.AppSecret = _optionsAccessor.Value.AppSecret;
wcp.RsaPublicKey = wxPublicSTR;
wcp.MchId = _optionsAccessor.Value.MchId ;
wcp.Certificate = _hostingEnvironment.WebRootPath + "/wechatpay.pem";
await pcm.GetCertificateAsync(_client, wcp, "微信平台证书序列号");
var response = await _client.ExecuteAsync(request, wcp);
不行啊报System.ArgumentNullException: Value cannot be null. (Parameter 'rsa')
用 WeChatPayProfitSharingReceiversAddBodyModel ,另外 用 p12格式证书。
按照官方文档要加密的话用的是 微信支付平台证书中的公钥 。商家自己在后台生成是是p12格式,用接口获得 微信支付平台证书是pem格式,我换成 p12 提示 Certificate not found!
public string Encrypt3(string data, string publicKey)
{
if (string.IsNullOrEmpty(data))
{
throw new ArgumentNullException(nameof(data));
}
if (string.IsNullOrEmpty(publicKey))
{
throw new ArgumentNullException(nameof(publicKey));
}
using (var rsa = RSA.Create())
{
rsa.ImportRSAPublicKey(Convert.FromBase64String(publicKey), out var _);
return Convert.ToBase64String(rsa.Encrypt(Encoding.UTF8.GetBytes(data), RSAEncryptionPadding.OaepSHA1));
}
}
private void button1_Click(object sender, EventArgs e)
{
var sysdd = Encrypt3("你好", publicKey);
}
用你源码中的RSA加密,然后用微信支付平台证书中的公钥 ,加密直接报错
paylink中微信平台证书由WeChatPayPlatformCertificateManager自动管理,不需要你自己去调用。
另外之前有个BUG,加密敏感信息会跳过 List ,最新分支已修复
68b80110c8774f4381aabbcdcfffe57b81019eb8 也修正了 WeChatPayProfitSharingReceiversAddRequest 不加密的问题
另外之前有个BUG,加密敏感信息会跳过 List ,最新分支已修复
NUGET上我要更新一下吗?
稍等吧 晚上会发个版本
你先拉代码 调通
调通了,但是 有个小bug就是 不是支付还是分账 ,必须在ExecuteAsync前加上下面两句
_optionsAccessor.Value.Certificate = _hostingEnvironment.WebRootPath + "/apiclient_cert.p12";
_optionsAccessor.Value.CertificatePassword = _optionsAccessor.Value.MchId;
你这么写 不如直接 new WeChatPayOptions
{"code":"PARAM_ERROR","message":"分账接收方关系不存在,请检查参数中每个接收方的关系。"} 出现这个错,应该在这个之前 先执行 “添加分账接收方”,执行完这个API,再进行分账,我觉得是这个流程。我试试看
可以用了,完工谢谢
这个属于业务层面了,需要问微信支付了。
已解决
V3版分账提示缺少平台证书序列号