zoukankan      html  css  js  c++  java
  • 微信开放平台 获取 component_verify_ticket

    <?php
    /**
     * @author zhaozhuobin
     * @date:2016-06=07
     *
     */
    
    namespace commoncomponents;use DOMDocument;
    use WXBizMsgCrypt;
    use yiiaseAction;
    use Yii;
    
    /**
     *  获取微信 component_verify_ticket
     *
     * <xml>
     *   <AppId> AppId</AppId>
     *   <CreateTime> 1413192605 </CreateTime>
     *   <InfoType> component_verify_ticket </InfoType>
     *   <ComponentVerifyTicket> 内容 </ComponentVerifyTicket>
     * </xml>
     *
     * Class WechatAction
     * @package commoncomponents
     */
    class WechatAction extends  Action
    {
    
        public $openWechat;
    
        /**
         * @return string|void
         */
        public function run()
        {
            $this->openWechat = Yii::$app->openWechat;
            $param = $this->getParam();
            $encryptMsg = file_get_contents('php://input');$result = $this->getVerify_Ticket($param['timestamp'],$param['nonce'],$param['msg_signature'],$encryptMsg);
            if($result){
                return "success";
            }
        }
    
        /**
         * 获取参数
         * @return array|mixed
         */
        public function getParam()
        {
            $param = Yii::$app->request->get();
            $param['timestamp'] = empty($param['timestamp']) ? "" : trim($param['timestamp']);
            $param['nonce'] = empty($param['nonce']) ? "" : trim($param['nonce']);
            $param['msg_signature'] = empty($param['msg_signature']) ? "" : trim($param['msg_signature']);
            $param['signature'] = empty($param['signature']) ? "" : trim($param['signature']);
            return $param;
        }
    
        /**
         * 获取 component_verify_ticket
         * @param $timeStamp
         * @param $nonce
         * @param $msg_sign
         * @param $encryptMsg
         * @return bool
         */
        public function getVerify_Ticket($timeStamp, $nonce, $msg_sign, $encryptMsg)
        {
            @include_once (dirname(__DIR__).'/messageCrypt/wxBizMsgCrypt.php');
            $pc = new WXBizMsgCrypt($this->openWechat->token, $this->openWechat->encodingAesKey, $this->openWechat->appId);
    
            $xml_tree = new DOMDocument();
            $xml_tree->loadXML($encryptMsg);
            $array_e = $xml_tree->getElementsByTagName('Encrypt');
            $encrypt = $array_e->item(0)->nodeValue;
    
            $format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>";
    
            $from_xml = sprintf($format, $encrypt);
    
            $msg = '';
    
            $errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg);
    
            if ($errCode == 0) {
                $xml = new DOMDocument();
                $xml->loadXML($msg);
                $array_e = $xml->getElementsByTagName('ComponentVerifyTicket');
                $component_verify_ticket = $array_e->item(0)->nodeValue;
    
                //=======这里把 component_verify_ticket 保存到数据库========//
    
                return true;
            }else{
                //=======这里记录错误码========//
                return false;
            }
        }
    }
  • 相关阅读:
    base64加密后字符串长度
    Mysql如何查字段的长度,Mysql中length()、char_length()的区别
    Java 逆变与协变的名词说明
    Java 泛型在实际开发中的应用
    MySQL自增主键排序问题
    【python基础】怎么实现装饰器?
    【python基础】列表推导式
    【python】爬虫实践项目(一):39问医生
    关于DRF序列化器模型字段参数设置报错AssertionError: May not set both `read_only` and `write_only`
    DRF学习笔记
  • 原文地址:https://www.cnblogs.com/boystar/p/5595420.html
Copyright © 2011-2022 走看看