HTML5技术

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

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

$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appId."secret=".$appSecret."code=".$code."grant_type=authorization_code"; $result = $this-wxHttpsRequest($url); //print_r($result);

        $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appId."&secret=".$appSecret."&code=".$code."&grant_type=authorization_code";

        $result     = $this->wxHttpsRequest($url);

        //print_r($result);

        $jsoninfo    = json_decode($result, true);

        //$access_token   = $jsoninfo["access_token"];

        return $jsoninfo;     

    }

  

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

     * 微信通过OAUTH的Access_Token的信息获取当前用户信息 // 只执行在snsapi_userinfo模式运行

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

  

    public function wxOauthUser($OauthAT,$openId){

        $url      = "https://api.weixin.qq.com/sns/userinfo?access_token=".$OauthAT."&openid=".$openId."&lang=zh_CN";

        $result     = $this->wxHttpsRequest($url);

        $jsoninfo    = json_decode($result, true);

        return $jsoninfo;     

    }

  

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

     * 创建自定义菜单

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

  

    public function wxMenuCreate($jsonData){

      $wxAccessToken = $this->wxAccessToken();

      $url      = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $wxAccessToken;

      $result     = $this->wxHttpsRequest($url,$jsonData);

      $jsoninfo    = json_decode($result, true);

      return $jsoninfo;     

    }

  

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

     * 获取自定义菜单

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

  

    public function wxMenuGet(){

      $wxAccessToken = $this->wxAccessToken();

      $url      = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=" . $wxAccessToken;

      $result     = $this->wxHttpsRequest($url);

      $jsoninfo    = json_decode($result, true);

      return $jsoninfo;

    }

  

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

     * 删除自定义菜单

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

  

    public function wxMenuDelete(){

      $wxAccessToken = $this->wxAccessToken();

      $url      = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=" . $wxAccessToken;

      $result     = $this->wxHttpsRequest($url);

      $jsoninfo    = json_decode($result, true);

      return $jsoninfo;

    }

  

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

     * 获取第三方自定义菜单

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

  

    public function wxMenuGetInfo(){

      $wxAccessToken = $this->wxAccessToken();

      $url      = "https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=" . $wxAccessToken;

      $result     = $this->wxHttpsRequest($url);

      $jsoninfo    = json_decode($result, true);

      return $jsoninfo;

    }

          

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

     *   生成随机字符串 - 最长为32位字符串

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

    public function wxNonceStr($length = 16, $type = FALSE) {

      $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

      $str = "";

      for ($i = 0; $i < $length; $i++) {

       $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);

      }

      if($type == TRUE){

        return strtoupper(md5(time() . $str));

      }

      else {

        return $str;

      }

    }

      

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

     *   微信商户订单号 - 最长28位字符串

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

      

    public function wxMchBillno($mchid = NULL) {

      if(is_null($mchid)){

        if(self::mchid == "" || is_null(self::mchid)){

          $mchid = time();

        }

        else{

          $mchid = self::mchid;

        }

      }

      else{

        $mchid = substr(addslashes($mchid),0,10);

      }

      return date("Ymd",time()).time().$mchid;

    }

      

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

     *   微信格式化数组变成参数格式 - 支持url加密

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

      

    public function wxSetParam($parameters){

      if(is_array($parameters) && !empty($parameters)){

        $this->parameters = $parameters;

        return $this->parameters;

      }

      else{

        return array();

      }

    }

      

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

     *   微信格式化数组变成参数格式 - 支持url加密

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

      

  public function wxFormatArray($parameters = NULL, $urlencode = FALSE){

      if(is_null($parameters)){

        $parameters = $this->parameters;

      }

      $restr = "";//初始化空

      ksort($parameters);//排序参数

      foreach ($parameters as $k => $v){//循环定制参数

        if (null != $v && "null" != $v && "sign" != $k) {

          if($urlencode){//如果参数需要增加URL加密就增加,不需要则不需要

            $v = urlencode($v);

          }

          $restr .= $k . "=" . $v . "&";//返回完整字符串

        }

      }

      if (strlen($restr) > 0) {//如果存在数据则将最后“&”删除

        $restr = substr($restr, 0, strlen($restr)-1);

      }

      return $restr;//返回字符串

  }

      

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

     *   微信MD5签名生成器 - 需要将参数数组转化成为字符串[wxFormatArray方法]

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

    public function wxMd5Sign($content, $privatekey){

    try {

        if (is_null($privatekey)) {

          throw new Exception("财付通签名key不能为空!");

        }

        if (is_null($content)) {

          throw new Exception("财付通签名内容不能为空");

        }

        $signStr = $content . "&key=" . $privatekey;

        return strtoupper(md5($signStr));

      }

      catch (Exception $e)

      {

        die($e->getMessage());

      }

    }

      

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

     *   微信Sha1签名生成器 - 需要将参数数组转化成为字符串[wxFormatArray方法]

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

    public function wxSha1Sign($content){

      try {

        if (is_null($content)) {

          throw new Exception("签名内容不能为空");

        }

        //$signStr = $content;

        return sha1($content);

      }

      catch (Exception $e)

      {

        die($e->getMessage());

      }

    }

      

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

     *   微信jsApi整合方法 - 通过调用此方法获得jsapi数据

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

    public function wxJsapiPackage(){

      $jsapi_ticket = $this->wxJsApiTicket();

        

      // 注意 URL 一定要动态获取,不能 hardcode.

      $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";

      $url = $protocol.$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];

        

      $timestamp = time();

      $nonceStr = $this->wxNonceStr();

        

      $signPackage = array(

       "jsapi_ticket" => $jsapi_ticket,

       "nonceStr" => $nonceStr,

       "timestamp" => $timestamp,

       "url"    => $url

      );

        

      // 这里参数的顺序要按照 key 值 ASCII 码升序排序

      $rawString = "jsapi_ticket=$jsapi_ticket&noncestr=$nonceStr×tamp=$timestamp&url=$url";

        

      //$rawString = $this->wxFormatArray($signPackage);

      $signature = $this->wxSha1Sign($rawString);

        

      $signPackage['signature'] = $signature;

      $signPackage['rawString'] = $rawString;

      $signPackage['appId'] = self::appId;

        

      return $signPackage;

    }

      

      

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

     *   将数组解析XML - 微信红包接口

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

    public function wxArrayToXml($parameters = NULL){

      if(is_null($parameters)){

        $parameters = $this->parameters;

      }

        

      if(!is_array($parameters) || empty($parameters)){

        die("参数不为数组无法解析");

      }

        

      $xml = "<xml>";

      foreach ($arr as $key=>$val)

      {

        if (is_numeric($val))

        {

          $xml.="<".$key.">".$val."</".$key.">";

        }

        else

          $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";

      }

      $xml.="</xml>";

      return $xml;

    }

      

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

     *   微信卡券:上传LOGO - 需要改写动态功能

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

    public function wxCardUpdateImg() {

      $wxAccessToken = $this->wxAccessToken();

      //$data['access_token'] = $wxAccessToken;

      $data['buffer']   = '@D:\\workspace\\htdocs\\yky_test\\logo.jpg';

      $url      = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=".$wxAccessToken;

      $result     = $this->wxHttpsRequest($url,$data);

      $jsoninfo    = json_decode($result, true);

      return $jsoninfo;

 

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

网友点评