天呐!!!!!真的忙活了好久,终于在将近凌晨两点的时候解决了问题。
进入正题。
是的,没有错,如果你怀疑微信那边给的示例有问题那是对的,至少其给的示例在python3上有问题(我测试是如此哈, python3.9),需要改动一下填充方式,不能按照官方示例去填充,否则最后的AES加密结果会有问题。那么废话不多说,我把我改后的代码附下:
random_str = self .get_random_str().encode( "utf-8" ) msg_bytes = text.encode( "utf-8" ) msg_len_bytes = struct.pack( '>I' , len (msg_bytes))full_str = (random_str +msg_len_bytes +msg_bytes +appid.encode( "utf-8" ) )padded_data = pad(full_str, AES.block_size)
cryptor = AES.new( self .key, self .mode, self .key[: 16 ])
ciphertext = cryptor.encrypt(padded_data)
其中上面的text为需要向微信返回的内容,类似: "<xml><ToUserName><![CDATA[oia2TjjewbmiOUlr6X-1crbLOvLw]]></ToUserName><FromUserName><![CDATA[gh_7f083739789a]]></FromUserName>........</xml>"
好的,然后其他的东西(指官方示例)实际上就是encode和decode操作操作(其实也就说明Java的示例理论上来说没问题,虽然我会Java,但我懒得去研究,哈哈哈,python的flask一下就很好上线测试,代码写的也不用这么多(不是 )
鸣谢AI帮我把Java的代码快速的转成Python代码,因此最终才解决QWQ
好了,结算信息------------------------------->
感谢你阅读我的文章,感恩!
如有其他问题,可以私信我交流 ps:当然,最好是你实在解决不了:)