当前位置: 首页 > 后端技术 > PHP

微信第三方应用平台授权公众号-小程序

时间:2023-03-29 23:34:05 PHP

component_appid=$component_appid;$this->component_secret=$component_secret;$this->component_token=$component_token;$this->component_key=$component_key;}/**微信公众号/小程序授权给第三方应用平台*@paramsstring$redirect_url:授权后回调地址*@paramsstring$ticket:component_verify_ticket值*@paramsint$auth_type:授权类型,1公众号,2小程序*返回字符串$auth_url:授权链接*/publicfunctionstart_authorization($redirect_uri,$ticket,$auth_type){$pre_auth_code=$this->get_pre_auth_code($component_access_token);return"https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=".$this->component_appid."&pre_auth_code=".$pre_auth_code."&redirect_uri=".urlencode($redirect_uri)"&auth_type=".$auth_type;}/**接收微信消息推送事件本身,如:公众号/小程序取消授权,ticket值等*解密ticket值/AuthorizerAppid*对应的URL链接填写在微信应用第三方平台的“授权事件接收URL”中*/publicfunctionreceiveMsg(){require_once('crypt/wxBizMsgCrypt.php');$encryptMsg=isset($GLOBALS["HTTP_RAW_POST_DATA"])?$GLOBALS['HTTP_RAW_POST_DATA']:file_get_contents("php://input");$xml_tree=new\DOMDocument();$xml_tree->loadXML($encryptMsg);$xml_array=$xml_tree->getElementsByTagName("加密");$encrypt=$xml_array->item(0)->nodeValue;$Prpcrypt=new\Prpcrypt($this->component_key);$postData=$Prpcrypt->decrypt($encrypt,$this->component_appid);如果($postData[0]!=0){返回$postData[0];}else{$xml=new\DOMDocument();$xml->loadXML($postData[1]);$array_a=$xml->getElementsByTagName("InfoType");$infoType=$array_a->item(0)->nodeValue;//取消授权if($infoType=='unauthorized'){$array_b=$xml->getElementsByTagName("AuthorizerAppid");$AuthorizerAppid=$array_b->item(0)->nodeValue;}//票证价值elseif($infoType=='component_verify_ticket'){$array_e=$xml->getElementsByTagName("ComponentVerifyTicket");$component_verify_ticket=$array_e->item(0)->nodeValue;}}}/**获取微信第三方应用平台componet_access_token*@paramsstring$component_ticket:第三方应用平台ticket值(微信后台每10分钟推送一次该值)*returnstring$compoent_access_token:第三方应用平台access_token*/privatefunctionget_component_access_token($component_verify_ticket){$json=json_decode(file_get_contents('component_access_token.json'));}如果(isset($json->component_access_token)&&!empty($json->component_access_token)&&($json->expires_incomponent_access_token;}else{$url="https://api.weixin.qq.com/cgi-bin/component/api_component_token";$data='{"component_appid":"'.$this->component_appid.'","component_appsecret":"'.$this->component_secret.'","component_verify_ticket":"'.$component_verify_ticket.'"}';$ret=json_decode($this->https_post($url,$data));if(isset($ret->component_access_token)){$json='{"component_access_token":"'.$ret->component_access_token.'","expires_in":"'.(time()+$ret->expires_in).'"}';file_put_contents('component_access_token.json',$json);返回$ret->component_access_token;}else{返回空值;}}}/**获取预授权码pre_auth_code*@paramsstring$component_access_token:第三方应用平台access_token*returnjson$ret:返回pre_auth_code、expires_in*/privatefun动作get_pre_auth_code($component_access_token){$json=json_decode(file_get_contents('pre_auth_code.json'));if(isset($json->pre_auth_code)&&!empty($json->pre_auth_code)&&($json->expires_inpre_auth_code;}else{$url="https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=".$component_access_token;$data='{"component_appid":"'.$this->component_appid.'"}';$ret=json_decode($this->https_post($url,$data));if(isset($ret->pre_auth_code)){$json='{"pre_auth_code":"'.$ret->pre_auth_code.'","expires_in":"'.(time()+$ret->expires_in).'"}';file_put_contents('pre_auth_code.json',$json);返回$ret->pre_auth_code;}else{返回空值;}}}/**发送https_postrequest*@paramsstring$url:URL链接*@paramsjson$data:发送JSON数据*returnjson$ret:返回请求结果*/privatefunctionhttps_post($url,$data){$curl=curl_init();curl_setopt($curl,CURLOPT_URL,$url);如果(!empty($data)){curl_setopt($curl,CURLOPT_POST,1);curl_setopt($curl,CURLOPT_POSTFIELDS,$data);}curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);$output=curl_exec($curl);curl_close($curl);返回$输出;}/**发送https_get请求*@paramsstring$url:URL链接*returnjson$ret:返回请求结果*/privatefunctionhttps_get($url){$curl=curl_init();curl_setopt($curl,CURLOPT_URL,$url);curl_setopt($curl,CURLOPT_RETURNTRANSFER,TRUE);curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,FALSE);curl_setopt($curl,CURLOPT_HEADER,FALSE);curl_setopt($curl,CURLOPT_TIMEOUT,60);如果(curl_errno($curl)){返回'Errno'.curl_error($curl);}else{$result=curl_exec($curl);}curl_close($curl);返回$结果;}}$link=mysqli_connect('localhost','root','root','weixin');$sql="选择`appId`,`appSecret`,`token`,`encodingAesKey`,`component_verify_ticket`,`component_access_token`from`weixin`where`type`=1";$result=mysqli_query($link,$sql);$component=[];while($row=mysqli_fetch_assoc($result)){$component['appid']=$row['appId'];$component['secret']=$row['appSecret'];$component['token']=$row['token'];$component['key']=$row['encodingAesKey'];$component['ticket']=$row['component_verify_ticket'];$component['component_access_token']=$row['component_access_token'];}$authorize=newAuthorize($component['appid'],$component['secret'],$component['token'],$component['密钥']);$auth_url=$authorize->start_authorization('http://www.baidu.com/user/authorize_back.html',$component['ticket'],1);echo''.$auth_url.'';?>crypt解密微信官方消息演示包,下载地址:https://wximg.gtimg.com/shake...