微信相关接口对接示例
提示:如果遇到其他接口问题,欢迎留言,我会根据您的留言去补充对接示例,以供大家学习参考
文章目录
前言
如果文章对大家有参考价值,欢迎留言点赞
提示:以下是本篇文章正文内容,下面案例可供参考
一、微信获取access_token:示例
publicfunction getAccessToken($appid,$appAecret){
$access_token = Cache::store('redis')->get($this->MINI_ACCESS_TOKEN);//获取缓存信息
if(!empty($access_token) && $access_token != null){
return $access_token;
}
$token_url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appAecret;
$res = $this->httpGet($token_url);
if($res->access_token){
//存入缓存,设置过期时间,推荐90分钟
Cache::store('redis')->set($this->MINI_ACCESS_TOKEN,$res->access_token,4800);
return $res->access_token;
}
return [];
}
二、检测用户是否关注公众号:示例
public function checkUserAttention($open_id)
{
$access_token = $server->getAcessToken();
//openid:公众号openid
$url = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$access_token.'&openid='.$open_id.'&lang=zh_CN';
$res = $this->httpGet($url);
logRecord("检测是否关注公众号结果:".json_encode($res));
$data['subscribe'] = 0;
if(isset($res->subscribe) && $res->subscribe == 1){
$data['subscribe'] = 1;
}
//subscribe == 1是用户已关注公众号,== 0则是未关注公众号
return ApiResponse::newSuccess($data);
}
三、获取二维码:示例
public function getQrcodeurl($scene_id,$type = 1) : array{
Log::record('------------请求微信token start---------------');
$tokenServer = new WechatTokenServer;
$token = $tokenServer->getAcessToken();
Log::record($token);
Log::record('------------请求微信token end---------------');
$url = self::QRCODE_URL.'access_token='.$token;
//生成临时二维码
$qrcode_array = array(
'expire_seconds'=> $this->timeout,
);
//$type 1:临时二维码 2:永久二维码
if($type == 1){
//传递字符串
if (gettype($scene_id) == 'string') {
$qrcode_array['action_name'] = 'QR_STR_SCENE';
$qrcode_array['action_info']['scene']['scene_str'] = $scene_id;
} else {
//传递数字
$qrcode_array['action_name'] = 'QR_SCENE';
$qrcode_array['action_info']['scene']['scene_id'] = $scene_id;
}
}else{
//传递字符串
if (gettype($scene_id) == 'string') {
$qrcode_array['action_name'] = 'QR_LIMIT_STR_SCENE';
$qrcode_array['action_info']['scene']['scene_str'] = $scene_id;
} else {
//传递数字
$qrcode_array['action_name'] = 'QR_LIMIT_SCENE';
$qrcode_array['action_info']['scene']['scene_id'] = $scene_id;
}
}
$qrcode = json_encode($qrcode_array);
Log::record('------------请求微信二维码 start---------------');
Log::record($qrcode);
$result = HttpCurl::request($url,$qrcode);
// halt($result);
$ticketArray = json_decode($result,true);
Log::record($ticketArray);
Log::record('------------请求微信二维码 end---------------');
if (empty($ticketArray)){
return [];
}
//判断如果返回40001 错误 那么刷新token再来一次
if (array_key_exists('errcode', $ticketArray) && $ticketArray['errcode'] == self::TOKEN_ERROR) {
$tokenServer->deleteAcessToken();
return $this->getQrcodeurl($scene_id);
}
return $ticketArray;
}
四、获取unionid:示例
public function getUnionid(Request $request)
{
if ($request->isPost()) {
$data = postMore([
['code', ''],
]);
logRecord('小程序code:'.json_encode($data).'appid:'.$this->_mini_appId.'secret'.$this->_mini_appSecret);
//获取小程序unionid、openid、session_key
$url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$this->_mini_appId.'&secret='.$this->_mini_appSecret.'&js_code='.$data['code'].'&grant_type=authorization_code';
$res = $this->httpGet($url);
return res;
}
五、微信解密小程序手机号:示例
public function decryptData( $encryptedData, $iv,$sessionKey, &$data )
{
$appid = config('wechat.MiniAppID');
if (strlen($sessionKey) != 24) {
return ApiResponse::newError(ApiResponse::getMessage(ApiResponse::ILLEGAL_AES_KEY), ApiResponse::ILLEGAL_AES_KEY);
}
$aesKey=base64_decode($sessionKey);
if (strlen($iv) != 24) {
return ApiResponse::newError(ApiResponse::getMessage(ApiResponse::ILLEGAL_IV), ApiResponse::ILLEGAL_IV);
}
$aesIV=base64_decode($iv);
$aesCipher=base64_decode($encryptedData);
$result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);
$dataObj = json_decode($result);
if($dataObj == NULL){
return ApiResponse::newError(ApiResponse::getMessage(ApiResponse::ILLEGAL_BUFFER), ApiResponse::ILLEGAL_BUFFER);
}
if( $dataObj->watermark->appid != $appid )
{
return ApiResponse::newError(ApiResponse::getMessage(ApiResponse::ILLEGAL_BUFFER), ApiResponse::ILLEGAL_BUFFER);
}
return json_decode($result,true);
}
六、微信客服消息:示例
//access_Token 这个就不多说了,通过获取token接口获取
$access_Token = $this->getAccessToken();
//发送客服消息的url
$url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$access_Token;
//发送内容
$content = '文本内容<a href="http://www.qq.com" data-miniprogram-appid="AppID" data-miniprogram-path="pages/index/index">点击跳小程序</a>';
//发送数据
$miniData = [
"touser"=>'OPENID',
"msgtype"=>"text",
"text"=> [
"content"=>$content
]
];
$ret = HttpCurl::request($url,json_encode($miniData, JSON_UNESCAPED_UNICODE));
七、获取urlLink:示例
public function urlLink() {
//_mini_appId:小程序的appid,_mini_appSecret:小程序的appSecret
$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->_mini_appId.'&secret='.$this->_mini_appSecret;
$ret = $this->httpGet($url);
$access_token = $ret->access_token;
$urlLink = 'https://api.weixin.qq.com/wxa/generate_urllink?access_token='.$access_token;
$data = [
'is_expire'=>true,
'expire_type'=>1,
'expire_interval'=>3,
];
$result = HttpCurl::request($urlLink,json_encode($data));
}
八、get请求:
public function httpGet($url) {
$ch = curl_init();//初始化curl
curl_setopt($ch, CURLOPT_URL,$url); //要访问的地址
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//跳过证书验证
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在
$data = json_decode(curl_exec($ch));
if(curl_errno($ch)){
Log::record('jd解析::传的文档格式错误::'.curl_error($ch));//若错误打印错误信息
}
curl_close($ch);//关闭curl
return $data;
}
九、post请求:
public static function request($url, $data, $method = 'POST', $header = array(), $time_out = 60,$connect_time_out = 30)
{
$defaults = array(
CURLOPT_HEADER => 0, //输出返回头信息 false 关闭
CURLOPT_HTTPHEADER => $header, //header头信息
CURLOPT_RETURNTRANSFER => 1, //如果成功只将结果返回,不自动输出任何内容。
CURLOPT_TIMEOUT => $time_out, //设置超时,从服务器接收缓冲完成前需要等待多长时间
CURLOPT_CONNECTTIMEOUT => $connect_time_out,//在成功连接服务器前等待多久
CURLOPT_SSL_VERIFYPEER => 0,//部分链接url要以https协议进行,设定以跳过证书验证
CURLOPT_SSL_VERIFYHOST => 0, //从证书中检查SSL加密算法是否存在
);
if ($method == 'POST') {
$defaults[CURLOPT_POST] = 1; //true时发送post请求;
$defaults[CURLOPT_POSTFIELDS] = is_array($data) ? http_build_query($data) : $data;
$defaults[CURLOPT_URL] = $url;
}elseif($method == 'DELETE'){
$defaults[CURLOPT_CUSTOMREQUEST] = "DELETE"; //发送delete请求;
$defaults[CURLOPT_URL] = $url.'?'.$data;
}elseif($method == 'PUT'){
$defaults[CURLOPT_CUSTOMREQUEST] = "PUT"; //发送delete请求;
$defaults[CURLOPT_POSTFIELDS] = is_array($data) ? http_build_query($data) : $data;
$defaults[CURLOPT_URL] = $url;
}else {
$defaults[CURLOPT_URL] = $url . '?' . http_build_query($data);
}
$ch = curl_init();//初始化curl
curl_setopt_array($ch, $defaults);
$result = curl_exec($ch); //执行curl请求
if (curl_errno($ch)) {
return curl_error($ch);
}
curl_close($ch);
return $result;
}
总结
以上是部分微信接口对接示例,需要根据剔除一些无用打印。欢迎留言