php对接微信小程序接口类包含
登录微信小程序方法、
获取微信接口调用凭证方法、
获取微信加密scheme码方法、
获取微信access_token方法、
获取微信的unionid方法、
获取微信的用户信息方法、
根据微信access_token 获取用户手机号、
根据微信access_token 获取用户昵称、
根据微信access_token 获取公众号用户列表、
检查一段文本是否含有违法违规内容、
检查图片是否含有违法违规内容等方法,
直接导入使用
<?php
class WXMiniProgram
{
private $appid;
private $secret;
private $cache_fix = 'wxMiniProgram_';
public function __construct($types='' )
{
//这个地方用于判断调用的是微信小程序还是微信公众号
if(empty($types)){
$types = 'wxMiniProgram';
}
$this->cache_fix = $types.'_';
$this->appid = '你自己小程序appid';
$this->secret = '你自己小程序secret';
}
/** 登录微信小程序
* @param $code 登录凭证校验。通过 wx.login 接口获得临时登录凭证 code。
*/
public function auth_code2Session($code){
$url = "https://api.weixin.qq.com/sns/jscode2session?appid=$this->appid&secret=$this->secret&js_code=$code&grant_type=authorization_code";
$at_data = $this->c_request($url);
if (!isset($at_data["errcode"])){
return [
"unionid"=>$at_data["unionid"],
"openid"=>$at_data["openid"],
"session_key"=>$at_data["session_key"]
];
}else{
return false;
}
}
/** 获取微信接口调用凭证
* @param bool $is_cache 是否去缓存数据
* @return bool|mixed
*/
public function auth_getAccessToken($is_cache = true){
if (!$is_cache) return $this->auth_getAccessTokenPost();
$at_data = cache($this->cache_fix.'access_token');
if ($at_data){
return $at_data;
}else{
$at_data = $this->auth_getAccessTokenPost();
return $at_data;
}
}
/**
* @return false|mixed
* 获取微信加密scheme码
* $dates object path query env_version
*/
public function get_wx_scheme($dates){
$res['code'] =false;
$access_token = $this->auth_getAccessToken(false);
$url = "https://api.weixin.qq.com/wxa/generatescheme?access_token=".$access_token;
$tmpinfo = $this->https_request($url,$dates);
if($tmpinfo['errcode'] == 0){
$res['msg'] =$tmpinfo['openlink'];
$res['code'] =true;
return $res;
}else{
$res['msg'] =$tmpinfo['errmsg'];
return $res;
}
}
/**
* @return false|mixed
* 获取微信access_token 根据初始化是微信小程序还是微信公众号
*/
private function auth_getAccessTokenPost(){
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appid&secret=$this->secret";
$at_data = $this->c_request($url);
if (!isset($at_data["errcode"])){
cache($this->cache_fix.'access_token',$at_data["access_token"],$at_data["expires_in"]);
return $at_data["access_token"];
}else{
return false;
}
}
/**
* @return false|mixed
* 获取微信的unionid 公众号和微信小程序一样 必须是一个主题开通绑定过微信开发平台才有unionid
*/
public function get_wxunionid($openid){
$access_token = $this->auth_getAccessToken(false);
$url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
$at_data = $this->c_request($url);
if (!isset($at_data["errcode"])){
cache($this->cache_fix.'unionid',$at_data["unionid"]);
return $at_data["unionid"];
}else{
return false;
}
}
/**
* @return false|mixed
* 获取微信的用户信息 公众号和微信小程序一样 必须是一个主题开通绑定过微信开发平台才有unionid
*/
public function get_wxUserInfo($openid){
$access_token = $this->auth_getAccessToken(false);
$url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
$at_data = $this->c_request($url);
if (!isset($at_data["errcode"])){
return $at_data;
}else{
return false;
}
}
/**
* @return false|mixed
* 根据微信access_token 获取用户手机号
*/
public function get_wxphonenumber($code){
$access_token = $this->auth_getAccessTokenPost();
$url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=".$access_token;
$data['code'] = $code;//前端获取code
$tmpinfo = $this->https_request($url,$data);
$code = $tmpinfo['errcode'];
if($code == 0){
return $tmpinfo['phone_info'];
}else{
return '';
}
}
/**
* @return false|mixed
* 根据微信access_token 获取用户昵称
*/
public function get_wxUserNice($openid){
$access_token = $this->auth_getAccessToken(false);
var_dump($access_token);
$url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
$tmpinfo = $this->https_request($url);
$code = $tmpinfo['errcode'];
if($code == 0){
return $tmpinfo['phone_info'];
}else{
return '';
}
}
/**
* @return false|mixed
* 根据微信access_token 获取公众号用户列表
*/
public function getGZ_userList($next_openid = ''){
$access_token = $this->auth_getAccessTokenPost();
$wei = '';
if(!empty($next_openid)){
$wei = "&next_openid=".$next_openid;
}
$url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=".$access_token.$wei;
$tmpinfo = $this->c_request($url);
if(!empty($tmpinfo['data'])){
return $tmpinfo;
}else{
return '';
}
}
/** 检查一段文本是否含有违法违规内容。微信小程序
* @param $openid 用户的openid(用户需在近两小时访问过小程序)
* @param int $scene 场景枚举值(1 资料;2 评论;3 论坛;4 社交日志)
* @param $content 需检测的文本内容,文本字数的上限为2500字
* @param $nickname 用户昵称
* @param $title 文本标题
* @param $signature 个性签名,该参数仅在资料类场景有效(scene=1)
*/
public function security_msgSecCheck($openid,$scene,$content,$nickname='',$title='',$signature=""){
$shenhe = config('site.shenhe');
if($shenhe == 1){
$access_token = $this->auth_getAccessToken(false);
$url = "https://api.weixin.qq.com/wxa/msg_sec_check?access_token=$access_token";
$data=[
"version"=>'2',
"openid"=>$openid,
"scene"=>$scene,
"content"=>$content,
"nickname"=>$nickname,
"title"=>$title,
"signature"=>$signature,
];
$at_data = $this->https_request($url,$data);
if ($at_data["errcode"]==0){
return false;
}else{
return false;
}
}else{
return true;
}
}
/** 检查图片是否含有违法违规内容。微信小程序
* @param $openid 用户的openid(用户需在近两小时访问过小程序)
* @param int $scene 场景枚举值(1 资料;2 评论;3 论坛;4 社交日志)
* @param $content 需检测的文本内容,文本字数的上限为2500字
* @param $nickname 用户昵称
* @param $title 文本标题
* @param $signature 个性签名,该参数仅在资料类场景有效(scene=1)
*/
public function security_imgSecCheck($files){
$shenhe = config('site.shenhe');
if($shenhe == 1){
$access_token = $this->auth_getAccessToken(false);
$url = "https://api.weixin.qq.com/wxa/img_sec_check?access_token=$access_token";
$data=[
"access_token"=>$access_token,
"media"=>$files[0],
];
$header = array('Content-Type: multipart/form-data');
$at_data = $this->https_request_hader($url,$data,$header);
$res = json_decode($at_data);
if ($res->errcode==0){
return false;
}else{
return false;
}
}else{
return true;
}
}
private function https_request($url, $data = null) {
if ($data){
$json_data = json_encode($data);
$data = urldecode($json_data);
}
$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);
curl_setopt($curl, CURLOPT_TIMEOUT,60);
$output = curl_exec($curl);
curl_close($curl);
return json_decode($output,true);
}
/**
* @param $url
* @param $data
* @param $header
* @return bool|string 带头部的一个新的 cURL 会话
*/
private function https_request_hader($url, $data = null,$header = null) {
if ($data){
$json_data = json_encode($data);
$data = urldecode($json_data);
}
$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);
}
if (!empty($header)){
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT,60);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
/**
* @param $url
* @return mixed 一个新的 cURL 会话
*/
private function c_request($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
return json_decode($output, true);
}
}
发表评论 取消回复