HTML5技术

总结的一些微信API接口 - 菜鸟的飞翔梦

字号+ 作者:H5之家 来源:H5之家 2017-01-08 08:01 我要评论( )

本文给大家介绍的是个人总结的一些微信API接口,包括微信支付、微信红包、微信卡券、微信小店等,十分的全面,有需要的小伙伴可以参考下。 1. [代码]index.php ?php include_once 'lib.inc.php'; $wcObj = new WeChat("YOUKUIYUAN"); $wcObj-wcValid(); 2. [

本文给大家介绍的是个人总结的一些微信API接口,包括微信支付、微信红包、微信卡券、微信小店等,十分的全面,有需要的小伙伴可以参考下。

1. [代码]index.php

<?php

include_once 'lib.inc.php';

  

$wcObj = new WeChat("YOUKUIYUAN");

$wcObj->wcValid();

2. [代码]微信入口类    

<?php

/**

 * Description of wechat

 *

 * @author Administrator

 */

class WeChat extends WxApi{

  public $token = "";

  //put your code here

  public function __construct($token = "") {

    parent::__construct();

    $this->token = $token;

  }

  

  public function wcCheckSignature(){

    try{

      if (empty($this->token)) {

        throw new Exception('TOKEN is not defined!');

      }

        

      $signature = $_GET["signature"];

      $timestamp = $_GET["timestamp"];

      $nonce = $_GET["nonce"];

          

      $token = $this->token;

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

      // use SORT_STRING rule

      sort($tmpArr, SORT_STRING);

      $tmpStr = implode( $tmpArr );

      $tmpStr = sha1( $tmpStr );

  

      if( $tmpStr == $signature ){

          return true;

      }else{

          return false;

      }

    }

    catch (Exception $e) {

      echo 'Message: ' .$e->getMessage();

    }

  }

    

  public function wcValid(){

    $echoStr = isset($_GET["echostr"]) && !empty($_GET["echostr"]) ? addslashes($_GET["echostr"]) : NULL;

    if(is_null($echoStr)){

      $this->wcMsg();

    }

    else{

      //valid signature , option

      if($this->wcCheckSignature()){

        echo $echoStr;

        exit;

      }

      else{

        exit();

      }

    }

  }

    

  public function wcMsg(){

    //get post data, May be due to the different environments

    $postStr = isset($GLOBALS["HTTP_RAW_POST_DATA"]) && !empty($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : "";

    if(!empty($postStr)){

      libxml_disable_entity_loader(true);

      $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

      $this->zcLog(TRUE,$postObj);

        

      $fromUsername = $postObj->FromUserName;

      $toUsername = $postObj->ToUserName;

      $MsgType = $postObj->MsgType;

        

      if($MsgType == 'event'){//执行事件相应

        $Event = $postObj->Event;

        switch ($Event) {

          case 'subscribe'://关注

            break;

          case 'unsubscribe'://取消关注

            break;

          case 'SCAN'://扫描

            break;

          case 'LOCATION'://地址

            break;

          case 'CLICK'://点击时间

            break;

          case 'VIEW'://跳转

            break;

          case 'card_pass_check'://卡券审核通过

            break;

          case 'card_not_pass_check'://卡券审核失败

            break;

          case 'user_get_card'://用户领取卡券

            break;

          case 'user_del_card'://用户删除卡券

            break;

          case 'user_view_card'://用户浏览会员卡

            break;

          case 'user_consume_card'://用户核销卡券

            break;

          case 'merchant_order'://微小店用户下单付款

            break;

          default:

            break;

        }

      }

      else{

        switch ($MsgType) {

          case 'text'://文本格式

            break;

          case 'image'://图片格式

            break;

          case 'voice'://声音

            break;

          case 'video'://视频

            break;

          case 'shortvideo'://小视频

            break;

          case 'location'://上传地理位置

            break;

          case 'link'://链接相应

            break;

          default:

            break;

        }       

      }

        

      ////////////////////////////////////////////////////////////////////

      $keyword = trim($postObj->Content);

      $time = time();

      $textTpl = "<xml>

              <ToUserName><![CDATA[%s]]></ToUserName>

              <FromUserName><![CDATA[%s]]></FromUserName>

              <CreateTime>%s</CreateTime>

              <MsgType><![CDATA[%s]]></MsgType>

              <Content><![CDATA[%s]]></Content>

              <FuncFlag>0</FuncFlag>

            </xml>";      

      if(!empty( $keyword )){

        $msgType = "text";

        $contentStr = "Welcome to wechat world!";

        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);

        echo $resultStr;

      }

      else{

        echo "Input something...";

      }

      ////////////////////////////////////////////////////////////////////

    }

    else{

      echo "暂时没有任何信息!";

      exit;

    }

  }

    

  //日志LOG

  public function zcLog($errcode , $errmsg){

    $this->returnAy = array();

    $this->returnAy['errcode'] = $errcode;

    $this->returnAy['errmsg'] = $errmsg;

    $this->returnAy['errtime'] = date("Y-m-d H:i:s",time());

    $logfile = fopen("logfile_".date("Ymd",time()).".txt", "a+");

    $txt = json_encode($this->returnAy)."\n";

    fwrite($logfile, $txt);

    fclose($logfile);

    //return $this->returnAy;

  }

    

}

3. [代码]微信操作类 - 更新了自定义菜单部分

<?php

  /********************************************************

   *   @author Kyler You <QQ:2444756311>

   *   @link

   *   @version 2.0.1

   *   @uses $wxApi = new WxApi();

   *   @package 微信API接口 陆续会继续进行更新

   ********************************************************/

  

  class WxApi {

    //const appId     = "";

    //const appSecret   = "";

    const appId     = "";

    const appSecret   = "";

    //const mchid     = ""; //商户号

    //const privatekey  = ""; //私钥

    public $parameters = array();

  

    public function __construct(){

  

    }

  

    /****************************************************

     * 微信提交API方法,返回微信指定JSON

     ****************************************************/

  

    public function wxHttpsRequest($url,$data = null){

        $curl = curl_init();

        curl_setopt($curl, CURLOPT_URL, $url);

        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

        if (!empty($data)){

            curl_setopt($curl, CURLOPT_POST, 1);

            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

        }

        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

        $output = curl_exec($curl);

        curl_close($curl);

        return $output;

    }

  

    /****************************************************

     * 微信带证书提交数据 - 微信红包使用

     ****************************************************/

  

    public function wxHttpsRequestPem($url, $vars, $second=30,$aHeader=array()){

        $ch = curl_init();

        //超时时间

        curl_setopt($ch,CURLOPT_TIMEOUT,$second);

        curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);

        //这里设置代理,如果有的话

        //curl_setopt($ch,CURLOPT_PROXY, '10.206.30.98');

        //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);

        curl_setopt($ch,CURLOPT_URL,$url);

        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);

        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);

  

        //以下两种方式需选择一种

  

        //第一种方法,cert 与 key 分别属于两个.pem文件

        //默认格式为PEM,可以注释

        curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');

        curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/apiclient_cert.pem');

        //默认格式为PEM,可以注释

        curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');

        curl_setopt($ch,CURLOPT_SSLKEY,getcwd().'/apiclient_key.pem');

  

        curl_setopt($ch,CURLOPT_CAINFO,'PEM');

        curl_setopt($ch,CURLOPT_CAINFO,getcwd().'/rootca.pem');

  

        //第二种方式,两个文件合成一个.pem文件

        //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.pem');

  

        if( count($aHeader) >= 1 ){

            curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);

        }

  

        curl_setopt($ch,CURLOPT_POST, 1);

        curl_setopt($ch,CURLOPT_POSTFIELDS,$vars);

        $data = curl_exec($ch);

        if($data){

            curl_close($ch);

            return $data;

        }

        else {

            $error = curl_errno($ch);

            echo "call faild, errorCode:$error\n";

            curl_close($ch);

            return false;

        }

    }

  

    /****************************************************

     * 微信获取AccessToken 返回指定微信公众号的at信息

     ****************************************************/

  

    public function wxAccessToken($appId = NULL , $appSecret = NULL){

        $appId     = is_null($appId) ? self::appId : $appId;

        $appSecret   = is_null($appSecret) ? self::appSecret : $appSecret;

          

        $data = json_decode(file_get_contents("access_token.json"));

        if ($data->expire_time < time()) {

          //echo $appId,$appSecret;

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 干货来袭-整套完整安全的API接口解决方案 - hubro

    干货来袭-整套完整安全的API接口解决方案 - hubro

    2017-01-05 17:00

  • 《年终总结》工作三年多,来来回回,跌跌撞撞,总结批评一下自己这三年半。 - 受戒人

    《年终总结》工作三年多,来来回回,跌跌撞撞,总结批评一下自己这三

    2017-01-05 11:00

  • 【年终总结】我的2016,阅读本文大约需要一整年 - 南尘

    【年终总结】我的2016,阅读本文大约需要一整年 - 南尘

    2017-01-04 08:03

  • 年终的第一篇总结 结束南漂 写在2017 - 欢醉

    年终的第一篇总结 结束南漂 写在2017 - 欢醉

    2017-01-03 14:00

网友点评