Home  >  Article  >  Backend Development  >  WeChat open platform obtains component_verify_ticket, cas client obtains ticket_PHP tutorial

WeChat open platform obtains component_verify_ticket, cas client obtains ticket_PHP tutorial

WBOY
WBOYOriginal
2016-07-12 08:52:391625browse

WeChat open platform obtains component_verify_ticket, cas client obtains ticket

Official document description:

After the public account is created and approved by the third-party platform, the WeChat server will regularly push component_verify_ticket to its "Authorization Event Receiving URL" every 10 minutes. The third-party platform also needs to decrypt the ticket push after receiving it (see [Message Encryption and Decryption Access Guidelines] for details), and must directly return the string success after receiving it.

The first step is to instantiate the class WXBizMsgCrypt provided by WeChat and pass in the parameters of the development platform.

<span><span>$pc</span> = <span>new</span> WXBizMsgCrypt(WxPayConfig::Token, WxPayConfig::EncodingAesKey, WxPayConfig::open_AppID);</span>

When WeChat Open Platform obtains component_verify_ticket, in addition to obtaining the timestamp nonce encrypt_type msg_sign four parameters through GET, it also needs to obtain the postdata encryption parameter (encryptMsg) through file_get_contents('php://input').

The obtained $encryptMsg is data in Xml format. The data under the Encrypt node needs to be extracted as follows:

<span><span>1</span> <span>$xml_tree</span> = <span>new</span><span> DOMDocument();
</span><span>2</span> <span>$xml_tree</span>->loadXML(<span>$encryptMsg</span><span>);
</span><span>3</span> <span>$array_e</span> = <span>$xml_tree</span>->getElementsByTagName('Encrypt'<span>);
</span><span>4</span> <span>$encrypt</span> = <span>$array_e</span>->item(0)->nodeValue;</span>

Next, you need to substitute the obtained ciphertext into another piece of >$encrypt is in Xml format and then extracts the method provided by WeChat again )

<span>1</span> <span>$format</span> = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>"<span>;</span>
<span>2</span> <span>$from_xml</span> = <span>sprintf</span>(<span>$format</span>, <span>$encrypt</span>);
Now you can call the decryptMsg function to decrypt

<span><span> 1</span> <span>$msg</span> = ''<span>;
</span><span> 2</span> 
<span> 3</span> <span>$errCode</span> = <span>$pc</span>->decryptMsg(<span>$msg_sign</span>, <span>$timeStamp</span>, <span>$nonce</span>, <span>$from_xml</span>, <span>$msg</span><span>);
</span><span> 4</span> 
<span> 5</span> <span>if</span> (<span>$errCode</span> == 0<span>) {
</span><span> 6</span> <span>//</span><span>由于返回的也是Xml格式的数据 所以这里再次提取ComponentVerifyTicket节点中的内容</span>
<span> 7</span> <span>$xml</span> = <span>new</span><span> DOMDocument();
</span><span> 8</span> <span>$xml</span>->loadXML(<span>$msg</span><span>);
</span><span> 9</span> <span>$array_e</span> = <span>$xml</span>->getElementsByTagName('ComponentVerifyTicket'<span>);
</span><span>10</span> <span>$component_verify_ticket</span> = <span>$array_e</span>->item(0)-><span>nodeValue;
</span><span>11</span> <span>//</span><span>获取到了$component_verify_ticket后就可以进行写入数据存储了</span>
<span>12</span> <span>echo</span> "success"<span>;
</span><span>13</span> }<span>else</span><span>{
</span><span>14</span> <span>echo</span> <span>$errCode</span><span>;
</span><span>15</span> }</span>
Now you have obtained component_verify_ticket.

All codes:

<span>require_once ("wxBizMsgCrypt.php");<br />public</span> <span>function</span><span> index()
    {    

        </span><span>$timeStamp</span>    =<span>$_GET</span>['timestamp'<span>];
        </span><span>$nonce</span>        =<span>$_GET</span>['nonce'<span>];
        </span><span>$encrypt_type</span> =<span>$_GET</span>['encrypt_type'<span>];
        </span><span>$msg_sign</span>     =<span>$_GET</span>['msg_signature'<span>];
        </span><span>$encryptMsg</span>   =<span>file_get_contents</span>('php://input'<span>);
        
        </span><span>$result</span> = <span>$this</span>->getVerify_Ticket(<span>$timeStamp</span>,<span>$nonce</span>,<span>$encrypt_type</span>,<span>$msg_sign</span>,<span>$encryptMsg</span><span>);

        </span><span>if</span>(<span>$result</span><span>){
            </span><span>echo</span> "success"<span>;
        }

    }


 </span><span>//</span><span>获取component_verify_ticket</span>
 <span>public</span> <span>function</span> getVerify_Ticket(<span>$timeStamp</span>,<span>$nonce</span>,<span>$encrypt_type</span>,<span>$msg_sign</span>,<span>$encryptMsg</span><span>){

        </span><span>$pc</span> = <span>new</span> WXBizMsgCrypt(WxPayConfig::Token, WxPayConfig::EncodingAesKey, WxPayConfig::<span>open_AppID);

        </span><span>$xml_tree</span> = <span>new</span><span> DOMDocument();
        </span><span>$xml_tree</span>->loadXML(<span>$encryptMsg</span><span>);
        </span><span>$array_e</span> = <span>$xml_tree</span>->getElementsByTagName('Encrypt'<span>);
        </span><span>$encrypt</span> = <span>$array_e</span>->item(0)-><span>nodeValue;

        </span><span>$format</span> = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>"<span>;

        </span><span>$from_xml</span> = <span>sprintf</span>(<span>$format</span>, <span>$encrypt</span><span>);

        </span><span>$msg</span> = ''<span>;

        </span><span>$errCode</span> = <span>$pc</span>->decryptMsg(<span>$msg_sign</span>, <span>$timeStamp</span>, <span>$nonce</span>, <span>$from_xml</span>, <span>$msg</span><span>);

        </span><span>if</span> (<span>$errCode</span> == 0<span>) {

            </span><span>$xml</span> = <span>new</span><span> DOMDocument();
            </span><span>$xml</span>->loadXML(<span>$msg</span><span>);
            </span><span>$array_e</span> = <span>$xml</span>->getElementsByTagName('ComponentVerifyTicket'<span>);

            </span><span>$component_verify_ticket</span> = <span>$array_e</span>->item(0)-><span>nodeValue;
            DB</span>::getDB()->delete("wechat_verifyticket",'uptime!=1'<span>);
            DB</span>::getDB()->insert("wechat_verifyticket",<span>array</span><span>(
                </span>'component_verify_ticket'    => <span>$component_verify_ticket</span>,
                'uptime'                    => <span>time</span><span>()));

            </span><span>return</span> <span>true</span><span>;
        }</span><span>else</span><span>{
            DB</span>::getDB()->delete("wechat_verifyticket",'uptime!=1'<span>);
            DB</span>::getDB()->insert("wechat_verifyticket",<span>array</span><span>(
                </span>'component_verify_ticket'    => <span>$errCode</span>,
                'uptime'                    => <span>time</span><span>()));
            </span><span>return</span> <span>false</span><span>;
        }

    }</span>

http://www.bkjia.com/PHPjc/1125992.html

truehttp: //www.bkjia.com/PHPjc/1125992.htmlTechArticleThe WeChat open platform obtains component_verify_ticket, and the cas client obtains the ticket. Official document description: Create and approve on the public account third-party platform Afterwards, the WeChat server will authorize the event to it...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn