龙空技术网

公众号小程序服务端获取用户ID用户信息代码分享

codeZhou 86

前言:

此刻姐妹们对“php开发微信公众号获取个人信息源码”大体比较重视,你们都需要知道一些“php开发微信公众号获取个人信息源码”的相关文章。那么小编在网上汇集了一些关于“php开发微信公众号获取个人信息源码””的相关资讯,希望咱们能喜欢,兄弟们快快来学习一下吧!

<?php

namespace app\common\qccx\library;

class WxJsApi

{

//正式账号配置

private $appId = '填你的appId';

private $appSecret = '填你的appSecret';

public function __construct($appId, $appSecret)

{

$this->appId = $appId;

$this->appSecret = $appSecret;

}

//将方法变为私有

private function getSignPackage($url)

{

$jsapiTicket = $this->getJsApiTicket();

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

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

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

//$url =";;

$timestamp = time();

$nonceStr = $this->createNonceStr();

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

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

$signature = sha1($string);

$signPackage = array(

"appId" => $this->appId,

"nonceStr" => $nonceStr,

"timestamp" => $timestamp,

"url" => $url,

"signature" => $signature/*,

"rawString" => $string*/

);

return $signPackage;

}

private function createNonceStr($length = 16)

{

$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

$str = "";

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

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

}

return $str;

}

private function getJsApiTicket()

{

// jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例

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

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

$accessToken = $this->getAccessToken();

// 如果是企业号用以下 URL 获取 ticket

// $url = ";;

$url = ";;

$res = json_decode($this->httpGet($url));

$ticket = $res->ticket;

if ($ticket) {

$data->expire_time = time() + 7000;

$data->jsapi_ticket = $ticket;

$fp = fopen("jsapi_ticket.json", "w");

fwrite($fp, json_encode($data));

fclose($fp);

}

} else {

$ticket = $data->jsapi_ticket;

}

return $ticket;

}

private function getAccessToken()

{

$url = ";appId&secret=$this->appSecret";

//查询缓存

$cache = new CacheFileService();

$access_token = $cache->get($this->appId);

if ($access_token) {

return $access_token;

} else {

$tk = $this->wx_api_request($url);

if (count($tk) > 0) {

//缓存1.9小时

$cache->set($this->appId, $tk['access_token'], 6840);

return $tk['access_token'];

}

}

return false;

}

private function wx_api_request($url)

{

$http_response = $this->httpGet($url);

$data = json_decode($http_response, true);

if (!empty($data['access_token'])) {

return $data;

}

return [];

}

// 获取用户信息

public function getUserInfo($openId)

{

$access_token = $this->getAccessToken();

$url = ";;

return json_decode($this->httpGet($url), true);

}

private function httpGet($url)

{

$curl = curl_init();

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

curl_setopt($curl, CURLOPT_TIMEOUT, 500);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

curl_setopt($curl, CURLOPT_URL, $url);

$res = curl_exec($curl);

curl_close($curl);

return $res;

}

}

标签: #php开发微信公众号获取个人信息源码