为了账号安全,请及时绑定邮箱和手机立即绑定

微信开放平台:验证票据component_verify_ticket解密

在开发微信开放平台-第三方平台过程中,遇到了component_verify_ticket无法解密问题。官方文档晦涩难懂,于是自己重新写了一个解密component_verify_ticket的方法。

使用前请先安装mcrypt扩展

<?php
/**

huyang61@qq.com
* Notes:
* DateTime: 2023/7/12 10:23
*/

namespace App\Http\Services;

/**
* Notes:
* DateTime: 2023/7/12 10:23
*/
class Jie
{
   public static function decode($xml, $encodingaeskey): array
   {
       $xml = (array)simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
       $str = $xml['Encrypt'];
       $data = self::aes_decode($str, $encodingaeskey);
       $xml = (array)simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA);
       return $xml;
   }

   public static function aes_decode($message, $encodingaeskey)
   {
       $key = base64_decode($encodingaeskey . '=');

       $ciphertext_dec = base64_decode($message);
       $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
       $iv = substr($key, 0, 16);

       mcrypt_generic_init($module, $key, $iv);
       $decrypted = mdecrypt_generic($module, $ciphertext_dec);
       mcrypt_generic_deinit($module);
       mcrypt_module_close($module);
       $block_size = 32;

       $pad = ord(substr($decrypted, -1));
       if ($pad < 1 || $pad > 32) {
           $pad = 0;
       }
       $result = substr($decrypted, 0, (strlen($decrypted) - $pad));
       if (strlen($result) < 16) {
           return '';
       }
       $content = substr($result, 16, strlen($result));
       $len_list = unpack("N", substr($content, 0, 4));
       $contentlen = $len_list[1];
       $content = substr($content, 4, $contentlen);
       return $content;
   }
}


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
PHP开发工程师
手记
粉丝
4
获赞与收藏
0

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消