微信公众平台开发接口PHP SDK

正文的不二等秘书籍将囊括订阅号和服务号甚至自定蒿子单各个气象,无论是还是不是有高档接口权限,都有艺术来收获客户中央新闻,而无需模拟登录。

先前没接触过微信大伙儿平台支付,前几日刚找到实习公司将在求自小编做叁个Wechat公众平台的使用,于是乎带头学习Wechat民众平台开垦接口的调用,看支出文书档案之后还是不领悟从何先河,只可以上网找入门资料,终于在方倍工作室找到了一体化的SDK,精晓了思路之后实际也挺轻便的,无非便是拓宽客商、微信服务器、开拓者服务器三者之间的通讯。下边是自个儿参考方倍职业室SDK之后之间写的叁个SDK,首如若响应文件新闻和CLICK按键新闻,获取用户基本新闻,当然并从未满含全体的音讯类型和事件。更完整的SDK请参谋方倍工作室,链接:

把Wechat和第三方网站结合起来运转,是累累客商日常要的方案。这里大致介绍一下收获Wechat客商的基本新闻,并在第三方网址直接登陆。

$token = ‘qiduoyun’;

当微信公户关怀三个民众号时,会发出三个无比的OpenID,那时候大家就需求利用它去央浼Wechat服务器获取顾客的骨干音讯,满含头像,外号等。

$appid = 公众号appid;

更进一层详细的验证请参见 Wechat开辟文书档案 。

$appsecret = 公众号appsecret;

赢得的步调如下:

$wechat = new Wechat($token,$appid,$appsecret);

1 第一步:客商同意授权,获取code 2
次之步:通过code换取网页授权access_token 3 第三步:刷新access_token 4
第四步:拉取顾客音信(需scope为 snsapi_userinfo卡塔尔国 5
附:考验授权凭证是不是行得通

if(!isset($_GET[‘echostr’])) {
  $wechat->responseMsg();
} else {
  $wechat->valid();
}

一、在Wechat公众平台 ―― 开垦者宗旨 : 网页授权获取客户基本消息 :点击
“修正”,配置网页回调域名

class Wechat
{
  private $token;
  private $appid;
  private $appsecret;

二、顾客授权获取code

  public function __construct($token,$appid,$appsecret)
  {
    $this->token = $token;
    $this->appid = $appid;
    $this->appsecret = $appsecret;
  }

必备资源:

  //验证新闻真实
  public function valid()
  {
    $echostr = $_GET[‘echostr’];
    if($this->checkSignature()) {
    echo $echostr;
    exit;
    }
  }

$appid = ‘*****************’; $appsecret =
‘*************************’;

  //验证签字
  private function checkSignature()
  {
    $token = $this->token;
    $timestamp = $_GET[‘timestamp’];
    $nonce = $_GET[‘nonce’];
    $signature = $_GET[‘signature’];

注:redirect_url是授权后重定向的回调链接地址,请使用urlencode对链接实行拍卖。

    $tmpArr = array($token,$timestamp,$nonce);
    sort($tmpArr,SORT_STRING);
    $tmpStr = implode($tmpArr);
    $tmpStr = sha1($tmpStr);

在网址入口处加上配置的 $url =
‘’.$appid.’&redirect_uri=http%3A%2F%2Fjixian.c.zmit.cn%2F&response_type=code&scope=snsapi_userinfo&state=123&connect_redirect=1#wechat_redirect’;

    if($tmpStr == $signature) {
    return true;
    } else {
    return false;
    }
  }

并央求访问上诉 url 。

  //获取access_token
  private function get_access_token($appid,$appsecret)
  {
    $url =
“”
.
    $appid . “&secret=” . $appsecret;
    $output = file_get_contents($url);
    $jsoninfo = json_decode($output,true);
    $access_token = $jsoninfo[‘access_token’];
    return $access_token;
  }

当客商授权后,回调设置的域名,并会在url参数中拼接大家所急需的code,大家间接用
$_GET[‘code’] 获取就可以!

  //响应音信
  public function responseMsg()
  {
    $postStr = $GLOBALS[‘HTTP_RAW_POST_DATA’];
    if(!empty($postStr)) {
      $postObj =
simplexml_load_string($postStr,’SimpleXMLElement’,LIBXML_NOCDATA);
      $RX_TYPE = trim($postObj->MsgType);
      switch($RX_TYPE)
      {
       case ‘text’:
        $result = $this->receiveText($postObj);
        break;
      case ‘event’:
        $result = $this->receiveEvent($postObj);
        break;
      default:
        $result = “unknown message type: ” . $RX_TYPE;
澳门新葡萄京娱乐场,        break;
      }
      echo $result;
    } else {
      echo ”;
      exit;
    }
  }

三、通过code获取网页授权access_token和openid

  //接受文本音讯
  private function receiveText($object)
  {
    switch($object->Content)
    {
    case ‘猜猜小编是哪个人’: //发送单图像和文字消息:顾客核心消息

$token_url =
‘_tokenappid=’.$appid.’&secret=’.$appsecret.’&code=’.$code.’&grant_type=authorization_code’;$token
= json_decode(file_get_contents($token_url));$opendid=
$token-openid;$access_token = $token-access_token;

      //获取access_token
      $access_token =
$this->get_access_token($this->appid,$this->appsecret);

四、获取顾客音信

      //获取客商音信
      $url =
“” .
      $access_token . “&openid=” . $object->FromUserName .
“&lang=zh_CN”;
      $output = file_get_contents($url);
      $jsoninfo = json_decode($output,true);

$info_url =
‘_token=’.$access_token.’&openid=’.$opendid.’=zh_CN’;$info =
json_decode(file_get_contents($info_url));$data[‘name’] =
$info-nickname;$data[‘image’] = $info-headimgurl;print_r($info);

      if($jsoninfo[‘sex’] == 1) {
        $sex = “男”;
      } else if($jsoninfo[‘sex’] == 2) {
        $sex = “女”;
      } else {
        $sex = “未知”;
      }
      $content = array();
      $content[] = array(‘Title’ =>
“作者清楚你是什么人!”,’Description’ => “外号:” . $jsoninfo[‘nickname’]
.
        ”rn” . “性别:” . $sex . “rn” . “国家:” .
$jsoninfo[‘country’] . “rn” . “省份:” .
        $jsoninfo[‘province’] . “rn” . “城市:” .
$jsoninfo[‘city’],’PicUrl’ => $jsoninfo[‘headimgurl’],
        ’Url’ => ”);
      break;
    default:
      $content = ‘您发送的音讯有误!’;
      break;
    }
    if(is_array($content)) {
      if(isset($content[0][‘PicUrl’])) {
        $result = $this->transmitInfo($object,$content);
      }
    } else {
      $result = $this->transmitText($object,$content);
    }
    return $result;
  }

五、当获得到顾客的openid等音信后,大家就能够将其存入数据库,只要有openid了,就一定于Wechat客商已经报到该网址!

   //采取事件推送
  private function receiveEvent($object)
  {
    $content = “”;
    switch($object->Event)
    {
    case ‘subscribe’:
      $content = “款待关切*****!”;
      break;
    case ‘unsubscribe’:
      $content = “撤除关心”;
      break;
    case ‘CLICK’:
      switch($object->EventKey)
      {
      case ‘我是谁’:
        //获取access_token
        $access_token =
$this->get_access_token($this->appid,$this->appsecret);

使用AppID和AppSecret获取的access_token,通过全局Access
Token获取客商基本新闻

        //获取客户消息
        $url =
“” .
        $access_token . “&openid=” . $object->FromUserName .
“&lang=zh_CN”;
        $output = file_get_contents($url);
        $jsoninfo = json_decode($output,true);

  1. 客户关切甚至回复音信的时候,均能够得到客户的OpenID

    xml ToUserName![CDATA[gh_b629c48b653e]]/ToUserName FromUserName![CDATA[ollB4jv7LA3tydjviJp5V9qTU_kA]]/FromUserName CreateTime1372307736/CreateTime MsgType![CDATA[event]]/MsgType Event![CDATA[subscribe]]/Event EventKey![CDATA[]]/EventKey/xml

        if($jsoninfo[‘sex’] == 1) {
          $sex = “男”;
        } else if($jsoninfo[‘sex’] == 2) {
          $sex = “女”;
        } else {
          $sex = “未知”;
        }
        $content = array();
        $content[] = array(‘Title’ =>
“小编知道您是什么人!”,’Description’ => “别名:” . $jsoninfo[‘nickname’]
.
          ”rn” . “性别:” . $sex . “rn” . “国家:” .
$jsoninfo[‘country’] . “rn” . “省份:” .
          $jsoninfo[‘province’] . “rn” . “城市:” .
$jsoninfo[‘city’],’PicUrl’ => $jsoninfo[‘headimgurl’],
          ’Url’ => ”);
        break;
      default:
        $content = “该按钮暂时尚未增添事件!”;
        break;
        }
    break;
    default:
      $content = “对不起,方今暂不受理那件事件!”;
      break;
    }
    if(is_array($content)) {
      if(isset($content[0][‘PicUrl’])) {
        $result = $this->transmitInfo($object,$content);
      }
    } else {
      $result = $this->transmitText($object,$content);
    }
    return $result;
  }

其中的FromUserName就是OpenID

  //发送文书消息
  private function transmitText($object,$content)
  {
    $textTpl = “<xml>
          <ToUserName><![CDATA[%s]]></ToUserName>
          <FromUserName><![CDATA[%s]]></FromUserName>
          <CreateTime>%s</CreateTime>
          <MsgType><![CDATA[text]]></MsgType>
          <Content><![CDATA[%s]]></Content>
          </xml>”;
      $result = sprintf($textTpl, $object->FromUserName,
$object->ToUserName, time(), $content);
    return $result;
  }

  1. 然后使用access_token接口,乞求得到全局Access Token

  //发送单图文音信:客商大旨音讯
  private function transmitInfo($object,$infoArray)
  {
    if(!is_array($infoArray)) {
      return;
        }
    $itemTpl = “<item>
          <Title><![CDATA[%s]]></Title>
          <Description><![CDATA[%s]]></Description>
          <PicUrl><![CDATA[%s]]></PicUrl>
          <Url><![CDATA[%s]]></Url>
          </item> “;
    $item_str = “”;
    foreach ($infoArray as $item){
      $item_str .= sprintf($itemTpl, $item[‘Title’],
$item[‘Description’], $item[‘PicUrl’],
      $item[‘Url’]);
    }
    $infoTpl = “<xml>
          <ToUserName><![CDATA[%s]]></ToUserName>
          <FromUserName><![CDATA[%s]]></FromUserName>
          <CreateTime>%s</CreateTime>
          <MsgType><![CDATA[news]]></MsgType>
          <Content><![CDATA[]]></Content>
          <ArticleCount>%s</ArticleCount>
          <Articles> $item_str</Articles>
          </xml>”;
    $result = sprintf($infoTpl, $object->FromUserName,
$object->ToUserName, time(),
    count($infoArray));
    return $result;
  }
}

_type=client_credential&appid=应用程式ID&secret=应用程式SECRET再次来到结果:

{ "access_token": "NU7Kr6v9L9TQaqm5NE3OTPctTZx797Wxw4Snd2WL2HHBqLCiXlDVOw2l-Se0I-WmOLLniAYLAwzhbYhXNjbLc_KAA092cxkmpj5FpuqNO0IL7bB0Exz5s5qC9Umypy-rz2y441W9qgfnmNtIZWSjSQ", "expires_in": 7200}
  1. 再使用全局ACCESS_TOKEN获取OpenID的详细新闻

_token=ACCESS_TOKEN&openid=OPENID重回如下:

{ “subscribe”: 1, “openid”: “oLVPpjqs2BhvzwPj5A-vTYAX4GLc”, “nickname”:
“刺猬婴儿”, “sex”: 1, “language”: “zh_CN”, “city”: “深圳”, “province”:
“广东”, “country”: “中国”, “headimgurl”: “”, “subscribe_time”:
1386160805}

由来,得到顾客的着力消息。

这种方法最切合客商在关怀的时候,回复一条应接关切+顾客小名的音信,如关心上面民众账号时的上升所示。扫描二维码可心得。

上述便是本文针对phpWechat群众平台开垦之获得客户中央音讯的全体内容,希望大家爱不忍释。

发表评论

电子邮件地址不会被公开。 必填项已用*标注