wechatpay-apiv3 / wechatpay-guzzle-middleware

微信支付 APIv3 Guzzle HTTP Client中间件(middleware)
Apache License 2.0
209 stars 46 forks source link

敏感信息加解密功能 #17

Closed TheNorthMemory closed 4 years ago

TheNorthMemory commented 4 years ago

spec: 敏感信息加解密

上述文档上用词上,其实可以再精确一些,应该是「加/解」密;

并且,上行敏感信息是需要用 /v3/certificates 下载的公钥证书加密,下行敏感信息解密是需要用商户私钥解密。

另外,请把 商户上送敏感信息请求HTTP头 Wechatpay-Serial 这个必填字段 更新进 APIv3文档,避免新同学掉坑里出不来。

xy-peng commented 4 years ago

对于文档的建议很到位,我们改!

xy-peng commented 4 years ago

Close #18

TheNorthMemory commented 4 years ago

As of those two(#6, #18) important features done, there should be a new package onto packagist.😄

coosir commented 3 years ago

这里的坑有点深。。。看看readme里面的这段代码:

// 单例加解密示例如下
$crypto = new SensitiveInfoCrypto($wechatpayCertificate, $merchantPrivateKey);
$encrypted = $crypto('Alice');
$decrypted = $crypto->setStage('decrypt')($encrypted);

既然用微信平台证书加密的,例子里面连着这样写,这能解密成功????!!!

xy-peng commented 3 years ago

API v3采用的是非对称的RSA加密算法,对于敏感信息加密的逻辑是这样的。

@coosir readme中的代码,应该是演示的:使用商户私钥对微信返回的应答报文中的敏感信息进行解密,是正确的

coosir commented 3 years ago

@xy-peng 你的解释是清楚的。 我想说的是上面那3行代码太误导人了:第2行用微信平台公钥加密,第3行用商户私钥解密第2行的结果。 如果加解密使用的公私钥不对应,那加解密的说明和示例代码应该分隔开。

xy-peng commented 3 years ago

@coosir 你说得对,我们改一下😭

rowbone commented 3 years ago

领券事件回调通知API 应该用哪个私钥解密,我解不了

TheNorthMemory commented 3 years ago

领券事件回调通知API 应该用哪个私钥解密,我解不了

不是用私钥解密,是用是「平台证书」解密,对应的消息headers上有个Wechatpay-Serial通知用的序列号,可以佐证