用过微擎、微赞、微动力等第三方公众号管理平台的人都知道,需要在这些平台中接入公众号(就是授权给第三方平台),为了了解探究微擎中扫码授权的机制,看了微信开放平台中的第三方平台开发,并做了实例,写下此文纪念我这一天遇到的坑!!!
公众平台第三方平台是为了让公众号或小程序运营者,在面向垂直行业需求时,可以一键授权给第三方平台(并且可以同时授权给多家第三方),通过第三方平台来完成业务
第一个注意点:申请的时候有一个校验文件,需要放到根目录
第二个注意点:测试公众号 已授权的第三方平台不要超过5个,不然后续授权会出错,请看/article/jiaocheng/68434.html
第三个注意点:消息校验Token和消息加解密Key 可以自己填写,不需要纠结去哪获取
第四个注意点:测试授权的时候一定要用填写的 授权测试公众号 ,用其他的公众号也会报错
本文适合小白、或初探第三方平台的人看,大神请不要吐槽~此文主要写授权流程
我们小小码农初看官方文档肯定会有懵逼的感觉,云里雾里,官方文档说的不太明白。
官网步骤一:要先获取什么pre_auth_code,但是获取pre_auth_code需要先获取component_access_token,而获取component_access_token需要先拿到component_verify_ticket…
这个关系略坑,按照代码顺序来说其实是如下这样的:
component_verify_ticket->component_access_token->pre_auth_code
然后才能引入用户进入授权页,即扫码将公众号的接口权限赋于第三方平台。
最坑的一点就是获取component_verify_ticket,需要用加密协议…这一点让我迷惑了好几个小时…还是通过百度之后才得以解决,获得了这个ticket。
我分了四个文件来写授权,以下是示例代码
官方的示例代码:/shake_tv/mpwiki/cryptoDemo.zip
1.第一个文件accept.php获取component_verify_ticket:(此文件需要和官方下载的php文件夹内的加解密文件放一起,微信服务器推送ticket的时候会生成ticket.log文件)
在此要感谢这篇文章:/heysteria/article/details/50041163
accept.php:
define('LOGPATH', dirname(__FILE__));include_once "wxBizMsgCrypt.php";//以下三个变量,自己去开放平台上管理中心根据实际情况填写。$encodingAesKey = '自己填写的消息加解密Key '; $token = '自己填写的消息校验Token';$appId = '自己的appid';$timeStamp = empty($_GET['timestamp'])? "" : trim($_GET['timestamp']) ;$nonce= empty($_GET['nonce'])? "" : trim($_GET['nonce']) ;$msg_sign = empty($_GET['msg_signature']) ? "" : trim($_GET['msg_signature']) ;$encryptMsg = file_get_contents('php://input');$pc = new WXBizMsgCrypt($token, $encodingAesKey, $appId);$xml_tree = new DOMDocument();$xml_tree->loadXML($encryptMsg);$array_e = $xml_tree->getElementsByTagName('Encrypt');$encrypt = $array_e->item(0)->nodeValue;$format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>";$from_xml = sprintf($format, $encrypt);logResult('/form.log', $from_xml);// 第三方收到公众号平台发送的消息$msg = '';$errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg);if ($errCode == 0) {//print("解密后: " . $msg . "\n");$xml = new DOMDocument();$xml->loadXML($msg);$array_e = $xml->getElementsByTagName('ComponentVerifyTicket');$component_verify_ticket = $array_e->item(0)->nodeValue;file_put_contents(LOGPATH.'/ticket.log', $component_verify_ticket);logResult('/msgmsg.log','解密后的component_verify_ticket是:'.$component_verify_ticket);echo 'success';} else {logResult('/error.log','解密后失败:'.$errCode);print($errCode . "\n");}function logResult($path,$data){file_put_contents(LOGPATH.$path, '['.date('Y-m-d : h:i:sa',time()).']'.$data."\r\n",FILE_APPEND);}die();
2.通过第一步就可以获取到component_verify_ticket了(从ticket.log中拿到),然后获取component_access_token
/*** http/https请求函数*/function https_request($url,$data=null){$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);$output = curl_exec($curl);curl_close($curl);return $output;}$url = "https://api./cgi-bin/component/api_component_token";$data = array("component_appid"=>"你的appid","component_appsecret"=>"你的appsecret","component_verify_ticket"=>"SPt1dEQx-QFn5MAXQ4zVmM1w1QBRlKGSHHnd6ebMCzJx21A_0RPaUHCovYNJUR6z-iYM-1c_asp0m1zoheT99g");$send_result = https_request($url, json_encode($data));$send_result = json_decode($send_result,true);var_dump($send_result);
3.通过上一步拿到component_access_token,换取pre_auth_code
$token = "6_36ssst_zdzZ8sxcBn6P_-OiyM-dOVfrgBf2kEG4PCJyMu0oiMACiRXGn_zhq13j1QuXWCdL3EdTdGJb4-MTJAFTcsedQkU4Ghi7pyS5410tElXsc9vhq5D18xHDgF2t2G93o8bL-l05xVHFHAXdAGAMFC";$url = "https://api./cgi-bin/component/api_create_preauthcode?component_access_token={$token}";$data = array("component_appid"=>"你的appid");$send_result = https_request($url, json_encode($data));$send_result = json_decode($send_result,true);var_dump($send_result);
4.通过第三步就可以获取到pre_auth_code了,然后就能授权啦
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>授权测试页</title></head><body><a href="https://mp./cgi-bin/componentloginpage?component_appid=wxd8f2bd0718eb0143&pre_auth_code=preauthcode@@@3RFasdaRgPvceKww4LvN4655IvvBXu7ZsqkMjb9VX7AP-0hsujUEMGO7k1yBlw3F&redirect_uri=http%3A%2F%" id="authurl" style="display: inline;"><img src="https://open./zh_CN/htmledition/res/assets/res-design-download/icon_button3_1.png"></a></body></html>
效果如下:
点击就可以授权啦!
授权失败记的看一下上面我说的注意点!!!
如果觉得《微信公众号授权---第三方平台(php)》对你有帮助,请点赞、收藏,并留下你的观点哦!