php 生成小程序二维码
public function generate($code, $isShow) { // 构建二维码参数 $scene = 'C=' . $code.'&path=green'; $params = [ "scene" => $scene, 'page' => 'pages/login/registerSales', // 小程序页面路径 'width' => 200, // 二维码宽度 ]; // 调用微信接口获取 access_token $wechatService = new WechatApiService(); $access_token = $wechatService->getAccessToken(true); if (empty($access_token)) { $access_token = $wechatService->getAccessToken(true); } $accessToken = $access_token; // 调用微信接口生成小程序二维码 $url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={$accessToken}"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $imageData = curl_exec($ch); curl_close($ch); if($isShow){ header("Content-Type: image/jpeg;text/html; charset=utf-8"); echo $imageData; exit; } $path = 'uploadfile/admin/green_invite_qrcode/'; if(!file_exists($path)){ mkdir($path, 0777, true); } // 保存二维码图片 $filename = 'invite_qrcode_' . $code . '.png'; $file_path = public_path($path) . $filename; file_put_contents($file_path, $imageData); return $path . $filename; }
<?php /** * 获取微信相关接口 */ namespace App\Services\Wechat; use App\Tools\Common; use App\Tools\HttpCurl; use App\Tools\RedisCommon; class WechatApiService extends \App\Services\BaseService { public function getOpenidByCode($code) { $url = "https://api.weixin.qq.com/sns/jscode2session"; $data = [ 'appid' => Common::getConfigValByEnv('wechat.APP_ID'), 'secret' => Common::getConfigValByEnv('wechat.APP_SECRET'), 'js_code' => $code, 'grant_type' => 'authorization_code', ]; /** * 正确时返回 *{"session_key": "6I7echmzado/KAk0tw9t1g==", *"openid": "oy3tU41PkUKSzXgMQB_K515qMS_A"} * 失败时返回:{"errcode": 40163,"errmsg": "code been used, rid: 6448dd1c-6b6cb729-1abe846a"} */ $result = HttpCurl::sendGet($url, $data); unset($data['secret']); Common::logInfo('','查询微信openid返回', ['params'=>$data,'result'=>$result]); $result = json_decode($result,true); if(Common::getConfigValByEnv('wechat.wx_api_debug') === true && empty($result['openid'])){ $result['openid'] = 'abcfdfsd5454'; } return $result; } /** * 通过小程序code获取用户手机号 * { "errcode":0, "errmsg":"ok", "phone_info": { "phoneNumber":"xxxxxx", "purePhoneNumber": "xxxxxx", "countryCode": 86, "watermark": { "timestamp": 1637744274, "appid": "xxxx" } } } * @param $code * @return void */ public function getPhoneNumber($code) { $result = $this->getWxPhoneNumber($code); if($result['errcode'] != '0' && $result['errcode'] == '40001'){ $result = $this->getWxPhoneNumber($code, true); } if($result['errcode'] != '0'){ return self::showMsg(self::CODE_FAIL, self::MSG_FAIL, $result); } return self::showMsg(self::CODE_SUCCESS, self::MSG_SUCCESS, $result['phone_info']); } private function getWxPhoneNumber($code, $refreshToken=false) { if(env('APP_ENV') == 'local'){ $url = 'https://consultant.noakcent.com/wp/wechat/get_access_token'; $result = HttpCurl::sendPost($url, ['tk'=>'!@#$%^789_'.date('md')]); $acObj = json_decode($result, true); $token = $acObj['data']; }else{ $token = $this->getAccessToken($refreshToken); } $url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=".$token; $data = ['code'=>$code]; $result = HttpCurl::sendJsonPost($url, $data); Common::logInfo('','查询微信getPhoneNumber返回', ['url'=>$url,'params'=>$data,'result'=>$result]); $result = json_decode($result,true); return $result; } /** * 获取微信access_token值 * @return void */ public function getAccessToken($refresh=false) { $key = 'nobel.wechat.access_token'; $accessToken = RedisCommon::get($key); if(!$accessToken || $refresh === true){ $url = "https://api.weixin.qq.com/cgi-bin/token"; $data = [ 'appid' => Common::getConfigValByEnv('wechat.APP_ID'), 'secret' => Common::getConfigValByEnv('wechat.APP_SECRET'), 'grant_type' => 'client_credential', ]; $result = HttpCurl::sendGet($url, $data); unset($data['secret']); Common::logInfo('','查询微信access_token返回', ['params'=>$data,'result'=>$result]); $result = json_decode($result,true); if(!empty($result['access_token'])){ $accessToken = $result['access_token']; RedisCommon::set($key, $accessToken, 7190); } } // if(Common::getConfigValByEnv('wechat.wx_api_debug') === true && empty($result['openid'])){ // $result['openid'] = 'test'; // } Common::logInfo('','微信access_token:', ['wx-accesstoken'=>$accessToken]); return $accessToken; } }
posted on 2024-02-28 16:03 andydaopeng 阅读(47) 评论(0) 编辑 收藏 举报