程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 接入腳本interface.php實現代碼,腳本interface.php

接入腳本interface.php實現代碼,腳本interface.php

編輯:關於PHP編程

接入腳本interface.php實現代碼,腳本interface.php


 

承接上文的WeChatCallBack

    在WeChatCallBack類的成員變量中定義了各種消息都會有的字段,這些字段在init函數中賦值。同時也把解析到的XML對象作為這個類的成員變量$_postObject並在init中賦值,目的是在實現具體公眾賬號的業務邏輯時,具體的各類消息的特殊字段可以通過它來獲取。

    process函數時實現具體公眾賬號的業務邏輯時需要重載的函數,默認的實現是返回一個“未實現”的錯誤提示。

 

  本文的重點是接入腳本,接入腳本是項目根目錄的interface.php,其代碼清單如下文所示:

  <?php

  require_once dirname(__FILE__) . '/common/GlobalFunctions.php';

  function checkSingnature()

  {

    $signature = $_GET["signature"];

    $timestamp = $_GET["timestamp"];

    $nonce = $_GET["nonce"];

 

    $token = WEIXIN_TOKEN;

    $tmpArr = array($token, $timestamp, $nonce);

    sort($tmpArr);

    $tmpStr = implode( $tmpArr );

    $tmpStr = shal( $tmpStr );

 

    if( $tmpStr == $signature ) {

      return true;

    } else {

      return false;

    }

  }

 

  if(checkSignature()) {

    if($_GET["echostr"]) {

      echo $_GET["echostr"];

      exit(0);

    }

  } else {

    // 惡意請求: 獲取來源IP, 並寫入日志

    $ip = getIp();

    interface_log(ERROR, EC_OTHER, 'malicious: ' . $ip);

    exit(0);

  }

 

  function getWeChatObj($toUserName) {

    if($toUserName == USERNAME_FINDFACE) {

      require_once dirname(__FILE__) . '/class/

      WeChatCallBackMeiri10futu.php' ;

      return new WeChatCallBackMeir10futu();

    }

    if($toUserName == USERNAME_MR)  {

      require_once dirname(__FILE__) . '/class/

      WeChatCallBackMeir10futu.php' ;

      return new WeChatCallBackMeir10futu();

    }

    if($toUserName == USERNAME_ES) {

      require_once dirname(__FILE__) . '/class/

      WeChatCallBackEchoServer.php' ;

      return new WeChatCallBackEchoServer();

    }

    require_once dirname(__FILE__) . '/class/WeChatCallBcak.php' ;

    return new WeChatCallBack();

  }

  function exitErrorInput() {

    echo 'error input!' ;

    interface_log(INFO, EC_OK, "***** interface request end ******") ;

    interface_log(INFO, EC_OK, "********************** ******") ;

    interface_log(INFO, EC_OK, "") ;

    exit( 0 );

  }

 

  $postStr = file_get_contents ( "php://input" );

  

  interface_log(INFO, EC_OK, "");

  interface_log(INFO, EC_OK, "*****************************");

  interface_log(INFO, EC_OK, "***** interface request start *****");

  interface_log(INFO, EC_OK, 'request: '  .  var_export($_GET, ture)) ;

 

  if (empty ( $postStr )) {

    interface_log ( ERROR, EC_OK, "error input!" );

    exitErrorInput();

  }

  // 獲取參數

  $postObj = simplexml_load_string  ( $postStr,  'SimpleXMLElement',

  LIBXML_NOCDATA ) ;

  $toUserName = ( string ) trim ( $postObj->ToUserName ) ;

  if (! $toUserName) {

    interface_log ( ERROR, EC_OK, "error input!" ) ;

    exitErrorInput() ;

  } else {

    $wechatObj = getWeChatObj ( $ toUserName ) ;

  }

  retStr = $ wechatObj->process ();

  interface_log(INFO, EC_OK, "***** interface request end *****") ;

  interface_log(INFO, EC_OK, "****************************") ;

  interface_log(INFO, EC_OK, "");

 

  ?>

 

  Interface.php邏輯描述:

  1.使用checkSignature函數驗證請求是否合法,在不合法的情況下,記錄惡意的來源IP。

  2.獲取POST數據,解析XML數據,根據ToUserName來決定是發往哪一個公眾賬號的消息,然後加載對應的文件,獲得對應的對象(getWeChatObj函數)。

  3.調用對象的init函數初始化對象。

  4.調用對象的process函數處理公眾賬號邏輯,得到返回消息字符串。

  5.返回消息。

 

  獲取來源IP函數:

  function getIp () 

  {

    if (isset($_SERVER)) {

        if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {

            $realip = $_SERVER["HTTP_X_FORWARDED_FOR"] ;

        } else if (isser($_SERVER["HTTP_CLIENT_IP"]))  {

            $realip = $_SERVER["HTTP_CLIENT_IP"] ;

        } else {

            $realip = $SERVER["REMOTE_ADDR"];

        }

    } else {

        if (getenv(""HTTP_X_FORWARDED_FOR")) {

            $realip = getenv("HTTP_X_FORWARDED_FOR") ;

        } else if (getenv("HTTP_CLIENT_IP")) {

            $realip = getenv("HTTP_CLIENT_IP") ;

        } else {

            $realip = getenv("REMOVE_ADDR") ;

        }

    }

    return $realip;

  }

 

___________over____________

 


什是SP接入代碼

是第二類增值電信業務中的移動網信息服務業務的短消息接入代碼,分為全網和地網兩類,其中全網sp接入代碼為1066開頭的全網經營性sp接入代碼,和1069開頭的全網非經營性sp接入代碼;地網sp接入代碼分為1062開頭經營性和1063開頭非經營性。全網sp接入代碼的申請機構是工業和信息化部,地網接入代碼的申請機構是地方的通信管理局,那麼申請sp接入代碼需要提交哪些資料呢? sp接入代碼申請材料1、短消息類服務接入代碼申請報告(號碼位長、適用范圍、聯系人聯系電話);2、短消息類服務接入代碼(省內使用)申請表;3、短消息類服務接入代碼使用承諾書;4、增值電信業務經營許可證(業務類別:短信息服務)原件及復印件;5、營業執照副本原件及復印件;6、技術方案、業務規劃等。
 

接入代碼是什

每個地區的接入代碼是不同的
你只能撥打10086轉人工服務了
或者你告訴我電話號碼歸屬地才能幫你查詢!
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved