zoukankan      html  css  js  c++  java
  • 微信开发(一) 服务器配置

    因为最近需要写一个微信使用加密模式,所以只好学学加密模式。

    先是服务器配置,先将服务器如图配置

    配置微信响应文件:


    define("TOKEN", "hmcome"); //设置token

    define("AppID", "wx4***********");//设置APPID

    define("EncodingAESKey", "x2q***************************");//设置加密密钥

    require_once('wxBizMsgCrypt.php');//引用消息加密解密包  注意:加密解密包里又引用了多个文件

    当用户向公众账号发送消息时,微信公众账号将会在URL中带上signature、timestamp、nonce、encrypt_type、msg_signature等参数,如下所示

    http://www.xxx.com/index.php?signature=35703636de2f9df2a77a662b68e521ce17c34db4&timestamp=1414243737&nonce=1792106704&encrypt_type=aes&msg_signature=6147984331daf7a1a9eed6e0ec3ba69055256154

    加密解密原理简单,就是在微信给你响应的时候是一串密文信息,当到了开发者这里就先解密,解密进行处理了过后再用密文的方式返回给用户。

    检查签名的完整代码:

    public function responseMsg()
    {
    $timestamp = $_GET['timestamp'];
    $nonce = $_GET["nonce"];
    $msg_signature = $_GET['msg_signature'];
    $encrypt_type = (isset($_GET['encrypt_type']) && ($_GET['encrypt_type'] == 'aes')) ? "aes" : "raw";
    //检查加密否

    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
    if (!empty($postStr)){
    //如果是加密的文本,就将他先解密
    if ($encrypt_type == 'aes'){
    $pc = new WXBizMsgCrypt(TOKEN, EncodingAESKey, AppID);
    $decryptMsg = ""; //解密后的明文
    $errCode = $pc->DecryptMsg($msg_signature, $timestamp, $nonce, $postStr, $decryptMsg);
    $postStr = $decryptMsg;
    }
    //解密结束
    $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
    $RX_TYPE = trim($postObj->MsgType);

    //消息分离,判断是文本还是事件
    switch ($RX_TYPE)
    {
    case "text":
    $resultStr = $this->receiveText($postObj);
    break;
    case "event":
    $resultStr = $this->receiveEvent($postObj);
    break;
    default:
    $resultStr = "";
    break;
    }
    //响应完了过后再把消息加密
    if ($encrypt_type == 'aes'){
    $encryptMsg = ''; //加密后的明文
    $errCode = $pc->encryptMsg($resultStr, $timestamp, $nonce, $encryptMsg);
    $postStr = $encryptMsg;
    }
    //加密结束
    echo $resultStr;
    }else {
    echo "";
    exit;
    }
    }

  • 相关阅读:
    如何在 Linux 虚拟机上扩展根文件系统
    Linux 虚拟机中配置 GNOME + VNC
    在 Linux 中使用 Azure Premium 存储的基本优化指南
    如何为运行的 ARM Linux 启用 LAD2.3 版本的诊断扩展
    不要在构造函数中抛出异常
    vtk java
    富文本keditor的一些使用问题
    几个问题
    Java并发编程(十四)并发容器类
    FreeBSD编译安装emacs,不要用ports
  • 原文地址:https://www.cnblogs.com/jianmingyuan/p/6000133.html
Copyright © 2011-2022 走看看